我对使用opencv的dft

时间:2019-07-27 12:50:24

标签: c++ opencv dft

我是使用opencv库的新手。这些天来,我尝试使用dft(),但是在使用dft()之前和使用dft()之后,有些事情我还是不明白。你能帮我理解吗?

我看了一些有关此的youtube视频,但是我也不明白。

 Mat padded;                          
int m = getOptimalDFTSize( I.rows );
int n = getOptimalDFTSize( I.cols );
copyMakeBorder(I, padded, 0, m - I.rows, 0, n - I.cols, BORDER_CONSTANT, Scalar::all(0)); //here we are expanding the photo but i dont understand the operation in here



 Mat q0(magI, Rect(0, 0, cx, cy));   
    Mat q1(magI, Rect(cx, 0, cx, cy));  
    Mat q2(magI, Rect(0, cy, cx, cy));  
    Mat q3(magI, Rect(cx, cy, cx, cy)); 

    Mat tmp;                           
    q0.copyTo(tmp);
    q3.copyTo(q0);  //here we are rearring the quadrants but how
    tmp.copyTo(q3);

    q1.copyTo(tmp);                    
    q2.copyTo(q1);
    tmp.copyTo(q2);

1 个答案:

答案 0 :(得分:0)

copyMakeBorder用于使图像具有合适的尺寸,以进行最佳dft计算。如果在最佳尺寸的图像上执行dft,则可以更快地执行dft,可查阅文档here

象限是fftshift操作的一部分,matlabnumpy都有执行此操作的功能。目的只是为了帮助进行视觉分析,fftshift将低频移动到图像的中心,更清楚地揭示了dft大小的对称性。