これまで、位相画像の生成や、位相限定相関法(POC; Phase Only Correlation Method)の実装などを、シコシコとやってきた訳ですが・・・。
なんとっ! OpenCVの関数として、位相限定相関法が提供されていることが分かりました。
#もっと早く気づけば良かった。0xF9D3
(まぁ、原理が分かっただけでも良しとしましょう)
位相限定相関法の関数(phaseCorrelate())を含むソースファイルは、以下のフォルダに格納されています。
\opencv-2.4.10\sources\modules\imgproc\src\phasecorr.cpp
関数phaseCorrelate()自体の解説は、こちら。
評価用の画像の原画像(1920×1080)です。
前回同様、青枠から赤枠へのシフト量を推定します。
プログラムです。(PhaseOnlyCorrelation.cpp)
関数phaseCorrelate()は、2つのグレースケール画像と、窓関数の配列を与えると、X方向およびY方向の「シフト量」と、5×5のマトリクスの重心における「ピーク値」を返します。
(ピーク値はオプション)
窓関数は、サンプルに準じて、ハニング窓(hanning window)を使っています。