使用维纳滤镜去模糊图像
这个例子展示了如何使用维纳反褶积去模糊图像。当图像的频率特征和附加噪声已知时,至少在一定程度上可以有效地使用维纳反褶积。
阅读原始图像
读取并显示没有模糊或噪声的原始图像。
Ioriginal = imread(“cameraman.tif”);imshow (Ioriginal)标题(原始图像的)
模拟和恢复无噪声的运动模糊
模拟一个模糊的图像,可能导致相机运动。首先,创建一个点扩散函数,PSF
,可使用fspecial
函数并指定以11度角在21个像素上的线性运动。然后,利用点扩散函数与图像进行卷积imfilter
.
原始图像具有数据类型uint8
.如果你通过uint8
图像imfilter
,则该函数将量化输出以返回另一个uint8
的形象。为了减少量化误差,将图像转换为双
在调用之前imfilter
.
PSF = fspecial(“运动”21岁,11);Idouble = im2double(Ioriginal);模糊=滤波(double,PSF,“conv”,“圆”);imshow(模糊)标题(模糊图像的)
方法恢复模糊的图像deconvwnr
函数。模糊图像没有噪声,因此可以省略噪声-信号(NSR)输入参数。
wnr1 = deconvwnr(模糊,PSF);imshow (wnr1)标题(“恢复模糊图像”)
模拟和恢复运动模糊和高斯噪声
函数将零均值高斯噪声添加到模糊图像imnoise
函数。
Noise_mean = 0;Noise_var = 0.0001;blurred_noise = imnoise(模糊,“高斯”、noise_mean noise_var);imshow (blurred_noisy)标题(“模糊而嘈杂的图像”)
尝试恢复模糊的噪声图像使用deconvwnr
没有提供噪音估计。缺省情况下,Wiener恢复过滤器假设NSR为0。在这种情况下,维纳恢复滤波器相当于一个理想的逆滤波器,它可以对输入图像中的噪声极其敏感。
在本例中,恢复中的噪声被放大到图像内容丢失的程度。
wnr2 = deconvwnr(blurred_noise,PSF);imshow (wnr2)标题(模糊噪声图像(NSR = 0)的恢复)
尝试恢复模糊的噪声图像使用deconvwnr
用更真实的估计噪声值。
signal_var = var(Idouble(:)));NSR =噪声var /信号var;wnr3 = deconvwnr(模糊噪声,PSF,NSR);imshow (wnr3)标题(模糊噪声图像(估计NSR)的恢复)
模拟和恢复运动模糊和8位量化噪声
即使是视觉上难以察觉的噪音也会影响结果。噪声的一个来源是处理图像时产生的量化误差uint8
表示。在前面,为了避免量化错误,这个示例在数据类型中从原始图像模拟了一个模糊图像双
.现在,为了探索量化误差对恢复的影响,从原始图像中模拟一个模糊的图像uint8
数据类型。
blred_quantized = imfilter(Ioriginal,PSF,“conv”,“圆”);imshow (blurred_quantized)标题(“模糊量化图像”)
尝试恢复模糊量化图像使用deconvwnr
没有提供噪音估计。即使没有添加额外的噪声,与数据类型的模糊图像的恢复相比,这种恢复是退化的双
.
wnr4 = deconvwnr(blurred_quantized,PSF);imshow (wnr4)标题(模糊量化图像(NSR = 0)的恢复);
尝试恢复模糊量化图像使用deconvwnr
用更真实的估计噪声值。
Uniform_quantization_var = (1/256)^2 / 12;signal_var = var(Idouble(:)));NSR = uniform_quantization_var / signal_var;wnr5 = deconvwnr(blurred_quantized,PSF,NSR);imshow (wnr5)标题(模糊量化图像(估计NSR)的恢复);
另请参阅
deconvwnr
|fspecial
|imfilter
|imnoise