为什么Matlab fft2比OpenCV dft快得多

时间:2017-03-08 11:12:29

标签: matlab opencv

我刚刚进行了测试,比较了OpenCV的dft函数和Matlab中的fft2的速度。我加载相同的图像,使用fft2()和dft()进行转换并测量它们消耗的时间。我发现对于图像,dft()在win32发布版本中的成本超过2秒,而fft2()仅花费了0.2秒。怎么会?我使用的OpenCV版本是2.4.8而Matlab版本是2013年。这是我的测试代码

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;

2 个答案:

答案 0 :(得分:1)

一般来说,fft是dft的快速实现。

DFT 是线性变换,其将长度为N的复信号x作为输入,并且给出长度为N,X = Wx的复信号X作为输出。 W是复数N×N矩阵,其具有W_k,n = exp(-2pi k n / N),其中0

FFT 是用于快速计算DFT的算法集合。通常,FFT所需的操作数量大约为N * logN。最着名的FFT算法是针对N是2的幂的情况,但是对于素数阶和不同的其他因子分解存在FFT。

答案 1 :(得分:1)

我已经问了很长时间fft vs dftMatlab vs c++这个和类似的问题。我找到的答案是,

  1. Matlab有一些内置软件,如MKL,Lapack和BLAS。
  2. 他们在幕后使用c或Fortran库。
  3. 他们使用最好的实现。例如,Matlab中的fft2是基于FFTW的。 (西方最快的傅里叶变换)
  4. 他们总是在改进。对于某些功能,较新版本明显比旧版本快。
  5. 另一方面,

    1. 您没有使用最新版本的OpenCV,这会对性能产生一些影响。
    2. 您没有按照建议使用DFT,您可以通过获取optimal dimensions来提高速度。如果图像尺寸不是最佳,则可能会显着延长运行时间。
    3. 最后注意:建议不要使用tic, toc,而是使用timeit