关于频域低通滤波器的问题

时间:2013-11-08 07:45:59

标签: c++ opencv filter signal-processing fft

我正在与OpenCV& amp; C ++,也许下面的问题是天真的,但如果有人能提供帮助,我将非常感激。

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

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

并说我有一个UxV = 3x3高斯内核{{0,-1,0},{ - 1,4,-1},{0,-1,0}}和expected steps是:

  
      
  1. 将内核零填充到(M + U-1)x(N + V-1)
  2.   
  3. 取内核的2-D fft
  4.   
  5. 将图像零填充到(M + U-1)x(N + V-1)
  6.   
  7. 拍摄图像的二维FFT
  8.   
  9. 通过FFT
  10. 乘以内核的FFT   
  11. 图像采用结果的逆二维FFT
  12.   

两者步骤2(内核的fft)和最终结果(过滤后的图像)的结果似乎都是正确的,但后来我找到了this answer

  

你需要通过用零填充来使K与我一样大。 此外,在填充之后,但在进行内核的FFT之前,需要使用环绕转换它,以便内核的中心(高斯的峰值)位于(0,0)。否则,您的过滤后的图片将被翻译。

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

这是我的第二个问题。如果我们得到一个图像的移位fft(中间有0频率),我可以这样做以获得'低通'的效果:

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

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

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

0 个答案:

没有答案