2012-05-03 28 views
1

複雑な行列の絶対値を得る方法についてお手伝いしてください。行列には実際の値と別の1つのchannel.pleaseの虚数値が含まれています可能であれば は私にいくつかの例を与えます。opencvの複素数の絶対値を計算するには

事前に感謝 Arangarajan

+0

*絶対値を意味するのか* magnitude *を意味しますか? –

答えて

3

のは、あなたが2つのコンポーネントがあるとしましょう:XとY、同じサイズ、同じ型の2つの行列を。あなたの場合は、それは実数/実数の値にすることができます。

// n rows, m cols, type float; we assume the following matrices are filled 
cv::Mat X(n,m,CV_32F); 
cv::Mat Y(n,m,CV_32F); 

あなたはこのような各複素数の絶対値を計算することができます。

// create a new matrix for storage 
cv::Mat A(n,m,CV_32F,cv::Scalar(0.0)); 
for(int i=0;i<n;i++){ 
    // pointer to row(i) values 
    const float* rowi_x = X.ptr<float>(i); 
    const float* rowi_y = Y.ptr<float>(i); 
    float* rowi_a = A.ptr<float>(i); 
    for(int j=0;j<=m;j++){ 
    rowi_a[j] = sqrt(rowi_x[j]*rowi_x[j]+rowi_y[j]*rowi_y[j]); 
    } 
} 
1

あなたがOpenCVのphasecorr.cppモジュールに見れば、すでにこれを実行し、処理するmagSpectrumsと呼ばれる機能がありますが共役対称詰めDFTの結果にもなります。私はそれがヘッダーファイルによって公開されているとは思わないが、コピーするのは簡単だ。速度が気になる場合は、この計算で大きな違いが生じる可能性があるため、有効なSIMDオプションをオンにしてコンパイルしてください。

関連する問題