这个例子展示了如何使用维纳反卷积去模糊图像。当已知图像的频率特性和加性噪声时,至少在一定程度上可以有效地使用维纳反褶积。
读取并显示一个没有模糊或噪声的原始图像。
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
函数。
noise_mean = 0;noise_var = 0.0001;blurred_noisy = imnoise(模糊,“高斯”、noise_mean noise_var);imshow (blurred_noisy)标题(“模糊和嘈杂的图像”)
尝试使用。恢复模糊的噪声图像deconvwnr
没有提供噪音估计。缺省情况下,维纳恢复过滤器假设NSR为0。在这种情况下,维纳恢复滤波器相当于一个理想的逆滤波器,它可以对输入图像中的噪声非常敏感。
在本例中,恢复中的噪声被放大到图像内容丢失的程度。
wnr2 = deconvwnr (blurred_noisy PSF);imshow (wnr2)标题(“模糊噪声图像的恢复(噪音感应强的地方= 0)”)
尝试使用。恢复模糊的噪声图像deconvwnr
用一个更真实的估计噪声值。
signal_var = var (Idouble (:));NSR = noise_var / signal_var;wnr3 = deconvwnr (PSF, blurred_noisy NSR);imshow (wnr3)标题(“恢复模糊噪音图像(估计“噪音感应强的地方”)”)
即使是视觉上难以察觉的噪音也会影响结果。噪声的一个来源是对图像进行处理时产生的量化误差uint8
表示。在前面,为了避免量化错误,本示例在数据类型中从原始图像模拟了模糊图像双
.现在,为了探索量化误差对恢复的影响,从原始的原始图像中模拟一个模糊的图像uint8
数据类型。
blurred_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 (PSF, blurred_quantized NSR);imshow (wnr5)标题(“模糊量化图像复原(估计噪音感应强的地方)”);
deconvwnr
|fspecial
|imfilter
|imnoise