Photogrammetry (COLMAP + OpenMVS)

 以前、Meshroomを使って複数枚の画像から三次元復元を行うPhotogrammetryを行った。

Photogrammetry: https://moitkfm.blogspot.com/2019/08/photogrammetry.html

今回は、COLMAPとOpenMVSを使ってPhotogrammetryを行ってみる。というのも、以下の記事にあるように、カメラポーズの復元と疎な復元をCOLMAPで行い、密な復元をOpenMVSで行うという組み合わせが復元されるモデルの品質を向上させるためにはよさそうなため。これは、COLMAPはStructure-from-Motionのライブラリであり、疎な復元に特化しており、逆にOpenMVSは既知のカメラポーズを入力としたMulti-View Stereoに特化したライブラリだからだと思う。

COLMAP、OpenMVSはどちらもビルド済みの実行ファイルが公開されているので、上記のパイプラインを試すのはとても簡単。

COLMAPの実行ファイル: 
https://github.com/colmap/colmap/releases

OpenMVSの実行ファイル:
https://github.com/cdcseacave/openMVS_sample/releases/tag/v0.7a


また、COLMAPとOpenMVSを使ったパイプラインについては、以下のページにバッチファイルが公開されている。

COLMAP + OpenMVS scripts:
https://peterfalkingham.com/2018/04/01/colmap-openmvs-scripts-updated/

ただし、27行目の"--export_path"となっている部分は"--output_path"と修正する必要がある。修正したスクリプトは以下の通り。12行目、15行目、18行目のCOLMAPとOpenMVSへのパス、作業ディレクトリへのパスは各自の環境に併せて修正する必要がある。

::These parameters are specific to computer

::Store current Directory:
set currDir=%CD%

::get folder name as variable
SET "MYDIR=%~p0"
set MYDIR1=%MYDIR:~0,-1%
for %%f in (%MYDIR1%) do set myfolder=%%~nxf

:: Set colmap directory (change this to where you've downloaded colmap, replace 'dev' with version number if necessary):
set colDir=C:\softwares\colmap-cuda\bin\colmap.exe

:: Set openMVS directory (change this to where you've downloaded openMVS)
set oMVS=C:\softwares\openMVS_sample-0.7a

:: Set Working Directory (I create a temporary folder on my D drive to process data in)
set workDir=D:\%myfolder%\

mkdir %workDir% 
copy *.jpg %workDir%
cd /d %workDir%

%colDir% feature_extractor --database_path database.db --image_path .
%colDir% exhaustive_matcher --database_path database.db
mkdir sparse
%colDir% mapper --database_path %workDir%\database.db --image_path . --output_path %workDir%\sparse
%colDir% model_converter --input_path sparse\0 --output_path model.nvm --output_type NVM
%oMVS%\InterfaceVisualSFM.exe model.nvm
%oMVS%\DensifyPointCloud.exe model.mvs
%oMVS%\ReconstructMesh.exe model_dense.mvs
%oMVS%\RefineMesh.exe --resolution-level 1 model_dense_mesh.mvs
%oMVS%\TextureMesh.exe --export-type obj -o %myfolder%.obj model_dense_mesh_refine.mvs

mkdir %currDir%\model\
copy *.obj %currDir%\model\
copy *.mtl %currDir%\model\
copy *Kd.jpg %currDir%\model\

cd %currDir%

::If you want to automate removal of the working folder, use the following line.
::Don't use it if you want to keep intermediate steps.
rmdir /S /Q %workDir%

復元結果は以下の通り。

COLMAP+OpenMVSの結果

Meshroomの結果
上記の結果に関しては、13枚の画像から復元した結果となっている。COLMAP+OpenMVSの結果の方が滑らかな形状が復元されているのが分かる。また、Meshroomの結果では、なぜか生成されるテクスチャが暗くなってしまっているが、COLMAP+OpenMVSの結果では自然な明るさになっている。入力に使った画像の一部は以下の通りで、暗い画像では無かった。

より多くの視点から撮影してあげることで、COLMAP+OpenMVSで高品質なモデルを生成できるような気がする。また、Photogrammetryで良く使われているRealityCaptureとは異なり、COLMAPもOpenMVSもソースコードが公開されいるため、アルゴリズムの改善なども可能なところが良い。



コメント

このブログの人気の投稿

COLMAPでキャリブレーション済みのデータを使う

5点アルゴリズムによるカメラ位置・姿勢の推定

2D-3D対応からのカメラ位置・姿勢の推定