使用逆滤波器校正空间卷积图像(反卷积)

信息处理 图像处理 过滤器 傅里叶变换 反卷积 逆问题
2022-01-08 19:51:37

作为家庭作业的一部分,我们正在实施逆滤波器。降级图像,然后使用反向过滤器恢复。

我使用 5x5 盒式滤波器对空间域中的图像进行卷积。我对过滤器进行 FFT,对降级图像进行 FFT,然后将降级图像除以过滤器。将结果逆 FFT 转换为图像,我得到垃圾。

如果我对图像进行 FFT,对过滤器进行 FFT,将两者相乘,然后将结果除以 FFT 过滤器,显然我会非常接近原始图像。((X*Y)/Y ~== X)

我知道数学并不像“空间卷积 == FFT 乘法”那么简单。

使用逆滤波器的正确方法是什么?我使用的确切内核会降低图像质量。我没有添加任何噪音。

Bovik 的教科书《图像处理基本指南》几乎完全不屑一顾逆滤波器。Gonzalez&Woods 更有希望,但几乎立即跳到 Wiener Filter。

我在stackoverflow.com上有一个类似的问题 https://stackoverflow.com/questions/7930803/inverse-filter-of-spatially-convolved-versus-frequency-convolved-image

(这个问题也应该被标记为 [homework],但该标签还不存在,我没有代表来创建它。)

编辑。对于以下一些很棒的建议。@dipan-mehta 在 FFT 之前,我将卷积核填充到与图像相同的大小。我把内核放在左上角。我 ifft(ifftshift()) 然后保存到图像中,我得到了一个很好的结果。我已经在内核和图像上完成了 ifft(ifftshift()) 。好(ish)的结果。(图片在我的https://stackoverflow.com/questions/7930803/inverse-filter-of-spatially-convolved-versus-frequency-convolved-image问题中。)

@jason-r 可能是正确的。我不明白底层卷积+变换的数学。“反卷积”对我来说是一个新词。还有很多东西要学。谢谢您的帮助!

我对家庭作业的解决方案是在频域中做所有事情。我和教授谈过。我让任务变得比必要的更难。她希望我们添加噪声,然后尝试逆滤波器、维纳滤波器和约束最小二乘滤波器。练习的重点是了解滤波器如何处理噪声。

2个回答

我将分别解决几个子问题:

  • 空间域中的卷积(或对应于时间采样信号的时域中)相当于频域中的乘法。在采样系统中,边界情况有一些微妙之处(即,当使用 DFT 时,频域中的乘法实际上给你循环卷积,而不是线性卷积),但总的来说,它真的很简单。

  • 纯逆滤波在实践中几乎从来都不是正确的解决方案。在大多数情况下,您无法访问已应用于数据的确切过滤器,因此无论如何您都不能简单地反转它。即使你知道过滤器,它仍然是有问题的。考虑滤波器可能在某些空间频率处为零的事实;如果是这样,那么在将过滤器应用于您的图像后,这些频率的所有信息都会丢失。如果您天真地反转该滤波器,它将在这些零点处获得无限(或至少非常高)的增益。如果您随后将朴素逆应用于在这些频率上具有任何附加内容(例如噪声,很可能就是这种情况)的图像,那么该未观察到的分量将被大大放大。这通常是不可取的。

    这种逆滤波问题与通信系统中的均衡非常相似,这种现象被称为噪声增强在这种情况下,逆滤波器方法被称为迫零均衡器,实际上很少使用。

  • 您正在探索的区域通常被称为反卷积作为一般规则,反卷积是一个棘手的操作。即使您知道所应用的确切过滤器并想要撤消它,也并不总是那么容易。正如您所指出的,逆滤波器方法通常被搁置一旁,取而代之的是维纳滤波器或其他旨在不完全反转系统的结构,而是估计系统的输入是什么,同时最小化一些错误标准(最小化均值平方误差是一个共同的目标)。如您所料,对这个问题应用维纳滤波器称为维纳反卷积

我希望你在计算的方式上没有犯错 -

我使用 5x5 盒式滤波器对空间域中的图像进行卷积。我对过滤器进行 FFT,对降级图像进行 FFT,然后将降级图像除以过滤器。将结果逆 FFT 转换为图像,我得到垃圾。

假设您的图像大小为 256x256,过滤器为 5x5 - 为了通过乘以 FFT 来应用过滤,您必须首先将过滤器转换为等效大小。为此,您必须在“顶角”(不是图像的中心)保留 5x5 框式过滤器,并用填充它以填充 256x256 - 您应该为过滤器获得 256x256 的 FFT。

为了帮助诊断,在编程步骤 #1 中 - 首先只使用 256x256 FFT 的过滤器,然后检查 IFFT - 例程是否能够返回过滤器。同样的方式测试 FFT --> IFFT 图像本身是否正常向后工作。

步骤 #2 - 如果您仅通过乘法在 FFT 域中应用滤波器(而不是逆滤波器) - 检查 IFFT 后的结果图像。它应该基本上是模糊的图像。

如果您的所有编程都是正确的 - 请确保当您为 FFT 系数执行 1/x 时,没有除以零误差,相反,当峰值过多时,乘法会导致严重失真。

一般来说 - 对于任何稳定的过滤器,定义为不稳定的逆过滤器 - 这可能是主要原因。但是,我总是想在探索理论限制之前交叉检查实现。

如果做得好,我已经看到 FFT中的乘法是图像和音频信号的样本空间中的卷积。

地盘。