写真から3Dモデルを作製する (4): ポイントクラウドの作成

VisualSFMの準備が出来たので、さっそく3Dモデルを作りたい。が、その前に写真の撮り方について何点か。

  • 対象にも因るが、人物なら28mmから100mmくらいの単焦点レンズが良い。歪みが少なく、高解像であること。
  • ピンボケはよろしくない。f/8からf/16くらいまで絞る。
  • 強い影が出来るとよろしくない。室内に照明が用意できないようなら、曇天に屋外で撮るという手もある。


写真から3Dモデルを作製することを"photogrammetry"とか"SFM (Structure From Motion)"などという。コツやノウハウをサラッとでも検索してみておくと良いだろう。写真の撮り方でモデルの出来の8割がたが決まってしまうのだ。

ある程度知見を得たところで、VisualSFMで試してみよう。このサイトを手本にやってみると良い。123D Catchなんてイラネーぜっという侠気あふれるサイトだ。


何点か追記しておこう。

  • 上記のサイトには、大きすぎる画像は宜しくない、なんて書いてあるが、関係ない。ワシの手元では大きな画像、というか解像度の高い画像の方が良い結果が得られた。6000x4000 pixelで、自分の顔面をアップで撮影した。
  • 曇りの日に窓際にカメラを三脚で固定、その前にでんと座り、タイムインターバルで7枚か8枚撮影した。顎の下と鼻の下が見えるように、ややアオリで撮影した。
  • 顔の部分のディテールが乏しく、背景がモデリングされている場合がある。特徴点抽出の段階で、背景の特徴が邪魔をしている。
  • 元の画像の背景を黒塗りしてやり直すと良い。この時、画像と同じディレクトリに作成されているファイル(*.sift, *.mat)を消去すること。それぞれ、特徴点と特徴点のマッチングが保存されている。
  • 最終的に保存されるのはプロジェクトファイルではなく、stanford形式(.ply)のポイントクラウドだ。
  • ここで出来るポイントクラウドはノイジーで、背景などの無駄な点が含まれている。これらの処理は別のアプリケーションで行う。


VisualSFMの操作方法は本家サイトが当然詳しい。


やってみよう。先ず、画像を読み込む。顔写真は恥ずかしいので、適当に空撮画像を頂いてきた。顔写真なら、数枚から数十枚くらいだろう。操作は、[File] > [Open+ Multi Image]。下は画像の読み込みが終わったところ。サムネイルで表示される。


画像を読み込んだら、特徴点抽出とマッチングを行う。操作は、[SfM] > [Pairwise Matching] > [Compute Missing Match]。画像が大きかったり、枚数が多いと、それなりの時間が掛かる。ただし、特徴点とマッチング結果は画像と同じディレクトリにファイルとして保存されるので、次回からは時間は掛からない。

次はスパースモデリング。操作は、[SfM] > [Reconstruct Sparse]。下はスパースモデリングが終わったところ。使用された特徴点と伴に、写真がパース付きで表示される。


モデルは、左マウスボタンでドラッグすると移動させることができる。また、ホイールでモデルの拡大と縮小、Ctrlを押しながら左右マウスボタンのドラッグでモデルの回転ができる。表示されている写真は、Ctrlを押しながらホイールを操作すると、拡大・縮小ができる。写真を小さく表示するとこんな感じになる。


Shiftを押しながらホイールを操作すると、特徴点の拡大・縮小ができる。こんな感じになる。


次はデンスモデリング。操作は、[SfM] > [Reconstruct Dense]。保存先とファイル名を尋ねられるので入力する。下はデンスモデリングが終わり、[TAB]キーを押して表示を切り替えたところ。この例では、3648x2736ピクセルのJPG画像588枚からの構築に170分掛かった。ポイントクラウドの点数は15M、さすがにモデルを動かすだけでも重い。顔面モデルだったら大きくても2Mくらいだろう。

出来たかな?次回は、このポイントクラウドからメッシュを作製する。