FFTW3 的 3D 图像的 2D 卷积乘积

时间:2021-07-08 19:25:11

标签: c fft convolution fftw

我将 RGBalpha 图像存储在 C99 中的 32 位浮点数结构的行主数组 (RGBa, RGBa, etc.) 中。我需要使用大的、不可分离的、2D 内核逐个通道(每个通道获得相同的内核)来模糊它们。所以我认为使用卷积定理并在傅立叶空间中进行会更有效。我正在使用 FFTW3。

我看到 FFTW3 将 same data structure 用于 3D:image[width][height][channels]。对于一次性代码,以前,我习惯将每个通道分开并为每个通道进行 2D 卷积,但我想一次在 3D 中进行会避免一些数据翻转。所以我正在走向 3D,尽管我对 3D 中的傅立叶形式主义不太满意。

但是,FFTW3 文档中有一些我不明白的东西:fftw_plan_dft_r2c_3d 函数有什么作用?它是按通道进行 2D FFT,还是使用通道间频率分解进行真正的 3D FFT?这很重要,因为 alpha 通道用于 SIMD 对齐,但与流程无关,不应链接到解决方案。

然后我不明白如何将我的 2D 内核变成可用于 3D 的东西(假设满足前面的条件)。我应该沿着深度轴复制它(所以,堆叠 3 次),还是只复制一次并用零填充剩余的深度?

0 个答案:

没有答案