1

私はopencvに非常に慣れていません。コードをmatlabからopencvに変換する必要があります。matlabでのfftの使用に問題があります。1次元の行列aがあります。以下に示すように、それにfftを適用します。

a = [0;0;0;0;0;0;0;0;0.09707;0.0998;0.1202;-0.1606;-0.0913;0.1523;0.1288];
c = abs(fft(a,15));
c >>     0.3463
    0.1056
    0.3608
    0.5705
    0.4232
    0.2407
    0.1486
    0.1488
    0.1488
    0.1486
    0.2407
    0.4232
    0.5705
    0.3608
    0.1056

C は、matlab から取得した私の結果です。これには cvDFT を使用しますが、結果は異なります。いくつかの例で助けてください..私の C コードを以下に示します...

CvMat* fftin = cvCreateMat(nn,1,CV_64FC2);
CvMat* fftout = cvCreateMat(nn,1,CV_64FC2);
cvZero(b);    ////consider a hav the value of mat b is  empty for imgin
cvMerge(a,b,NULL,NULL,fftin);
cvDFT(fftin,fftout,CV_DXT_FORWARD,0);
cvSplit(fftout,out_real,out_img,0,0);
    for (int i = 0;i<out_real->rows;i++)
    {
        double val11= cvGetReal2D(out_real,i,0);
        double val12= cvGetReal2D(out_img,i,0);
        val11 = abs(val11);
        val12 = abs(val12);
        printf("DFT value is:%f  %f\n",val11,val12);
        cvSetReal2D(C_out,i,0,val11);
    }
4

1 に答える 1

0

最初の例では、結果の各複素数の大きさを出力しているようです。しかし、2 番目の例では、複素数の各コンポーネントの絶対値を出力しているようです (たとえば、長さや斜辺の代わりに X と Y)。

于 2012-05-03T13:14:04.543 に答える