COLMAPでキャリブレーション済みのデータを使う
COLMAPで三次元復元を行う際に既知のカメラパラメータを利用する方法についてメモしておく。多くの場合、SfMでカメラパラメータも含めて推定することで十分だが、例えばCMUのPanoptic datasetのようにカメラキャリブレーション結果が提供されているようなものに対して、COLMAPを適用してみたい場合は提供されているカメラパラメータを利用する方が良い場合がある。実際に、Panoptic datasetでCOLMAPを実行するとマッチングが上手くいかず推定に失敗する場合が多くある。
既知のカメラパラメータを利用する方法については、COLMAPのFAQの中で回答があるので、ここにある通りにcamera.txt, images.txt, point3D.txtを準備すると良い。
Reconstruct sparse/dense model from known camera poses
https://colmap.github.io/faq.html#reconstruct-sparse-dense-model-from-known-camera-poses
以下はCOLAMPで画像群を読み込み、特徴点の対応関係の取得まで終わっている(マッチング結果のデータベースhogehoge.dbがある)ことを前提としている。
camera.txtの生成
camera.txtには各カメラのカメラモデルおよびカメラ内部パラメータを記載する。フォーマットは以下の通り。
カメラID カメラモデル 解像度x 解像度y fx fy cx cy 歪パラメータ
内部パラメータの表現については利用するカメラモデルに依存するので、以下のURLを参照しながら必要に応じて使い分ける。
Camera Models
https://colmap.github.io/cameras.html
camera_models.h
https://colmap.github.io/cameras.html
image.txtの生成
image.txtには各画像に対応するカメラ外部パラメータを記載する。フォーマットは以下の通り。
画像ID qw qx qy qz tx ty tz カメラID 画像ファイル名
ここで(qw, qx, qy, qz)は3次元回転のクウォータニオン表現で(tx, ty, tz)は並進を表している。これらのパラメータは世界座標からカメラ座標への変換パラメータとなっている。
ここで画像IDとカメラIDの対応が必要となるが、この対応については特徴点をマッチングした際のデータベースを参照する必要がある。確認の方法としてCOLMAPのGUIからDatabase management > Processingで対応関係を確認することができるが、画像の枚数が多い場合はこの方法は現実的では無いので、以下のようにCOLMAPのライブラリを用いて画像IDとカメラIDの対応を取得することができる。
COLMAPの開発環境の準備については以下の記事を参考にしてもらえればと思う。
COLMAP開発環境の準備
https://moitkfm.blogspot.com/2021/02/colmap.html
point3D.txtの生成
point3D.txtについては空のファイルを生成しておけば良い。
上記の3つのファイルの生成が完了したら、Reconstruct sparse/dense model from known camera posesのページに書いてある手順でコマンドを実行していくと既知のカメラパラメータを用いた三次元復元を行うことができる。
実際にCMU Panoptic Datasetに適用した結果は以下の通り。ちなみに、このシーンではカメラパラメータ未知の状態でCOLMAPを実行すると復元に失敗する。
また、Multi-Viewの部分をOpenMVSに変更し実行すると以下のようになり、COLMAPよりもより多くの点が復元されていることが確認できる。
コメント
コメントを投稿