SOARISTO工房 Logo

【OpenCV】位相限定相関法による画像マッチング(1)

 前々回では、画像をフーリエ変換し、その周波数スペクトルから位相情報を抽出し、逆フーリエ変換することにより、位相画像(輪郭画像のようなもの)を生成しました。

 2つの画像があり、この2つの画像の間が「どれぐらいずれているか」(画像のシフト量)を推定しようとする際、この位相画像を用いて推定する方法があります。

 「位相限定相関法」(POC; Phase Only Correlation Method)です。

 その名のとおり、2つの画像の位相に注目して相関を取り、2つの画像の間の「類似度」を測る方法です。

 位相限定相関法の概念については、以下のサイトに分かりやすくまとめられています。

 位相限定相関法の処理手順は、以下のようになります。

OpenCV, Phase Only Correlation

 2つの画像をフーリエ変換し、その周波数スペクトルから位相情報を抽出します。抽出された2つの位相情報から、その畳み込み(合成積)を取り、振幅で正規化します。これを逆フーリエ変換することにより、位相限定相関画像を得ます。

 画像Aをfa、画像Bをfbとすると、それぞれの画像の離散フーリエ変換(Discrete Fourier Transform)は、以下の式で表されます。

Phase Only Correlation Formula

 得られた空間周波数スペクトル(複素平面)同士の畳み込み(合成積)を取り、その振幅の絶対値で除することにより正規化します。
(掛け合わせるもう片方の複素平面は、複素共役とします)

Phase Only Correlation Formula

 この合成積の複素平面を逆離散フーリエ変換することにより、位相限定相関画像rabを得ます。

Phase Only Correlation Formula

 この位相限定相関画像におけるピークを示す位置が、そのまま2つの画像のシフト量を表しています。

 さっそく、OpenCVで位相限定相関法を試すことにしますが、その前に、評価用の画像として、以下の2つの画像を用意しました。

OpenCV, Phase Only Correlation, Porsche 911 Carrera S

 評価用の画像の原画像(1920×1080)です。

OpenCV, Phase Only Correlation, Porsche 911 Carrera S

 評価用の画像Aです。原画像の青枠のところを切り出し(763×763)し、512×512にリサイズしたものです。

OpenCV, Phase Only Correlation, Porsche 911 Carrera S

 評価用の画像Bです。上記同様、原画像の赤枠のところを切り出し、リサイズしたものです。

 両画像の間のシフト量は、原画像上ではX:59,Y:29ですが、リサイズ後の画素に換算すると、

   X: 39.5910[pixel]
   Y: 19.4600[pixel]

となります。
(シフト量は、原画像では2つのの素数を取り、リサイズした際に(後ほどの検証のことを考えて)サブピクセル値になるようにしました)

OpenCV, Phase Only Correlation, Result Image

 位相限定相関法により、画像Aと画像Bとの間のシフト量を推定した結果の画像です。
(青色の縦横軸は、後から入れています)

 画像の中で、1ヶ所だけ、高いピークを示している画素があります。
(グレースケールに正規化しているため、輝度値は255)

 この画素の位置は、

   X: 40[pixel]
   Y: 19[pixel]

となっており、正確にシフト量を推定できています。

#すばらしい!0xF9CB

 ということで、プログラムです。(PhaseOnlyCorrelation.c)

〔関連情報〕
   ・【OpenCV】ステレオカメラからの画像入力(1)
   ・【OpenCV】位相画像の生成
   ・【OpenCV】広角レンズの歪み補正

Trackback(0)

Trackback URL: https://www.soaristo.org/mt/mt-tb.cgi/998

Post Comment