Simple Structure from Motion 〜 実装編0(テストコードとビルド)
前回のエントリからちょっと間が空いてしまいました...が,Structure From Motion の簡易版ができたのでエントリを残しておきます.
0.目的&動機
沖縄で勉強してた Structure from Motion の知識整理をしたく,とっても簡易化した SFM を作りました.あくまでも,SFMの仕組みを理解することを主目的としてます.で,だいぶ丁寧に撮影した写真でないと落ちます(笑)なので,実際にSFMを使う場合は,下で説明する Theia とか,Colmap とかを使ってください.ただ,性能はあまりでないものの,SFMの必須の流れ&アルゴリズムを理解するのには結構役立つと思います.最新のオープンソースのものはもっと洗練されてますが,基本の流れ+αでできているものがほとんどだったので.
1.コード
バンドル調整とか,ロバスト性を上げるロジックとかが入ってないですが,,,,これは時間を見つけて更新できれば.
github.com
2.参考にしたソース
Mastering OpenCV という本の 4 章で SFM を扱っているのですが,該当するコードが下記になります.下記のコードをしらみつぶしに読んで自分なりに書き換えたコードが,今回のコードになってます.なので,大きな流れはほぼ下記のコードに沿ってます.
github.com
国際通り三次元復元!のために使っている&読んでいるコードが下記のソースです.いくらか SFM のオープンソースコードがありますが,おそらく Theia が一番性能が良い(=大量の写真に耐えうる&ロバストに三次元復元ができる.)ような気がしてます.が,それでも国際通りで撮影した写真の枚数が多すぎてまだうまくいってないです...
github.com
Colmap は SFM だけでなく,Multiview Stereo も実装されてます.
github.com
3.ビルド&実行の流れ.
3.1.Github からダウンロード & ビルド
git clone git@github.com:koichiHik/three_view_sfm.git three_view_sfm cd three_view_sfm sh build.sh
3.2.テストデータのダウンロード
2で説明しているデータを落とす必要があります.3.1から続きでコマンド打ちます.
cd .. git clone git@github.com:openMVG/SfM_quality_evaluation.git SfM_quality_evaluation
3.3.実行
3.1でビルドしたコードと3.2でダウンロードしたテストデータを使って動かします.
cd three_view_sfm ./build/bin/three_view_sfm --directory=../SfM_quality_evaluation/Benchmarking_Camera_Calibration_2008/fountain-P11/images/