这不是一个“编程”问题。但我确信这是在这个社区中广为人知和理解的东西。
我有一个图像 x 和一个小得多的图像 y,我需要通过乘以它们的 FFT 来对两者进行卷积。但由于它们的大小不同,我不知道如何进行频域乘法。
我采用 x 的(二维)FFT(它是一个维度为 4096 x 4096 的整数矩阵),它给出了频域表示 X(它是一个复数矩阵,我认为它的维度是 2048 x 2048 )。
同样,我采用(y 的二维 FFT(它是一个 64 x 64 维的整数矩阵),它给出了频域表示 Y(它也是一个复数矩阵,我认为它的维数是 32 × 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 对两个尺寸非常不同的图像进行卷积,以便可以对其光谱进行乘法(频域表示),我该如何进行乘法运算?
谢谢,
〜迈克尔。