【问题标题】:Multiplying images in frequency domain在频域中相乘图像
【发布时间】:2011-03-21 16:26:34
【问题描述】:

我一直在处理频域中的图像(通过对图像进行 DFT 或 FFT),我知道空间域中的卷积是频率的乘法。

所以我的问题是,如果我想在空间域中应用一个特定的内核(比如说 9x9 平滑内核),我只需用 9x9 滤波器对整个图像进行卷积。现在,如果我想在频域中做同样的事情,我要同时对图像和内核进行 FFT 吗?那么我如何/我乘以什么?在我有了新的数据集(图像乘以内核)之后,我只需反转 FFT 的方向,这应该会得到与内核与空间域中的图像卷积相同的结果,对吧?

感谢您的帮助!

【问题讨论】:

    标签: math image-processing signal-processing fft


    【解决方案1】:

    IIRC,设法让您的 FFT 图像和内核(都是 FFT d)具有相同的尺寸,然后将两个 FFT 图像逐像素相乘,然后对结果进行逆 FFT。

    注意图像边界会发生什么变化(请参阅 FFT 理论)。

    【讨论】:

    • 那么,如果我的内核是 9x9 并且我的图像是 512x512,我将两者都 FFT,然后 0 将 9x9 填充为 512x512?那么我将如何将它相乘呢?像向量乘法之类的东西?谢谢!
    • 开,还有,我是否将实数和虚数分开?我的意思是向量乘以内核和图像的实数,然后向量乘以内核和图像的虚数,然后重新组合成复数?
    • @joe_coolish:这是一个复数乘法,所以out.re = in1.re * in2.re - in1.im * in2.imout.im = in1.re * in2.im + in1.im * in2.re
    • @joe_coolish:在进行 FFT 之前,你用零填充 9x9 内核到 512x512。
    【解决方案2】:

    请注意,FFT 乘法与循环卷积相同(例如,好像数据的边缘环绕)。如果您不希望卷积结果中出现这些圆形边缘效应,则可以至少将卷积核的非零长度加 1 对数据进行零填充。您还必须对卷积核进行零填充以使其具有相同的长度。

    例如,在您的情况下,您可以使用长度为 522 FFT (512 + 9 + 1) 的 FFT,或者可能使用具有较小价格因素的 540 长度 FFT(FFTW 库可用于非常有效的非幂-2 FFT),或者如果你必须使用 2 的幂,则零填充一直到长度 1024 FFT。

    正如@maola 的回答,数据和内核的 FFT 必须具有相同的长度(否则您要相乘的频率将不匹配),并且您必须在频域中进行复数乘法。

    【讨论】:

    • 很好的提示!只有一件小事,我认为在这种情况下避免循环卷积的最小填充长度是 512 + 9 - 1,请参阅dspguide chapter 9 底部倒数第三段。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-06
    • 1970-01-01
    相关资源
    最近更新 更多