图像处理 – 如何将两个不同维度图像的光谱相乘?

前端之家收集整理的这篇文章主要介绍了图像处理 – 如何将两个不同维度图像的光谱相乘?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这不是一个“编程”问题.但我确信这是在这个社区广为人知和理解的东西.

我有一个图像,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的成本也不算太差.
原文链接:https://www.f2er.com/java/240027.html

猜你在找的Java相关文章