あさがおの観察日記

覚書とか考えを整理するだけです。

OpenCVとPythonでパノラマみたいな画像を作る.

OpenCV3とPython3でパノラマのような画像を作るスクリプト(

opencv_examples/python_examples/Panorama at master · cashiwamochi/opencv_examples · GitHub

)を1年以上前に書いたから,githubにあげるついでにここにも書いておく.具体的な例は以下の通り.

f:id:asaga0:20170819221736j:plainf:id:asaga0:20170819221755j:plainf:id:asaga0:20170819221812j:plain

f:id:asaga0:20170819221829j:plainf:id:asaga0:20170819221850j:plainf:id:asaga0:20170819221908j:plain

f:id:asaga0:20170819221928j:plainf:id:asaga0:20170819221948j:plainf:id:asaga0:20170819222008j:plain

この9枚の画像を1枚の画像にまとめるとこうなる.

f:id:asaga0:20170819221707p:plain

特徴量にはAKAZEを使った.ratio testを使ってなるべく好い特徴点マッチングを得られるようにしてある.あと,重複部分の合成はOpenCVcv2.seamlessClone()を使ってそれっぽくみえるように調整してある.ここの調整がなかなかシビアで,他の画像セットでは綺麗に重複部分を合成してくれない場合がある.2枚の画像を合成するには,合成したい部分のマスクを作る必要があり,このサイズが適切でないと合成領域の外側に色が滲み出たような状態が現れる,ので注意されたし.それ以外にも合成するそれぞれの画像の色味が違うと,以下の通りになる.

f:id:asaga0:20170819223109p:plain

OpenCV3とPython3が動く環境なら適当な画像セットで動くスクリプト,のはず.なるべく綺麗に見えるように,合成も実装したし画像を何枚投げても動く.ただし,共通領域の少ない画像セットだと良好な結果は得られないかもしれない.