このターンテーブル フォトグラメトリーの基本シリーズのエピソードでは、写真からジオメトリを再構築するための Meshroom プロジェクトの基本的な機能を分析していきます。
動画の書き起こし
皆さん、こんにちは!このターンテーブル フォトグラメトリーの基本シリーズのエピソードでは、写真からジオメトリを再構築するための Meshroom プロジェクトの基本的な機能を分析していきます。
まず Meshroom のインターフェースとワークフローの概要を説明し、その後、画像の読み込みに関する実践的な手順に進みます。
Meshroom をダウンロードしてインストールしたら、起動しましょう。2つのウィンドウが開きます。コンソールウィンドウにはプログラムの実行に関するデータや情報が表示され、メインウィンドウがプロジェクトの作業スペースとなります。どちらかのウィンドウを閉じるとプログラムが終了してしまうため、両方とも開いたままにしておく必要があります。

Meshroom では、さまざまな種類のプロジェクトを作成できます。File メニューの New Pipeline をクリックすると確認できますが、もちろん、ここでは Photogrammetry プロジェクトを選択します。
最初にやるべきことは、プロジェクトを保存することです。専用のフォルダを作成し、その中にプロジェクトファイルを保存することをおすすめします。フォトグラメトリー処理を実行すると、一連のフォルダ構造が自動的に生成されるため、これについても後ほど詳しく見ていきます。
プロジェクトファイルの拡張子は .MG で、これは Meshroom Graphs を意味します。Pipeline や Graphs という用語は、Meshroom 内の処理が順番にステップごとに進行することを強調しています。これは、下部にある Graph Editor パネルで視覚的に確認できます。このパネルでは、ノードとそれらの接続が表示されます。
この Pipeline を詳しく見る前に、まずプログラムのインターフェースを簡単に確認しましょう。

Image Gallery パネルには、再構築に使用する画像が表示されます。最初は空であり、フォルダからファイルをドラッグ&ドロップすることでも追加できます。ただし、私の記憶が正しければ、Windows で管理者モードで Meshroom を実行すると、このドラッグ&ドロップ機能は動作しません。いずれにしても、File メニューの Import Images から画像をインポートすることも可能です。
Image Viewer パネルでは、読み込んだ画像を一枚ずつ表示できるため、品質の低いものを除外したり、関連するデータを抽出したりできます。また、後ほど紹介する Depth Map など、Meshroom によって生成されたデータもこのウィンドウに表示されます。
3D Viewer パネルには、再構築されたシーンを表す Point Cloud(点群)が表示されます。このパネルでは、Bounding Box と呼ばれる再構築する範囲を再定義することも可能で、特定の要素のみにフォーカスできます。
Graph Editor パネルには、処理されるノードの順序とそれらの接続が表示されます。各ノードは特定のタスクを担当し、Input Ports からデータを受け取り、Output Ports を通じて1つ以上の出力を生成します。
Photogrammetry の新しいプロジェクトには、デフォルトのパラメータが設定された基本的な Pipeline が含まれています。これは多くのプロジェクトで十分に機能します。プロジェクトを開始すると、Meshroom は Cache というサブフォルダを作成し、その中に Pipeline に含まれる各ノードごとの追加サブフォルダを生成します。
Pipeline はデフォルトのまま使用する必要はなく、新しいノードを追加したり、接続を変更したりすることでカスタマイズできます。このエピソードの後半で、具体的な変更方法を見ていきましょう。
いずれにしても、ノードをクリックすると、Node パネル(右側)にそのパラメータや設定が表示されます。各ノードでは、下部の Attributes、Log などのタブで、さまざまな種類の情報にアクセスできます。

デフォルトのインターフェースに含まれる最後のパネルは Task Manager です。最初は空ですが、後ほど各ノードの処理状況がここに表示されます。
View メニューを見ると、Live Reconstruction パネルがデフォルトでは非表示になっていることに気付くかもしれません。しかし、このシリーズでは使用しないため、無効のままで問題ありません。
Fullscreen オプションを有効にすると、メインのプログラムウィンドウを全画面モードで表示できます。
実践的な操作に進む前に、ノードの実行順序を表す Pipeline について簡単に紹介しておきます。
Pipeline は2つの部分に分けることができます。最初の部分では、Structure From Motion ノードまでの処理が行われ、Meshroom は画像を読み込み、複数の写真に共通する参照点を特定するための情報(Features)を抽出します。

これらの Features はシーンのジオメトリを再構築するために使用されますが、その処理は Structure From Motion ノードの後で実行されます。具体的には、第2フェーズでは、Meshroom が検出された Features の深度データを計算し、3D Point Cloud(点群)を生成します。その後、ジオメトリを再構築し、Mesh を作成します。これは、頂点(Vertices)がエッジ(Edges)で接続され、それによって三角形の面(Faces)が定義される構造です。
最後に、元の写真を組み合わせて Texture という画像を生成します。これは、再構築された3Dオブジェクトの各部分の色を表すものであり、2D画像として保存されます。

写真から検出された Features に基づいて、まず空間内の点を取得します。これらの点は最初は互いに接続されていませんが、次第にリンクされて Geometry(形状)が形成されます。そして、そこに Texture 画像を適用することで、元のオブジェクトの色を持つ再構築ジオメトリが完成します。
Pipeline、ノード、全体の処理についてはまだ詳しく説明することがたくさんありますが、それらの詳細はプロジェクトを進めながら説明していきます。
では、実践的な操作に進みましょう。まず、元の写真を Image Gallery パネルにドラッグ&ドロップします。
Image Gallery パネルでは、追加された写真の総数と、Meshroom によって認識されたカメラの数を確認できます。これは、画像から抽出された内部データに基づいており、パネル下部のシャッターアイコンの横に表示されます。

各写真について、このメタデータが利用可能かどうかを確認するには、画像プレビューのシャッターアイコンにマウスカーソルを重ねるだけです。メタデータが存在する場合、アイコンは緑色で表示されます。一方、メタデータが欠落している場合は、アイコンが赤色になり、Meshroom はその情報なしで可能な限り再構築を試みます。
ターンテーブル フォトグラメトリーのプロジェクトでは、Feature Matching ノードを選択し、Minimal 2D Motion パラメータを2に設定することを推奨します。この調整を行ったら、プロジェクトを保存します。

写真撮影時にグリーンスクリーンの背景を使用した場合(このプロジェクトが該当)、Meshroom に緑色の背景を除去させてから Features を抽出させることが可能です。そのためには、Graph Editor で Image Masking ノードを追加します。パネルの空白部分を右クリックし、ノードを挿入してください。
新しく追加したノードの Structure From Motion Data 入力には、Camera Init ノードの Structure From Motion Data 出力を接続する必要があります。これは、両方のポートをクリックしてドラッグすることで接続できます。
新しいノードの出力を Feature Extraction ノードと Prepare Dense Scene ノードの Mask Folder 入力に接続します。
Image Masking ノードを選択すると、除外する色を定義し、Node パネルで色相、彩度、明度の許容値を調整できます。しかし、この方法でグリーンバックを除去するのはあまり実用的ではありません。その理由は、結果のフィードバックが不十分であり、各写真ごとにカスタマイズされたパラメータを設定できないからです。特に今回のケースでは、背景の布に均一な照明が当たっていないため、個別の調整が必要になる可能性があります。
こうした理由から、Image Masking ノードを削除します。ノードを削除するには、右クリックして Remove Node を選択します。参考までに、ノード間の接続を削除する場合は、リンクを右クリックして Remove を選択すればOKです。

また、すべての写真も削除します。次のエピソードでは、Blender を使った小さなセットアップを紹介し、グリーンバックの除去をより簡単に行う方法を説明します。さらに、Green Spill(グリーンスクリーンの色が被写体に映り込む現象)も除去できるようにします。
ここで唯一保持するカスタム設定は、Feature Matching ノードの Minimal 2D Motion パラメータを2にすることです。
それでは、これらの設定でプロジェクトを保存し、Meshroom を閉じます。次回のエピソードでお会いしましょう!