1

現在、opencv の dft 関数で奇妙な動作が発生しています。私はいくつかのopencv行列をdft転送し、周波数領域でいくつかの計算を行っています。その後、再び変換しています。

結果は、2 の累乗のサイズ (256x256、512x512 など) の画像では期待どおりに見えますが、それ以外のサイズでは完全に意味がありません。

私のコードはおおよそ次のようになります。

cv::Mat Z(Pgrads.rows, Pgrads.cols, CV_32FC2, cv::Scalar::all(0));

cv::dft(Pgrads, P, cv::DFT_SCALE | cv::DFT_COMPLEX_OUTPUT);
cv::dft(Qgrads, Q, cv::DFT_SCALE | cv::DFT_COMPLEX_OUTPUT);

/* doing some calculations */

cv::dft(Z, Z, cv::DFT_INVERSE | cv::DFT_REAL_OUTPUT);

私が行っている操作はフォトメトリックステレオと呼ばれているため、簡単に言えば、いくつかの勾配でグローバルな統合を行っています。他の誰かがopencvでこの問題を経験したことがありますか?アドバイスをもらえますか?

前もって感謝します

4

2 に答える 2

1

FFT は 2 の累乗サイズのデータ​​ セットでのみ機能します

画像を展開して定数値でパディングするのが普通です (フーリエ結果には影響しません) http://docs.opencv.org/doc/tutorials/core/discrete_fourier_transform/discrete_fourier_transform.htmlを参照してください

于 2012-11-14T21:41:06.530 に答える