使用小波变换对图像进行去噪
实现效果
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/90ace299447e9d2ad1bc50ee880034ee.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/f2e33f61a2a2c030f838fea39a1c3062.png)
代码
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):
img=skimage.io.imread(src)
img=skimage.img_as_float(img)
sigma=0.1
imgNoise=random_noise(img,var=sigma**2)
sigma_est=estimate_sigma(imgNoise,average_sigmas=True)
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)
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()
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):
img=skimage.io.imread(src)
img=skimage.img_as_float(img)
sigma=0.15
imgNoise=random_noise(img,var=sigma**2)
sigma_est=estimate_sigma(imgNoise,multichannel=True,average_sigmas=True)
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)
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()
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'
waveletDenoiseGray(inputSrc)