【发布时间】:2010-11-25 10:54:06
【问题描述】:
这不是一个“编程”问题。但我敢肯定,这是在这个社区中广为人知和理解的东西。
我有一个图像 x 和一个小得多的图像 y,我需要通过乘以它们的 FFT 来对两者进行卷积。但由于它们的大小不同,我不知道如何进行频域乘法。
我采用 x 的(二维)FFT(它是一个维度为 4096 x 4096 的整数矩阵),它给出了频域表示 X(它是一个复数矩阵,我认为它的维度是2048 x 2048)。
同样,我采用(y 的二维 FFT(它是一个维度为 64 x 64 的整数矩阵),它给出了频域表示 Y(它也是一个复数矩阵,我认为它是尺寸为 32 x 32)。
我在 Numerical Recipes 中使用了fourn 函数,所以我的输入矩阵 x 和 y 必须折叠成一维数组,这些数组被它们的离散傅里叶变换 X 和 Y 所取代。重点是即使这是图像的二维问题,我正在处理一维数组。
如果我试图对两个尺寸完全相同的图像进行卷积,x 和 y。这一切都非常简单:
X = FFT(x)
Y = FFT(y)
Z = X * Y (term by term multiplication)
Convolution of x and y = IFFT(Z)
但是如果 X 和 Y 的长度不同,我该如何做乘法呢?
一种可能性是将 y 填充为与 x 具有相同的尺寸。但这似乎非常低效。另一种可能性是将 Y 填充为与 X 相同的尺寸。但我不知道这在频率空间中意味着什么。
这是问这个问题的另一种方式:如果我想使用 FFT 对两个尺寸非常不同的图像进行卷积,以便可以对其光谱进行乘法(频域表示),我该如何进行乘法运算?
谢谢,
~迈克尔。
【问题讨论】:
-
你想用这个卷积做什么?你想计算你的小图像 y 在你的大图像 x 上的 2D 卷积吗?例如,如果您要在大图像 x 中搜索小块 y,则可以使用卷积来实现对 y 的相关搜索。在傅立叶域中它会更有效。但是,如果这是您的目标,您不会希望将它们折叠成 1D。 x和y的光谱相乘有什么用?
标签: image-processing signal-processing fft convolution