我正在与OpenCV& amp; C ++,也许下面的问题是天真的,但如果有人能提供帮助,我将非常感激。
在这里新作,我没有足够的声誉来发布图片,所以我会尽力说清楚。
我正在尝试在频域中对图像进行去噪(MxN = 200x200 Mat),
并说我有一个UxV = 3x3高斯内核{{0,-1,0},{ - 1,4,-1},{0,-1,0}}和expected steps是:
- 将内核零填充到(M + U-1)x(N + V-1)
- 取内核的2-D fft
- 将图像零填充到(M + U-1)x(N + V-1)
- 拍摄图像的二维FFT
- 通过FFT
乘以内核的FFT- 图像采用结果的逆二维FFT
醇>
两者步骤2(内核的fft)和最终结果(过滤后的图像)的结果似乎都是正确的,但后来我找到了this answer:
你需要通过用零填充来使K与我一样大。 此外,在填充之后,但在进行内核的FFT之前,需要使用环绕转换它,以便内核的中心(高斯的峰值)位于(0,0)。否则,您的过滤后的图片将被翻译。
这就是我没做的事。但结果怎么可能接受? 所以我现在想知道在fft之前移动内核使其中心位于(0,0)之间的区别是什么?
这是我的第二个问题。如果我们得到一个图像的移位fft(中间有0频率),我可以这样做以获得'低通'的效果:
对于距离中心的距离大于阈值的像素,请将其值设置为0。
(我认为这是直截了当的,但没有找到一些广泛使用的类似方法。)
非常感谢您提供任何帮助: - )