embeddedなブログ

組み込みシステムに関することや趣味に関することをダラダラと書いていきます(^^)

COLMAPで動画から3D点群データを作成する

2020-03-15 10:30:07 | Windows Embedded Standard

動画を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にしてみると少しは改善されるかもしれません。


最新の画像もっと見る