電光掲示板の撮影#2

を改良し、最初の画像に2番目の画像位置を合わせ、その後ブレンドしてみましょう。先ほどと同じ2枚の画像を使用します。

上記の写真から、電光掲示板が正常に表示されるように、位置合わせを行いブレンドした様子を示します。

位置合わせしてブレンド

両方の写真の位置を合わせ、比率を5割、5割にしてブレンドした結果です。ぶれも発生せず、電光掲示板の表示を読み取れます。ただし、両者を5割に減じた後でブレンドしているため、電光掲示板の表示は薄くなっている部分が存在します。

これまでの処理の重要な部分を示します。

まず、引数のsrcNames に対象画像ファイル名が2 つ格納されているので、それらをCv2.
ImRead メソッドで、配列srcs へ読み込みます。DetectXrossMatchメソッドを呼び出し、特徴点をkeyPt配列へ抽出します。同時に、そして、マッチするものをDMatch 配列のlMatches に求めます。これらを使って、
Cv2.DrawMatches メソッドに与え、2 つの画像から得られるキーポイント同士のマッチするものを、Cv2.FindHomographyメソッドとCv2.WarpPerspectiveメソッドで、affineに写真2を写真1に座標変化した画像を得ます。最後に、写真1と、このaffineをブレンドします。

 

このメソッドから呼び出される2つのメソッドを示します。

KeyPoint2Listメソッド

本メソッドは、KeyPoint" を List<List<Point2d>>へ変換する単純なメソッドです。

 

DetectXrossMatchメソッド

本メソッドは、AKAZE のDetectAndCompute メソッドを利用し特徴点をkpt配列へ抽出します。同時に、画像のキーポイントに対するディスクリプタ、descrptr0とdescrptr1を求めます。
そして、ディスクリプタの2 つの集合同士を比較するDescriptorMatcher オブジェクトのMatchメソッドでディスクリプタのマッチするものをDMatch 配列のfwdMatchesとbckMatchesに求めます。その結果をCv2.DrawMatches メソッドに与え、2 つの画像から得られるキーポイント同士のマッチするものを、Matchesへ求めます。

このメソッドはfwdMatchesとbckMatchesに求めた特徴点から、双方向に存在するものを抽出することによって精度を高めます。