MRが楽しい

MRやVRについて学習したことを書き残す

VisualSFMを用いて写真から三次元点群データを生成する

本日は画像解析に関する技術調査枠です。
写真から三次元点群データを生成する技術、所謂 SfM(Structure for Motion) を試します。
今回利用するのは VisualSFM です。

前回紹介した openMVG と異なり、VisualSFM はソースコードが公開されておらず、商用利用もできません。
一方でGUIが提供されており、ビルドも不要なため、セットアップ含めて利用が容易です。

今回は出力データの可視化ツールとして MeshLab を利用します。
VisualSFM と MeshLab のインストール手順は以下の記事です。
bluebirdofoz.hatenablog.com
bluebirdofoz.hatenablog.com

サンプルには以下の OpenMVG のときに取得した写真を再利用します。
bluebirdofoz.hatenablog.com

VisualSFM を起動します。
f:id:bluebirdofoz:20171107022319j:plain

メニューから File -> Open+ Multi Images を選択します。
f:id:bluebirdofoz:20171107022328j:plain

利用する画像を全て選択し、「開く」をクリックします。
f:id:bluebirdofoz:20171107022343j:plain

処理に NVIDIAGPU を利用する場合は Enable GPU -> Match using CUDA を選択しておきます。
f:id:bluebirdofoz:20171107022351j:plain

メニューから SfM -> Pairwise Matching -> Compute Missing Match を選択します。
f:id:bluebirdofoz:20171107022401j:plain
特徴点の抽出と、画像間の対応点の探索が行われます。

次にメニューから SfM -> Reconstruct Sparse を選択します。
f:id:bluebirdofoz:20171107022414j:plain
撮影位置の推定と荒い点群の生成、カメラパラメータの計算が行われます。

この時点で以下のような荒い点群データが表示されていると思います。
f:id:bluebirdofoz:20171107022425j:plain

このままだと形が分からないので更に密な点群データを生成します。
メニューから SfM -> Reconstruct Danse を選択します。
f:id:bluebirdofoz:20171107022434j:plain
本機能の実行は VisualSFM の環境構築で PMVS/CMVS の適用を行っていることが前提条件です。
適用していない場合、本機能はコマンドエラーにより実行されません。

ファイルの出力先を指定すると、処理が開始します。
f:id:bluebirdofoz:20171107022505j:plain
本処理は時間がかかります。ログウィンドウに finished が表示されるまで待ちます。

処理が完了したら密な点群データを確認するため、表示形式を変更します。
メニューから View -> Dense 3D Points にチェックを入れます。
f:id:bluebirdofoz:20171107022515j:plain

それらしい点群データが取得できました。
f:id:bluebirdofoz:20171107022523j:plain
点群データなので少しカメラを離した方がディテールが分かります。
f:id:bluebirdofoz:20171107022533j:plain
横から見ると、ちゃんと奥行きも取れていることが分かります。

最後に、出力されたファイルを MeshLab で確認してみます。
MeshLab を起動し、メニューから File -> Import Mesh を選択します。
f:id:bluebirdofoz:20171107022556j:plain

先ほど Reconstruct Danse で出力した ply ファイルを読み込みます。
f:id:bluebirdofoz:20171107022622j:plain

MeshLab に点群データを読み込むことができました。
f:id:bluebirdofoz:20171107022640j:plain