2012年7月20日金曜日

パノラマ合成

パノラマ合成のアルゴリズムを実装してみましたので公開します。

環境
C++, OpenCV2.4

ソースコード
https://gist.github.com/3135917

使い方
入力として、画像ファイルを入れると,panorama.pngとしてパノラマ画像が出力されます。
画像サイズとか高さとかは割と適当なので、時間を見つけて直して行きます。
ToDo

  • カラー対応
  • サイズをきっちり揃える

コンパイル方法
MacPortsでOpenCVをインストールしたと仮定した後の話
g++ panorama_stitching.cpp `pkg-config --cflags opencv` `pkg-config --libs opencv` -lm
でコンパイルができます。多分


アルゴリズムの概説

  1. 各入力画像に対してSURFで特徴点を抽出
  2. 隣り合う画像(入力の前後)で対応点マッチング
  3. 前後の画像から、変換行列を最小二乗法で推定。
    座標系は円筒座標を仮定し、全ての写真は同じ奥行きにあると仮定
  4. 変換行列を逐次乗じながら、それぞれの画像を結果画像にマッピングして行く
注意)
入力するときは隣り合う画像を入力してください。連続する画像で対応点が取れないと破綻します。
変換行列の全体最適は行っていないので、少しずつ計算誤差が累積します。





0 件のコメント:

コメントを投稿