COLMAPは研究用に開発された3Dモデリングソフトとして定評があります。とりあえず入手法、動かし方と、写真測量ソフトとしての可能性を調べてみました。
COLMAPはBSDライセンスで配布されるSfM-MVSソフトウェアです。
入手先
COLMAPはこのサイトの下の方にGitHubのダウンロードへのリンクがあります。SKラボはRelease VersionのCOLMAP-3.7-windows-cuda.zipをダウンロードしました。CUDAをサポートしたグラフィックボードが必要なバージョンです。CUDAが不要なものも置かれていますが、たぶん実行速度的に実用的ではないと思います。興味があれば試してみてください。
インストールは不要
Zipを解凍すると、下図左上のようなフォルダが出てきます。この中のCOLMAP.batをダブルクリックすると、右側のようなウインドウが現れます。最初の実行時には警告が出るかもしれませんが、詳細設定から実行を許可すればOKです。
データの準備方法は結構特殊かな
まず作業フォルダ(ここではc:\photogrammetry\ColmapDataとします)を作成し、その中にImagesフォルダを作成してUAV画像などを入れておきます。
次にメニューからFile-New Projectを開きます。するとDatabaseとImagesの入力画面になります。Databaseはまだありませんので、Newボタンを押して、作業フォルダの中に任意の名前(ここではdatabase.db)を指定します。Imagesは画像を入れたフォルダを指定します。ここでは、Mavic proとGS proで80%のオーバーラッピングで撮影した58枚のjpeg画像を使いました。そしてSAVEします。
とりあえず自動実行させてみる
Automatic reconstructionツールをクリックします。現れたダイアログに、作業フォルダ、画像フォルダを設定し、あとはデフォルトのままRunをクリックします。(これがベストな設定かどうか、現時点ではわかりません・・・)すると、とりあえず動き始めたようです。
マニュアルを見ていると、フォルダの置き方や画像を入れるフォルダの名前、画像ファイルの名前の付け方まで指定されているようにも見えますが、今回試した範囲ではかならずしもマニュアル通りでなくてもダイアログできちんと指定してやれば問題なさそうです。ただし、画像ファイルの名前は”同じ名前+連番.jpg”でないといけないようです。
たっぷり待つと、良さそうな結果が得られました
今回の58枚のUAV画像は、SKラボが普段使っている有料ソフトのMetashape professionalだと同じPCで5分かからずに疎な点群、密な点群、メッシュ作成までできます。その感覚でいると、無限に感じられるほど時間がかかりますが、ウインドウ右側のログは流れていくので、止まっているわけではないようです。2時間ほどしてようやく止まりました。
SfM (structure from motion)の結果の疎な点群は実行が終わった段階で表示されており、向きを調整すると下図のようになります。
MVS (multi view stereo)の結果の密な点群は、実行が終わった時に表示されるダイアログの指示に従って、メニューからFile-Import model from…で作業フォルダ内に生成された”dense\0\”フォルダ内のfused.plyやmeshed-poisson.plyファイルを明示的にインポートしなければなりません。インポートすると、下図のようになります。点群の密度が大きく、かなり綺麗に見えます。MetashapeでSKラボが普段使っている設定より密度が大きいようです。
その他の点をMetashape professionalと比較すると・・・
Metashape professionalでは、ソフトウェア内で標定点座標を与えてジオリファレンスを行い、オルソ画像やDEMまで作成できますが、COLMAPは3Dモデルまでのようです。写真測量に利用するためには、MeshLabかなにかでジオリファレンスすることを考えないといけないですね。
カメラ座標を与えることでジオリファレンスする機能(Geo-registration)はあるみたいだけど、カメラ座標を正確に知ることも難題だよね・・
また、せっかくGPUも使っているようだし、もっとスピードアップする方法を見つけたいです。とにかく、研究目的で作られたため細かいところまでイジれることが売りのソフトなので、もう少し研究してみます。
gpu_indexオプションはあるんだけど、例えばデフォルトの-1が何を意味しているか、といった説明に簡単には出会えないの。逆に、GPUが動いてないっぽい、みたいな議論は見つかるのにね・・・
あるいは、デフォルト設定のままでもかなり綺麗な点群ができるようなので、いろいろ手をかけるより寝ている間に計算させてしまうのもアリかもしれませんね。 Have fun!
コメント
COLMAPを使うことで、カメラ座標も推定できるのではありませんか。
COLMAPでジオリファレンス機能を使う場合は、推定に用いた画像3枚とその正確な座標のペアが必要だと思っていたのですが、別でカメラ座標を用意する必要があるのでしょうか。
ご指摘ありがとうございます。skラボでは無料で使える写真測量ソフトを探す中でCOLMAPに出会い、あくまで一通り「試した」ことを書いています。記事に記載されたリンク先のGeo-registrationの説明を読む限り、カメラ中心座標が必要だと思いましたのでそのように記載しましたが、実際に動作はさせていませんので、実感をもって理解できているわけではありません。COLMAPについてはおそらくたくやさんの知識レベルに達していないと思います。もしよろしければ、COLMAPでジオリファレンスを行う方法の説明の所在をお教えいただけませんでしょうか。勉強させていただきます。なお、GCPを用いずにSfMで推定されたカメラ座標は現実世界の座標系とは関連しないし、信頼度もあまり高くない、と一般的に言うことはできると思います。