此示例显示如何使用Wiener Deconvolution进行Deblur图像。当图像和加性噪声的频率特性是已知的至少某种程度的情况下,可以有效地使用Wiener Deconvolulate。
读取并显示不具有模糊或噪声的原始图像。
ioriginal = imread('cameraman.tif');imshow(Ioriginal)标题('原始图像')
模拟可能由相机运动产生的模糊图像。首先,创建一个点传播功能,PSF.
,通过使用fspecial.
以11度的角度跨越21像素的功能和指定线性运动。然后,通过使用将点扩展函数与图像旋转Imfilter.
。
原始图像具有数据类型uint8.
。如果你通过了uint8.
图像到Imfilter.
,然后该功能将量化输出才能返回另一个uint8.
图片。为了减少量化错误,将图像转换为双倍的
在打电话之前Imfilter.
。
psf = fspecial('运动',21,11);idouble = im2double(ioriginal);模糊= imfilter(idouble,psf,'conv'那'圆');imshow(模糊)标题('模糊图像')
通过使用恢复模糊的图像Deconvwnr.
功能。模糊的图像没有噪音,因此您可以省略噪声到信号(NSR)输入参数。
wnr1 = deconvwnr(模糊,psf);imshow(wnr1)标题('恢复模糊图像')
通过使用使用的模糊图像将零表示高斯噪声添加到模糊图像imnoise.
功能。
kotice_mean = 0;COURLE_VAR = 0.0001;blurred_noisy = imnoise(模糊,'高斯',kide_mean,kide_var);imshow(blureRd_noisy)标题('模糊和嘈杂的图像')
尝试通过使用恢复模糊的嘈杂图像Deconvwnr.
不提供噪音估计。默认情况下,Wiener恢复过滤器假定NSR等于0.在这种情况下,维纳恢复滤波器等同于理想的逆滤波器,这对输入图像中的噪声非常敏感。
在该示例中,在该恢复中的噪声被放大到图像内容丢失的程度。
wnr2 = deconvwnr(blurred_noisy,psf);imshow(wnr2)标题('恢复模糊的嘈杂图像(NSR = 0)')
尝试通过使用恢复模糊的嘈杂图像Deconvwnr.
具有估计噪声的更现实的价值。
signal_var = var(idouble(:));nsr = ocket_var / signal_var;wnr3 = deconvwnr(blureRd_noisy,psf,nsr);imshow(wnr3)标题('恢复模糊的嘈杂图像(估计NSR)')
即使是视觉上的易易察觉的噪音也会影响结果。一个噪声源是量化错误与图像一起使用uint8.
表示。更早,为了避免量化错误,该示例模拟了从数据类型中的原始图像模糊图像双倍的
。现在,为了探索量化误差对恢复的影响,模拟原始原始图像的模糊图像uint8.
数据类型。
blurred_quantized = imfilter(Ioriginal,psf,'conv'那'圆');imshow(blured_quantized)标题('模糊量化图像')
尝试使用的恢复模糊量化图像Deconvwnr.
不提供噪音估计。即使没有添加额外的噪声,与数据类型中模糊图像的恢复相比,这种恢复降低了双倍的
。
wnr4 = deconvwnr(模糊_quantized,psf);imshow(wnr4)标题('恢复模糊量化图像(NSR = 0)');
尝试使用的恢复模糊量化图像Deconvwnr.
具有估计噪声的更现实的价值。
serial_quantization_var =(1/256)^ 2/12;signal_var = var(idouble(:));nsr = serial_quantization_var / signal_var;wnr5 = deconvwnr(blureRd_quantized,psf,nsr);imshow(wnr5)标题('恢复模糊量化图像(估计NSR)');
Deconvwnr.
|fspecial.
|Imfilter.
|imnoise.