为什么MATLAB FFT2比OpenCV DFT快得多



i刚刚进行了测试,以比较MATLAB中OPENCV和FFT2的DFT函数的速度。我加载相同的图像,使用FFT2()和DFT()进行转换并测量它们消耗的时间。我发现,对于图像,DFT()在Win32发行版中成本超过2秒,而FFT2()仅进行了0.2次。怎么会?我使用的OPENCV版本为2.4.8,而MATLAB版本为2013 a。这是我的测试代码

matlab:

tic
X1 = fft2(im);
toc

C 中的OPENCV:

start1 = clock();
dft(src,src,DFT_COMPLEX_OUTPUT);
end1 = clock();
cout<<(double)(end1 - start1)/CLOCKS_PER_SEC<<endl;

在一般FFT中是DFT的快速实现。

dft 是一种线性变换,将其作为长度为n的复杂信号x,并给出输出的复杂信号x,长度为n,x = wx。w是一个复杂的nxn矩阵,具有全部w_k,n = exp(-2pi k n/n),其中0&lt;k,n&lt;N.

fft 是用于快速计算DFT的算法的集合。通常,FFT所需的操作数量是N*LOGN的顺序。最著名的FFT算法是N是2的力量,但是主要命令和其他因素化的FFT。

我在很长的时间内提出了这个问题和类似的问题,而fft vs dft和matlab vs c 。我发现的答案是

  1. MATLAB具有一些内置软件,例如MKL,Lapack和Blas。
  2. 他们在场景后面使用C或Fortran库。
  3. 他们使用最佳实现。例如,MATLAB中的FFT2基于FFTW。(西方最快的傅立叶变换)
  4. 他们总是在进步。对于某些功能,较新版本的速度比较旧的版本要快。

另一方面,

  1. 您没有使用最新版本的OPENCV,它应该对性能产生一定的影响。
  2. 您没有按建议使用DFT,可以通过获得最佳尺寸来提高速度。如果您的图像尺寸不是最佳的,则可能会大大增加运行时间。

最终注意:不建议使用tic, toc,而是使用timeit

最新更新