簡體   English   中英

MATLAB中的fft2與OpenCV中的dft 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 ms,而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性能是您所需要的,那么請查看專用的FFT庫,如FFTW

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM