本日は画像解析に関する技術調査枠です。
写真から三次元点群データを生成する技術、所謂 SfM(Structure for Motion) を試します。
今回利用するのは VisualSFM です。
前回紹介した openMVG と異なり、VisualSFM はソースコードが公開されておらず、商用利用もできません。
一方でGUIが提供されており、ビルドも不要なため、セットアップ含めて利用が容易です。
今回は出力データの可視化ツールとして MeshLab を利用します。
VisualSFM と MeshLab のインストール手順は以下の記事です。
bluebirdofoz.hatenablog.com
bluebirdofoz.hatenablog.com
サンプルには以下の OpenMVG のときに取得した写真を再利用します。
bluebirdofoz.hatenablog.com
VisualSFM を起動します。
メニューから File -> Open+ Multi Images を選択します。
利用する画像を全て選択し、「開く」をクリックします。
処理に NVIDIA の GPU を利用する場合は Enable GPU -> Match using CUDA を選択しておきます。
メニューから SfM -> Pairwise Matching -> Compute Missing Match を選択します。
特徴点の抽出と、画像間の対応点の探索が行われます。
次にメニューから SfM -> Reconstruct Sparse を選択します。
撮影位置の推定と荒い点群の生成、カメラパラメータの計算が行われます。
この時点で以下のような荒い点群データが表示されていると思います。
このままだと形が分からないので更に密な点群データを生成します。
メニューから SfM -> Reconstruct Danse を選択します。
本機能の実行は VisualSFM の環境構築で PMVS/CMVS の適用を行っていることが前提条件です。
適用していない場合、本機能はコマンドエラーにより実行されません。
ファイルの出力先を指定すると、処理が開始します。
本処理は時間がかかります。ログウィンドウに finished が表示されるまで待ちます。
処理が完了したら密な点群データを確認するため、表示形式を変更します。
メニューから View -> Dense 3D Points にチェックを入れます。
それらしい点群データが取得できました。
点群データなので少しカメラを離した方がディテールが分かります。
横から見ると、ちゃんと奥行きも取れていることが分かります。
最後に、出力されたファイルを MeshLab で確認してみます。
MeshLab を起動し、メニューから File -> Import Mesh を選択します。
先ほど Reconstruct Danse で出力した ply ファイルを読み込みます。
MeshLab に点群データを読み込むことができました。