MATLAB与DFT中的FFT2在OpenCV C 速度比较中
fft2 in MATLAB vs dft in OpenCV C++ speed comparison
我想知道为什么opencvc 中的dft
功能比2D矩阵的fft2
慢得多。
以下C 代码来自文档:
void fft2(const Mat in, Mat &complexI) {
Mat padded;
int m = getOptimalDFTSize(in.rows);
int n = getOptimalDFTSize(in.cols);
copyMakeBorder(in, padded, 0, m - in.rows, 0, n - in.cols, BORDER_CONSTANT, Scalar::all(0));
Mat planes[] = {Mat_<float>(padded), Mat::zeros(padded.size(), CV_32F)};
merge(planes, 2, complexI);
dft(complexI, complexI);
}
int main(){
Mat a(5000, 5000, CV_32F);
randn(a, 0, 1);
Mat res;
clock_t start = clock();
fft2(a,res);
cout << clock() - start;
}
MATLAB代码:
mat1 = rand(5000,5000);
tic, a = fft2(mat1); toc
两个代码的结果均相同;但是,C 代码正在采用1502毫秒,而MATLAB代码为660ms。OPENCV中似乎缺少一些优化。我想知道如何加快opencvCode。
我正在使用OPENCV 2.4.10和MATLAB R2016A在Visual Studio 2015上工作。计算机是Windows 7,32 GB RAM,Intel Xeon 3.4 GHz。这两种测试均在同一台机器上进行。
我发现了一堆FFT代码,但它们似乎很难应用于矩阵。有一个简单的矩阵解决方案吗?
OpenCV的FFT实现可能不如Matlab的优化。
如果您需要的FFT性能,请查看FFTW等专业FFT库。
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么比较运算符如此快速
- 我可以使用 g++ 进行三种比较 (<=>) 吗?
- 为什么在读取文件大小时文件IO速度会发生变化
- 比较字符数组
- 如何比较两个函数的速度和性能
- 速度和内存的比较
- 如何准确测量和比较opencl速度以实现循环功能的简单速度
- C 比较字符串操作速度
- MATLAB与DFT中的FFT2在OpenCV C 速度比较中
- C 构造函数与初始化列表速度比较
- 比较nodejs c++插件的速度和js等效的速度?
- 无符号整数的类型双关语是否可以通过消除 >= 比较的需要来加快边界检查速度?
- 运行时间比较 - 类似的代码运行速度慢 4 倍
- C++中比较运算符的速度
- 比较执行速度
- c++速度比较迭代器与索引
- GObject vs C++:GObj 提供什么好处,它在速度/大小方面如何比较
- 在比较Java和C++的速度时,我应该用-O3或-O2编译C++代码吗
- 在我的简单测试中,Java在递归算法速度比较上胜过c++