如何通过在频域中指定感兴趣区域来加速DFT

时间:2018-05-25 03:53:39

标签: opencv fft dft acceleration intel-ipp

注意:此问题最初是在OpenCV forum几天前提出的。

我正在构建一个广泛使用二维dft,离散傅立叶变换的图像处理程序。我试图加速以便实时运行。

在该应用程序中,我只使用矩形ROI指定的dft输出的一部分。我目前的实施遵循以下步骤:

  1. 计算输入图像 f 的dft(通常大小为512x512)并获得整个dft结果 F
  2. F 裁剪到预先指定的感兴趣区域(ROI,通常大小为32x32,任意位置), R
  3. 这个过程基本上运作良好,但涉及无用的计算,因为我只需要 F 的部分信息。我只是想通过计算dft的必要部分来寻找加速计算的方法。

    我发现使用英特尔IPP的OpenCV使用英特尔IPP功能计算dft,这比初始的OpenCV实现快一个数量级。我想知道我是否可以通过仅计算预先指定的dft频域来加速计算。

    由于我是OpenCV的新手,我在这里迷失了方向,所以我希望你能提供一种方法。

    请注意,我并不是要将dft设为图像的ROI,即 dft(ROI(f)),但我想计算 ROI( DFT(f))的

    提前致谢。

1 个答案:

答案 0 :(得分:2)

只是一个部分想法。

DFT是可分离的。它总是通过首先将FFT算法应用于图像的行,然后应用于结果的列(或者相反,顺序无关紧要)来计算。

如果您只需要输出的ROI,则在第二步中您只需要处理ROI中的列。

我认为你不会找到一种方法来计算每个1D行/列的频率子集。这可能需要破解你自己的FFT,这可能比使用IPP或FFTW中的那个更加计算成本。