scikit-image库--图像去噪(八)

图像去噪

在本例中,使用总变化、双边和小波去噪滤波器对图像的噪声版本进行去噪。
全变分法和双边算法通常产生“后验”图像,其平面域由锐边分隔。通过控制去噪和对原始图像的忠实之间的权衡,可以改变后验的程度。

总变化滤波器(Total variation filter)

该滤波器的结果是一个具有最小总变化范数的图像,同时尽可能接近初始图像。总变化是图像梯度的l1范数。

双边滤波器(Bilateral filter)

双边滤波器是一种边缘保持和降噪滤波器。它根据像素的空间相似性和辐射相似性来平均像素。

小波去噪滤波器(Wavelet denoising filter)

小波去噪滤波器依赖于图像的小波表示。在小波域中,噪声用小值表示,小值设为0。
在彩色图像中,小波去噪通常在YCBCR颜色空间中进行,因为在单独的颜色通道中去噪可能会导致更明显的噪声。

import matplotlib.pyplot as plt

from skimage.restoration import (denoise_tv_chambolle, denoise_bilateral,
                                 denoise_wavelet, estimate_sigma)
from skimage import data, img_as_float
from skimage.util import random_noise


original = img_as_float(data.chelsea()[100:250, 50:300])

sigma = 0.155
noisy = random_noise(original, var=sigma**2)

fig, ax = plt.subplots(nrows=2, ncols=4, figsize=(18, 8),
                       sharex=True, sharey=True)

plt.gray()

# Estimate the average noise standard deviation across color channels.
sigma_est = estimate_sigma(noisy, multichannel=True, average_sigmas=True)
# Due to clipping in random_noise, the estimate will be a bit smaller than the
# specified sigma.
print("Estimated Gaussian noise standard deviation = {}".format(sigma_est))

ax[0, 0].imshow(noisy)
ax[0, 0].axis('off')
ax[0, 0].set_title('Noisy')
ax[0, 1].imshow(denoise_tv_chambolle(noisy, weight=0.1, multichannel=True))
ax[0, 1].axis('off')
ax[0, 1].set_title('TV')
ax[0, 2].imshow(denoise_bilateral(noisy, sigma_color=0.05, sigma_spatial=15,
                multichannel=True))
ax[0, 2].axis('off')
ax[0, 2].set_title('Bilateral')
ax[0, 3].imshow(denoise_wavelet(noisy, multichannel=True))
ax[0, 3].axis('off')
ax[0, 3].set_title('Wavelet denoising')

ax[1, 1].imshow(denoise_tv_chambolle(noisy, weight=0.2, multichannel=True))
ax[1, 1].axis('off')
ax[1, 1].set_title('(more) TV')
ax[1, 2].imshow(denoise_bilateral(noisy, sigma_color=0.1, sigma_spatial=15,
                multichannel=True))
ax[1, 2].axis('off')
ax[1, 2].set_title('(more) Bilateral')
ax[1, 3].imshow(denoise_wavelet(noisy, multichannel=True, convert2ycbcr=True))
ax[1, 3].axis('off')
ax[1, 3].set_title('Wavelet denoising\nin YCbCr colorspace')
ax[1, 0].imshow(original)
ax[1, 0].axis('off')
ax[1, 0].set_title('Original')

fig.tight_layout()

plt.show()

scikit-image库--图像去噪(八)_第1张图片

你可能感兴趣的:(python,Scikit-image)