注意:此问题最初是在OpenCV forum几天前提出的。
我正在构建一个广泛使用二维dft,离散傅立叶变换的图像处理程序。我试图加速以便实时运行。
在该应用程序中,我只使用矩形ROI指定的dft输出的一部分。我目前的实施遵循以下步骤:
这个过程基本上运作良好,但涉及无用的计算,因为我只需要 F 的部分信息。我只是想通过计算dft的必要部分来寻找加速计算的方法。
我发现使用英特尔IPP的OpenCV使用英特尔IPP功能计算dft,这比初始的OpenCV实现快一个数量级。我想知道我是否可以通过仅计算预先指定的dft频域来加速计算。
由于我是OpenCV的新手,我在这里迷失了方向,所以我希望你能提供一种方法。
请注意,我并不是要将dft设为图像的ROI,即 dft(ROI(f)),但我想计算 ROI( DFT(f))的
提前致谢。
答案 0 :(得分:2)
只是一个部分想法。
DFT是可分离的。它总是通过首先将FFT算法应用于图像的行,然后应用于结果的列(或者相反,顺序无关紧要)来计算。
如果您只需要输出的ROI,则在第二步中您只需要处理ROI中的列。
我认为你不会找到一种方法来计算每个1D行/列的频率子集。这可能需要破解你自己的FFT,这可能比使用IPP或FFTW中的那个更加计算成本。