2

我正在处理一个使用 OpenCV 和 C++ 的小项目,也许以下问题很幼稚,但如果有人能提供帮助,我将不胜感激。

作为新来的,我没有足够的声誉来发布图片,所以我会尽量说清楚。

我正在尝试在频域中对图像(MxN = 200x200 Mat)进行降噪,

假设我有一个 UxV=3x3 高斯核 {{0, -1, 0},{-1, 4, -1},{0, -1, 0}},预期的步骤是:

  1. 将内核补零至 (M+U-1) x (N+V-1)
  2. 取内核的二维 fft
  3. 将图像补零至 (M+U-1) x (N+V-1)
  4. 获取图像的二维 FFT
  5. 将内核的 FFT 乘以
  6. 图像对结果进行逆二维 FFT

第 2 步的结果(内核的 fft)和最终结果(过滤后的图像)似乎都是正确的,但后来我找到了这个答案

您确实需要通过用零填充 K 来使 K 与 I 一样大。此外,在填充之后,但在对内核进行 FFT 之前,您需要使用回绕对其进行翻译,以使内核的中心(高斯的峰值)位于 (0,0) 处。否则,您的过滤图像将被翻译。

那是我没有做的。但是结果怎么可能是可以接受的呢?所以我现在想知道在 fft 之前移动内核以使其中心位于 (0, 0) 之间有什么区别?

我的第二个问题来了。如果我们得到图像的偏移 fft(中间为 0 频率),我可以这样做以获得“低通”效果:

对于距中心距离大于阈值的像素,将其值设置为 0。

(我认为这是直截了当的,但还没有发现一些广泛使用的类似方法。)

非常感谢您提供任何帮助:-)

4

0 回答 0