图像处理 – 如何将两个不同维度图像的光谱相乘?
这不是一个“编程”问题.但我确信这是在这个社区广为人知和理解的东西.
我有一个图像,x和一个小得多的图像y,我需要通过乘以它们来对两者进行卷积.但由于它们的大小不同,我不知道如何进行频域乘法. 我采用x的(二维)FFT(这是一个尺寸为4096 x 4096的整数矩阵),它给出了频域表示X(这是一个复数矩阵,我认为它的维数是2048 x 2048 ). 类似地,我采用(二??维FFT的y(这是一个64 x 64的整数矩阵),它给出了频域表示,Y(也是一个复数矩阵,我认为它的维度是32 x 32). 我正在使用数字配方中的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)是标准方法.如果你在空间域中进行卷积,这将是非常低效的,但是如果你将FFT相乘,那么这是必要的,并且计算填充数组的FFT的成本也不算太差.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |