動画をiPhoneで撮影して、その動画ファイルからCOLMAPを使って3D点群データを作成してみます。今回、撮影したのはお気に入りのJaguar F-Paceのモデルです。
まず、動画をフレーム毎の静止画に変換します。変換にはFFmpegというツールを使います。このツールはここから入手しておきます。「Get packages & executable files」と書かれているあたりからWindows-64bit/Staticをダウンロードしてbinフォルダ以下のexeファイルを適当なフォルダにコピーして、パスを通しておきます。
COLMAPで処理するためのフォルダを作成します。C:\SfM\jaguarとします。そして変換する動画ファイルをC:\SfM\jaguarに置きます。私の場合はiPhoneで撮影した20200315_014331000_iOS.MOVという動画ファイルです。変換される静止画を保存するためのフォルダとしてC:\SfM\jaguar\imagesを作成しておきます。C:\SfM\jaguarをカレントディレクトリにしてPowerShellまたはコマンドプロンプトを起動します。そして、下記のような引数でffmpegを実行して動画を静止画に変換します。
ffmpeg -i 20200315_014331000_iOS.MOV -vf framestep=5 images\jaguar%04d.jpeg
framestep=5 : 5は変換するときに間引くフレーム数です。5の場合、あるフレームを静止画に出力した後の5フレームはスキップ(間引く)ことになります。この数値を大きくしすぎると静止画数は少なくなりますが、その分、オーバーラップが減るので点群が荒くなる可能性があります。逆に小さくしすぎるとCOLMAPの処理が重くなり、場合によってはメモリ不足になる可能性があります。
jaguar%04d.jpeg : 出力ファイル名です。%04dは4桁の連続した整数をファイル名を自動的に生成します。
ffmpegのオプションの詳細はここを参考にしました。
では、ここからCOLMAPでの処理です。COLMAPをビルドしたフォルダが C:\Git\colmap\buildとします。さきほど静止画に変換したときのPowerShellから C:\Git\colmap\build\__install__\COLMAP.batを実行します。
[File]-[New project]でプロジェクトを新規作成します。
Databaseは[New]をクリックしてC:\SfM\jaguar\database.dbを設定します。Imagesは写真のフォルダC:\SfM\jaguar\imagesを設定します。設定が終わったら[Save]をクリックします。念のため、CTRL+Sを押下してプロジェクトを保存します。ここではC:\SfM\jaguar\jaguar.iniとして保存しました。
[Reconstruction]-[Automatic reconstruction]を実行します。
上図のようにWorkspace folder, Image folderを設定します。Data typeは「Video frames」を選択します。Qualityは点群密度をどれだけ高くするかの設定ですが、Highや最も高いExremeを選択すると、メモリ不足で異常終了する場合もあるので注意してください。Sparse modelとDense modelにチェックを入れます。GPUを使わない場合は、GPUのチェックを外してください。
この設定で[Run]をクリックして解析を開始します。
静止画の枚数やGPUの性能、メモリ容量によりますが、解析にはかなり時間がかかります。完了すると下記のように点群が表示されています。
一度プロジェクトを保存します。CTRL+Sを押下して保存します。
出来上がった点群を確認してみます。C:\SfM\jaguar\dense\0\meshed-poisson.plyをMeshalabで開いてみました。
密度をMediumにしたためか、かなり抜けがありますね。
プロジェクトとして保存したC:\SfM\jaguar\jaguar.iniファイルで細かい解析設定を変更出来ます。
max_num_featuresが1画像当たりで抽出する特徴点の数です。今回の解析した結果では8192となっていたので、少し多いように思います。2000-4000あたりに減らして、逆に密度をHighにしてみると少しは改善されるかもしれません。