我试图使用 FFT 实现高斯模糊,可以在这里找到以下配方。
这意味着您可以对图像和滤波器进行傅里叶变换,将(复数)结果相乘,然后进行傅里叶逆变换。
我有一个内核 K,一个 7x7 矩阵和一个图像 I,一个 512x512 矩阵。
我不明白如何将 K 乘以 I。唯一的方法是让 K 与 I (512x512) 一样大吗?
我试图使用 FFT 实现高斯模糊,可以在这里找到以下配方。
这意味着您可以对图像和滤波器进行傅里叶变换,将(复数)结果相乘,然后进行傅里叶逆变换。
我有一个内核 K,一个 7x7 矩阵和一个图像 I,一个 512x512 矩阵。
我不明白如何将 K 乘以 I。唯一的方法是让 K 与 I (512x512) 一样大吗?
是的,您确实需要通过用零填充 K 来使 K 与 I 一样大。此外,在填充之后,但在获取内核的 FFT 之前,您需要使用回绕对其进行翻译,以使内核的中心(高斯的峰值)位于 (0,0) 处。否则,您的过滤图像将被翻译。或者,您可以在完成后翻译生成的过滤图像。
另一点:对于不使用 FFT 的小内核,实际上可能更快。2D 高斯核是可分离的,这意味着您可以将其分成两个用于 x 和 y 的 1D 核。然后,您可以在空间域中的 x 和 y 方向上进行两个 1D 卷积,而不是 2D 卷积。对于较小的内核,最终可能比使用 FFT 在频域中进行卷积更快。
如果您对像素着色器感到满意,并且 FFT 不是您的主要目标,而是使用高斯模糊内核进行卷积,那么我可以推荐我的关于什么是卷积的教程
问候。