Steve讲图像处理和MATLAB

概念,算法和MATLAB

图像去模糊-介绍

我想介绍一下客座博主斯坦·里夫斯.斯坦是奥本大学电子与计算机工程系的教授。他是IEEE Transactions on Image Processing的副编辑。他的研究活动包括图像恢复和重建、最佳图像获取和医学成像。

在接下来的几个月里,Stan计划在这里就MATLAB中图像去模糊的一般主题贡献几个博客。

图像去模糊(或恢复)是图像处理中的一个老问题,但它仍然吸引着研究人员和从业者的关注。从天文学到消费者成像等许多现实问题都可以应用图像恢复算法。此外,图像恢复是图像处理中出现的一大类反问题的一个易于可视化的例子各种各样的科学、医学、工业和理论问题。除此之外,将算法应用于模糊图像,然后立即看到你做得有多好,这很有趣。

为了消除图像的模糊,我们需要用数学方法描述图像是如何模糊的。(如果这是不可用的,有算法来估计模糊。但那是另一天的事了。)我们通常从移动不变模型开始,这意味着原始图像中的每个点在形成模糊图像时都以相同的方式展开。我们用卷积来建模:

G (m,n) = h(m,n)*f(m,n) + u(m,n)

其中*是二维卷积,h(m,n)是点扩散函数(PSF),f(m,n)是原始图像,u(m,n)是噪声(通常被认为是独立的同分布高斯)。该方程起源于连续空间,但为方便起见,已进行了离散。

实际上,模糊图像通常是上面输出g(m,n)的加窗版本,因为原始图像f(m,n)在矩形阵列外通常不是零。让我们继续合成一个模糊的图像,这样我们就有了一些可以处理的东西。如果我们假设f(m,n)是周期性的(通常是一个很糟糕的假设!),卷积就变成了循环卷积,这可以通过卷积定理用FFT实现。

如果我们使用几何光学建模离焦模糊,我们可以使用fspecial然后实现循环卷积:

将PSF形成半径为3像素的磁盘

h=F特殊(“磁盘”,4);%读取图像并转换为双精度FFT凸轮= im2double (imread (“cameraman.tif”)); hf=fft2(h,尺寸(凸轮,1),尺寸(凸轮,2));cam_blur=real(ifft2(hf.*fft2(cam));imshow(摄像机模糊)

类似的结果可以用imfilter使用适当的设置。

你会立即注意到,圆形的卷积导致裤子和三脚架周围和模糊的天空。我告诉过你,输入图像的周期性是一个糟糕的假设!:-)但我们暂时不担心这个。

现在我们需要添加一些杂音。如果我们定义峰值信噪比为

然后,噪声标度由下式给出:

现在我们添加噪声以获得40 dB的峰值信噪比:

sigma_u = 10 ^ (-40/20) * abs (1 - 0);Cam_blur_noise = cam_blur + sigma_u*randn(size(cam_blur));imshow (cam_blur_noise)

反滤波器是消除模糊问题的最简单的解决方案。如果我们忽略噪声项,我们可以通过除以h(m,n)的FFT来实现逆,并对结果执行反FFT。从事图像恢复工作的人喜欢从反滤镜开始。它真的很棒,因为它很简单,结果却非常糟糕。这意味着任何新的和改进的图像恢复算法总是看起来很好比较!让我来告诉你我的意思:

cam_inv=真实(ifft2(fft2(cam_模糊噪声)。/hf);imshow(cam\U inv)

一定是出了什么事,对吧?嗯,代码没有问题。但是,认为人们可以忽略噪音是绝对错误的。要了解原因,请查看PSF的频率响应幅值:

hf_abs = abs(高频);冲浪((127:128)/ 128 (127:128)/ 128,fftshift (hf_abs))阴影内页、camlight colormap喷气式飞机包含(“PSF FFT幅度”)

我们立刻看到模糊的幅度响应有一些非常低的值。当我们逐点除以这个值时,我们也将加性噪声项除以这些相同的低值,导致噪声的巨大放大——足以完全淹没图像本身。

现在,我们可以应用一个非常简单的技巧来尝试我们的戏剧性和非常令人满意的改进。我们只需将PSF频率响应低于阈值的逆滤波器结果中的频率分量归零。

cam_pinv=真实(ifft2((abs(hf)>0.1)。*fft2(cam_模糊噪音)。/hf);imshow(cam_pinv)xlabel(“伪逆恢复”)

为了比较的目的,我们重复模糊和噪声图像。

imshow (cam_blur_noise)包含(“带噪模糊图像”)

这个结果显然比第一次尝试要好得多!它仍然包含噪音,但分贝要低得多。这并不是戏剧性的和令人满意的,但这是朝着正确方向迈出的一步。你可以看到一些失真,由于一些频率没有被恢复的事实。一般来说,一些较高的频率被消除了,这导致一些模糊的结果和振铃。这种铃声是由吉布斯现象引起的,这是一种由于缺少频率而使阶梯状转变变成“波浪形”的现象。

使用不同形式的伪逆滤波器可以获得类似但略有改进的结果。通过在被除的数上加上一个小的数delta^2,我们得到几乎相同的数,除非该数在相同的范围内或小于delta^2。也就是说,如果我们让

然后

这与前面的伪逆滤波器类似,但在两个极端之间有平滑过渡。要在MATLAB中实现这一点,我们需要:

cam_pinv2 =实际(ifft2 (fft2 (cam_blur_noise)。*连词(高频)。/ (abs(高频)。^ 2 + 1依照)));imshow (cam_pinv2)包含(“替代伪逆恢复”)

如您所见,这产生了更好的结果。这是由于在频率成分中恢复和噪声平滑之间的平滑过渡。

我希望在未来的博客中看到一些进一步的改进,以及处理更多真实世界假设的一些策略。

-作者Stan Reeves,奥本大学电气和计算机工程系




与MATLAB®7.4一起发布

|

评论

如需留言,请点击在这里登录到您的MathWorks帐户或创建新帐户。