我正在尝试使用FFT实现高斯模糊,发现了以下方法。
这意味着您可以对图像和滤波器进行傅里叶变换,将(复杂的)结果相乘,然后进行反向傅里叶变换。
我有一个7x7矩阵的核K和一个512x512矩阵的图像I。
我不明白如何将K乘以I。唯一的方法是使K与I一样大(512x512)吗?
我正在尝试使用FFT实现高斯模糊,发现了以下方法。
这意味着您可以对图像和滤波器进行傅里叶变换,将(复杂的)结果相乘,然后进行反向傅里叶变换。
我有一个7x7矩阵的核K和一个512x512矩阵的图像I。
我不明白如何将K乘以I。唯一的方法是使K与I一样大(512x512)吗?
是的,你需要通过在K后面填充零来使其与I一样大。此外,在填充之后,但在对卷积核进行FFT之前,您需要使用环绕方式将其平移,使得卷积核的中心(高斯峰值)位于(0,0)。否则,您过滤后的图像将被平移。或者,在完成后可以平移结果过滤后的图像。
另一个要点:对于小内核,不使用FFT可能实际上更快。2D高斯内核是可分离的,这意味着您可以将其分成两个x和y方向的1D内核。然后,您可以在空间域中沿x和y方向进行两个1D卷积,而不是2D卷积。对于较小的内核,这可能比使用FFT在频率域中进行卷积更快。