「instantNeRFで遊ぶ Advent Calendar 2022」の12日目です。
今週はtransform.jsonの内容をRealityCaptureのデータから作る方法を検討していきます。
業務外の個人的な検討活動です。
通常の手順でcolmap2nerf.pyを使ってカメラパラメータを求めtestbed.exeを実行したところ、ケーキの形がひしゃげて再生されました。
おそらくCOLMAPが導いたカメラの位置や向きの誤差が大きかったのかもしれません。
同じ画像ファイルを使いRealityCaptureで再構成した結果では正しく再現されました。
個人的に使い慣れたRealityCaptureのカメラパラメータを流用しinstantNeRFの再生品質を上げることを検討します。
colmap2nerf.py
instantNeRFはcolmap2nerf.pyというスクリプトを使い、COLMAPが解析したモデルデータ; cameras.txtとimages.txtをtransform.jsonというデータファイルに変換します。colmap2nerf.pyにrun_colmapをつけるとCOLMAPが実行されます。
COLMAPのモデルデータはcolmap_textフォルダにテキスト形式で保存されます。cameras.txtが内部パラメータ、images.txtは外部パラメータに相当します。
colmap2nerf.pyにrun_colmapをつけない場合、colmap_textフォルダに置いてあるモデルデータを使用することになります。
そのモデルデータをRealityCaptureからexportしたデータと挿げ替えることが目的です。
transform.json
transform.jsonは画像のファイル名とカメラパラメータ、instantNeRFの表示領域のパラメータを記録しています。
transform.jsonはこのあとカメラごとの外部パラメータが続きます。
カメラの内部パラメータはcameras.txtをほとんどそのまま写されています。
一方、カメラの外部パラメータはimages.txtを形式の変更と座標変換が行われています。例えばカメラの向きの形式はimages.txtがクォータニオン、transform.jsonが回転行列です。
方針
カメラ情報の解析結果をRealityCaptureで代用する内容の案はこちらです。
- カメラの位置
- カメラの外部パラメータは全部(位置と向き)
- カメラの内部パラメータと外部パラメータは全部
課題
下記の内容を理解する必要がありそうです。
- COLMAPのモデルデータ
- RealityCaptureのRegistrationデータ
- colmap2nerf.pyの座標変換
各項目の内容が大きいことや情報の検索性を高めるため、日にちを分けて検討していこうと思います。