SfMによる3Dモデルの作成

この記事は1年以上前に書かれました。
内容が古くなっている可能性がありますのでご注意下さい。


複数の写真から被写体の立体形状を復元するSfMStructure from Motion)と呼ばれる技術を容易に利用できるよう、ツール環境が揃ってきました。今回は、いずれもオープンソースのVisualSFMMeshLabを用いて、庚申塔の3Dモデルを作成してみることにします。
完成したモデルはWindows標準の3Dビューアで表示することができます。


VisualSFMを起動し、[File]メニューから[Open+ Multi Images]を選択して、3Dモデル生成に使用するすべての写真を読み込みます。

今回使用した写真は23枚です。堂の中にあるため前方からの写真のみですが、なるべく角度を変えて撮影するようにしました。また、中央に彫られた三猿は特に多めに撮影しました。それぞれの写真のピクセル数は1,728×2,880です。

次に、[SfM]メニューから[Pairwise Matching]→[Compute Missing Match]を選択し、特徴抽出とマッチングを実行します。

さらに、[SfM]メニューから[Reconstruct Sparse]を選択し、粗い点群の生成を実行します。
終了すると、生成された点群が表示されます。

この時点では、まだ庚申塔の輪郭がうっすらと分かる程度ですので、次は密な点群を生成します。

[SfM]メニューから[Reconstruct Dense]を選択し、生成したファイルを格納するファルダを指定します。この処理にはPMVS/CMVSが必要になります。実行できない場合は、VisualSFMのインストールガイドを参考にしてPMVS/CMVSをインストールします。

処理が終了したら、[View]メニューから[Dense 3D Points]を選択し、密な点群を表示します。

庚申塔と、その周囲の一部がモデル化されました。

ここからはMeshLabを使用します。不要な部分を削除し、細かに空いている穴を塞いでモデルを完成させます。

[File]メニューから[Import Mesh…]を選択し、ダイアログボックスが表示されたら、VisualSFMが生成した拡張子.plyのファイルを選択します。
モデルが表示されます。

まずは、不要な部分を削除します。[Edit]メニューから[Select Vertexes]を選択し、不要な部分を矩形で選択します。選択された点群は赤く表示されます。

[Filters]メニューから[Selection]→[Delete Selected Vertices]を選択して、赤く表示された点群を削除します。削除はCtrlキー+Delキーで実行することもできます。

誤って必要な点群を削除しないよう、モデルを回転したり拡大しながら、この作業を繰り返して不要な点群をすべて削除します。

このステップが終了したら、[File]メニューから[Export Mesh As…]を選択し、ファイル名を変えて保存しておくと良いでしょう。

モデルを拡大すると良く分かりますが、生成したモデルに穴(隙間)が空いてしまうことがあります。
今回は、左側から見た場合と比べて、右側から見た場合に、三猿の部分に大きな穴(隙間)ができてしまいました。

穴(隙間)を塞ぐ方法にはいくつかありますが、今回は[Filters]メニューから[Remeshing, Simplification and Reconstruction]→[Screened Poisson Surface Reconstruction]を実行します。ダイアログボックスでは、Reconstruction Depthの値を初期値の8から12に変更しました。この値を大きくすると、処理に時間がかかりますが、より緻密なモデルになります。

穴(隙間)は塞がれましたが、ズームアウトすると、周囲に余分な部分ができてしまったことが分かります。

[Select Vertexes]とCtrlキー+Delキーで余分な部分を削除すれば完成です。

[File]メニューから[Export Mesh As…]を選択し、ファイル形式をSTL(Standard Triangulated Language)に変えて保存すると、Windows標準の3Dビューア等で開くこともできます。

SfMによる3Dモデルの作成 123