注意:这个问题最初是在 OpenCV forum 上提出的几天前。
我正在构建一个广泛使用二维 dft、离散傅立叶变换的图像处理程序。我正在尝试加速以实时运行。
在该应用程序中,我仅使用由矩形 ROI 指定的部分 dft 输出。我当前的实现遵循以下步骤:
- 计算输入图像 f(通常大小为 512x512)的 dft 并获得整个 dft 结果 F
- 将 F 裁剪到预先指定的感兴趣区域(ROI,通常大小为 32x32,任意位置),R
这个过程基本上运行良好,但涉及无用的计算,因为我只需要 F 的部分信息。我正在寻找一种仅通过计算 dft 的必要部分来加速此计算的方法。
我发现带有英特尔 IPP 的 OpenCV 使用英特尔 IPP 函数计算 dft,这比单纯的 OpenCV 实现快一个数量级。我想知道是否可以仅通过计算预先指定的 dft 频域来加速此计算。
由于我是 OpenCV 的新手,所以我在这里迷路了,所以我希望你能提供一种方法来做到这一点。
请注意,我并不是要对图像的 ROI 进行 dft,即 dft(ROI(f)),但我想计算 ROI(dft( f)).
提前致谢。
只是一个片面的想法。
DFT 是可分离的。它始终是通过首先将 FFT 算法应用于图像的行,然后应用于结果的列来计算的(或者相反,顺序无关紧要)。
如果您只想要输出的 ROI,则在第二步中您只需要处理落在 ROI 内的列。
我认为您不会找到一种方法来仅计算每个一维行/列的频率子集。这可能需要破解您自己的 FFT,这可能比在 IPP 或 FFTW 中使用 FFT 的计算成本更高。
我是一名优秀的程序员,十分优秀!