使用小波变换对图像进行去噪
使用小波变换对图像进行去噪,VisuShrink,BayesShrink,灰度图,彩色图
·
使用小波变换对图像进行去噪
实现效果
代码
import matplotlib.pyplot as plt
from skimage.restoration import (denoise_wavelet,estimate_sigma)
from skimage.util import random_noise
from skimage.metrics import peak_signal_noise_ratio
import skimage.io
import cv2
def waveletDenoiseGray(src):
#读取图片,并转换成flaot类型
img=skimage.io.imread(src)
img=skimage.img_as_float(img)
#往图片添加随机噪声
sigma=0.1
imgNoise=random_noise(img,var=sigma**2)
#估计当前的图像的噪声的方差
#由于随机噪声的裁切,估计的sigma值将小于指定的sigma的值
sigma_est=estimate_sigma(imgNoise,average_sigmas=True)
#对图像分别使用Bayesshink算法和Visushrink算法
#输入带噪图像,小波变换模式选择 ,阈值模式,小波分解的级别,小波基,
imgBayes=denoise_wavelet(imgNoise,method='BayesShrink',mode='soft',
wavelet_levels=3,wavelet='bior6.8',
rescale_sigma=True)
imgVisushrink=denoise_wavelet(imgNoise,method='VisuShrink',mode='soft',
sigma=sigma_est/3,wavelet_levels=5,
wavelet='bior6.8',rescale_sigma=True)
#计算输入和输出之间的PSNR值
psnrNoise=peak_signal_noise_ratio(img,imgNoise)
psnrBayes=peak_signal_noise_ratio(img,imgBayes)
psnrVisushrink=peak_signal_noise_ratio(img,imgVisushrink)
#将降噪图片结果输出出来
plt.subplot(2,2,1)
plt.imshow(img,cmap=plt.cm.gray)
plt.title('Original Image')
plt.subplot(2,2,2)
plt.imshow(imgNoise,cmap=plt.cm.gray)
plt.title('Noise Image')
plt.subplot(2,2,3)
plt.imshow(imgBayes,cmap=plt.cm.gray)
plt.title('Denoised Image using Bayes')
plt.subplot(2,2,4)
plt.imshow(imgVisushrink,cmap=plt.cm.gray)
plt.title('Denoised Image using Visushrink')
plt.show()
#将PSNR的值打印处理
print('estimate sigma:',sigma_est)
print('PSNR[orignal vs NoiseImgae]:',psnrNoise)
print('PSNR[orignal vs Denoise[Bayes]]:',psnrBayes)
print('PSNR[orignal vs Denoise[Visushrink]]:', psnrVisushrink)
def waveletDenoiseRgb(src):
#读取图片,并转换成flaot类型
img=skimage.io.imread(src)
img=skimage.img_as_float(img)
#往图片添加随机噪声
sigma=0.15
imgNoise=random_noise(img,var=sigma**2)
#估计当前的图像的噪声的方差
#由于随机噪声的裁切,估计的sigma值将小于指定的sigma的值,彩色图片需要设定多通道
sigma_est=estimate_sigma(imgNoise,multichannel=True,average_sigmas=True)
#对图像分别使用Bayesshink算法和Visushrink算法
#输入带噪图像,小波变换模式选择 ,阈值模式,小波分解的级别,小波基,
imgBayes=denoise_wavelet(imgNoise,method='BayesShrink',mode='soft',
wavelet_levels=3,wavelet='coif5',
multichannel=True,convert2ycbcr= True,
rescale_sigma=True)
imgVisushrink=denoise_wavelet(imgNoise,method='VisuShrink',mode='soft',
sigma=sigma_est/3,wavelet_levels=5,
wavelet='coif5',
multichannel = True,convert2ycbcr = True,rescale_sigma=True)
# 计算输入和输出之间的PSNR值
psnrNoise = peak_signal_noise_ratio(img, imgNoise)
psnrBayes = peak_signal_noise_ratio(img, imgBayes)
psnrVisushrink = peak_signal_noise_ratio(img, imgVisushrink)
# 将降噪图片结果输出出来
plt.subplot(2, 2, 1)
plt.imshow(img, cmap=plt.cm.gray)
plt.title('Original Image')
plt.subplot(2, 2, 2)
plt.imshow(imgNoise, cmap=plt.cm.gray)
plt.title('Noise Image')
plt.subplot(2, 2, 3)
plt.imshow(imgBayes, cmap=plt.cm.gray)
plt.title('Denoised Image using Bayes')
plt.subplot(2, 2, 4)
plt.imshow(imgVisushrink, cmap=plt.cm.gray)
plt.title('Denoised Image using Visushrink')
plt.show()
# 将PSNR的值打印处理
print('estimate sigma:', sigma_est)
print('PSNR[orignal vs NoiseImgae]:', psnrNoise)
print('PSNR[orignal vs Denoise[Bayes]]:', psnrBayes)
print('PSNR[orignal vs Denoise[Visushrink]]:', psnrVisushrink)
if __name__ == "__main__":
inputSrc='C:/Users/admin/Desktop/project/originPhoto/lenaGrey.png'
# inputSrc='C:/Users/admin/Desktop/project/originPhoto/lena.png'
waveletDenoiseGray(inputSrc)
更多推荐
已为社区贡献1条内容
所有评论(0)