用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实现。

如果我们使用几何光学建模失焦模糊,我们可以得到一个PSFfspecial然后实现循环卷积:

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

h = fspecial (“磁盘”4);%读取图像并转换为双倍的FFT凸轮= im2double (imread (“cameraman.tif”));高频= fft2 (h,大小(凸轮,1),大小(凸轮,2));cam_blur =实际(ifft2(高频。* fft2 (cam)));imshow (cam_blur)

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

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

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

然后给出噪声尺度

现在我们添加噪声以获得40db PSNR:

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_blur_noise)。/高频));imshow (cam_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_blur_noise)。/高频));imshow (cam_pinv)包含(“伪逆恢复”

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

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

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

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

然后

它类似于之前的伪逆滤波器,但在两个极端之间有一个平滑的过渡。为了在MATLAB中实现这个,我们做:

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

如您所见,这会产生更好的结果。这是由于频率分量中的恢复和噪声平滑之间的平滑转换。

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

——斯坦·里夫斯,奥本大学电子与计算机工程系




发布与MATLAB®7.4

|
  • 打印
  • 发送电子邮件

注释

要留下评论,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。