「instantNeRFで遊ぶ Advent Calendar 2022」の15日目です。
今日は「カメラの位置はRealityCaptureの結果を流用」する方法としてCOLMAPのmodel_alignerを使いました。
前半はCOLMAPのmodel_alignerを使った方法、後半は改善した結果を書きました。
業務外の個人的な検討活動です。
間違っていても責任はとれません。
テストデータ
sketchfabのNefertiti statueを使用させていただきました。ありがとうございます。
COLMAP model_aligner
今回試した入力はこちらです。
colmap model_aligner --input_path {変換前のモデルデータのフォルダ}
--output_path {変換後のモデルデータを置くフォルダ }
--ref_images_path {変換するカメラ座標を書いたテキストファイル}
--ref_is_gps 0 --robust_alignment_max_error 1.0
画像群をつくったblenderの画面
その画像群を入力したRealityCaptureの画面
カメラの位置を直接入力したのでBlenderと同じようになりました。
変換前のCOLMAPの画面
たまたまですが、モデルがZのプラス側に配置されました。
camera0の位置も原点から外れていました。
imagesR.txt; ref_images_pathに指定するファイル
RealityCaptureに指定したカメラ位置と同じ内容を記入しました。
実行
今回はGPSを使用しないのでref_is_GPSをゼロにしました。
変換後のCOLMAPの画面
RealityCaptureと同じようにモデルがZのマイナス側に配置されました。
camera0の位置も原点に合いました。
12/12に示したケーキのモデルデータを変換してinstantNeRFに入力した結果
上記の方法で作成したCOLMAPのモデルデータをテキスト形式でエクスポートして、12日目に説明した方法でtransform.jsonを作成し直しました。
画像の数が多いのでRealityCaptureのカメラパラメータのファイルからカメラ座標を取り出してまとめるpythonスクリプトを作成しましたが、一般的な内容なので割愛します。
今回は再生結果が改善されました。
カメラの位置を教えてあげることでinstantNeRFの再生結果が改善する場合があることが分かりました。
参考