我刚刚进行了测试,比较了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;
答案 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 dft和Matlab vs c++这个和类似的问题。我找到的答案是,
另一方面,
最后注意:建议不要使用tic, toc
,而是使用timeit
。