RANSACによる外れ値に強いホモグラフィ推定

それではホモグラフィ変換を用いて、パノラマ画像作成ではどのように画像間のレジストレーション処理を行うのかをみていきましょう。その手順ですが、

  1. まずSIFT記述子の値から最近傍探索アルゴリズムにより仮の対応点ペアを求める
  2. その対応点ペアを元に画像間のホモグラフィ変換(行列)の最適なパラメータをRANSACで計算する

という2段階の処理により行います。

まずは(1)の処理です。各画像から抽出したSIFT記述子に対して、まずは最近傍探索アルゴルリズムによりSIFT記述子を値が近いものどうしをグループ化(クラスタリング)を行います(最近傍探索にはkd-treeというアルゴリズムなどが使われますが、今回その詳細は割愛します)。

次に、(2)の処理です。最近傍探索により算出した画像間でのSIFT記述子の対応点ペアが出てくるのですが、この対応点ペアには対応付けの失敗が含まれています。そこでRANSACにより、ホモグラフィを推定することで、幾何的に画像間のホモグラフィ変換に用いて正しい点(インライア)と、インライアで推定できるホモグラフィ変換に用いるには不適当である外れ値(アウトライア)を、2つに分離することができます。

このようにしてRANSACによる画像間のレジストーレションが済んだら、求めた移動量とホモグラフィ変形量でソース画像の移動・変形を行い、その後1枚に位置合わせできるようになった2枚の画像を円筒座標系などのパノラマ座標系に張り合わせていきます。

最終的なパノラマ画像への合成(処理3、4)

入力画像を処理(2)で求めた値で移動・変形し、パノラマ座標系への張り合わせが終わったら、最後は各画像の画素値をどれくらいの割合で合成するかを決める必要があります。最も単純な合成方法は、単純に各張り合わせ画像の画素値の平均を取る方法です。ただ、単純な平均を取っただけだと、「露出の違い」、「移動量の誤差による重ね合わせのずれ」、「動いている部分(のモーションボケによる合成の誤差)」などが目立つ結果画像になってしまいます。

このうち「動いている部分」だけを除去したいのであれば、メディアンフィルタと呼ばれる平滑化処理フィルタを用いて、それらの動く物体だけを除去することが可能です。一方、処理領域の中心部に重みを置いて残す処理を行うフィルタを用いれば、移動物体を複数に複製して残すことが可能です。これにより、例えばスキージャンプ中の連続写真からパノラマ画像を作れば、時事刻々と変化するジャンプ中の選手の各時刻での様子をすべて残すといった処理も可能になるわけです。

各入力画像の画素の平均を用いる場合にもっと良い方法としては、画像の中心部にある画素(張り合わせ時に重なりは少ない)に大きな重みを置き、画像中の周辺部の画素の(張り合わせの時に重なりが大きい)重みを小さくすることです。基準点からの画像上での距離を各画素の値に持つ「距離マップ」を生成し、この距離マップを用いて重み付けを行った画像の合成を行うことを、俗に「フェザリング」と呼びます。距離マップの値は中心部の値が高く、周辺部の値が小さくなっているので、距離マップの各画素の値を重みに用いて合成を行えば、露出の異なる画像同士を上手く合成することができます。

パノラマ作成のアプリケーション例:iPhone版Microsoft Photosynth

MicrosoftのPhoto Synthは、撮影した複数の画像から、球面座標モデルによるパノラマ画像の合成を行うことが可能なアプリケーションです。加えて、パノラマ合成のような座標系モデルによる擬似的な3次元合成でなく、各画像をステレオビジョン技術により3次元位置を直接算出して各画像間を3次元空間上で遷移できる「Synth」を作成できるアプリケーションです(今回はパノラマの話なのでSynthの詳細は割愛します)。合成したパノラマ画像もしくはSynthはBing(Map)上でジオタグ付きで共有することが可能です。

以下の動画はパノラマ画像を作成できるiPhone版のPhotosynthのプロモーション動画です(SynthはiPhone版では現在のところ作成できません)。

iPhone版PhotoSynthによるパノラマ作成

iPhone版PhotoSynthではリアルタイムに入力画像を1枚ずつ自動で増やしてきながら、パノラマ画像に用いる空間を埋めて行くことができるようになっています。カメラを移動させるたびに自動的に適切な新しい張り合わせ画像領域が自動的に選択されていきます(自分でタッチして任意の画像を追加することも可能です)。こうしてiPhoneを動かして空白領域を自動選択により順番に埋めていくだけで、簡単に球面座標系モデルのパノラマ画像を簡単に作成することができます。

PhotoSynthのようなパノラマ画像アプリでパノラマ画像を作成すると、1枚のパノラマ画像として保存することもできます。この場合、パノラマ画像が円筒モデルで作成された場合には画像で保存すると、画像は長方形なのでその長方形に合うように座標系が変換された状態で保存されます。

パノラマ画像(PhotoSynthで)を画像(長方形)で保存したもの

以上、パノラマ画像作成の技術について紹介しました。パノラマ画像の発展は3D再構成(Strucure from Motion(SfM)などにより複数の画像から3次元形状を計算する)ことです。先ほど紹介したPhoto Synthの「Synth」もパノラマとSfMを結合させた、3D的なパノラマなのですが、こういった「3D再構成の技術」は今後まとめてひとくくりにしてご紹介するので、その時を楽しみにしておいてください。