さて、前回ビルドしたモジュールを使って、実際に3Dデータを生成してみます。実験に使用するフォルダ構成例は以下の通りです。
- C:\build
前回ビルドしたOpenMVGのプロジェクトがあるフォルダ - C:\SfmTest
テスト用環境 - C:\SfmTest\images
解析対象の写真をここに置きます。 - C:\SfMTest\matches
特徴点およびマッチング結果を出力するためのフォルダを作成します。 - C:\SfmTest\outReconstruction
3Dデータ出力先フォルダを作成します。
解析対象の写真は以下のように何か3Dモデル化したいものをなるべく少しづつずらして同じ場所が複数枚の写真に写る(オーバーラップと言います)ように撮影します。このオーバーラップの目安は連続した2枚の写真の80%程度が同じ場所となるようにします。ちなみに、以下写真ははうちの犬がいつもいじめているノミのぬいぐるみです(笑)
以下ファイルを準備します。
- C:\SfmTest\sensor_width_camera_database.txt
OpenMVGのsrc\openMVG\exif\sensor_width_database\sensor_width_camera_database.txtファイルです。
準備はこれで完了です。それでは実際に解析を実行します。DOSプロンプトを開いて、C:\SfmTestフォルダに移動します。
まず最初にopenMVG_main_SfMInit_ImageListingを実行します。私の環境ではVisualStudio 2017の64ビット環境でビルドしたので、実行モジュールはC:\build\Windows-AMD64-\Releaseに配置されているので、下記のようなパスになっています。それぞれの環境に応じて適切な実行モジュールへのパスを設定してください。
C:\build\Windows-AMD64-\Release\openMVG_main_SfMInit_ImageListing.exe -i C:\SfmTest\images -d C:\SfmTest\sensor_width_camera_database.txt -o C:\SfmTest\matches
以下のようなメッセージが表示されます。カメラ情報と画像ファイルのリストアップが実施されます。
You called :
C:\build\Windows-AMD64-\Release\openMVG_main_SfMInit_ImageListing.exe
--imageDirectory C:\SfmTest\images
--sensorWidthDatabase C:\SfmTest\sensor_width_camera_database.txt
--outputDirectory C:\SfmTest\matches
--focal -1
--intrinsics
--camera_model 3
--group_camera_model 1
- Image listing -
0% 10 20 30 40 50 60 70 80 90 100%
|----|----|----|----|----|----|----|----|----|----|
***************************************************
SfMInit_ImageListing report:
listed #File(s): 56
usable #File(s) listed in sfm_data: 56
usable #Intrinsic(s) listed in sfm_data: 1
ここで、もし、以下のようなエラーが出た場合、sensor_width_camera_database.txt ファイルに解析対象の写真を撮影したカメラ情報を追記します。
Please consider add your camera model and sensor width in the database.
DSC05138" model "DSC-RX100M2" doesn't exist in the database
その場合、撮影したカメラ のCCDセンサの横幅(mm)を調べておく必要があります。sensor_width_camera_database.txt に対しては、以下のように表示されたエラーにカメラ名が書かれているので、その名称とセンササイズをセミコロン区切りで定義します。私の場合、SONYのDSC-RX100M2が撮影したカメラなのですが、エラーには”DSC-RX100M2”と表示されています。SONYホームページにセンサータイプ:1.0型(13.2mm x 8.8mm) ExmorR CMOSセンサーと書かれていましたので、センサ横幅が13.2mmとわかります。そこで、sensor_width_camera_database.txtには以下のように定義を追記しました。sensor_width_camera_database.txtを変更後、Test.batを再実行します。
DSC-RX100M2;13.2
openMVG_main_SfMInit_ImageListingが無事完了すると、次にopenMVG_main_ComputeFeaturesを実行します。
C:\build\Windows-AMD64-\Release\openMVG_main_ComputeFeatures.exe -i C:\SfmTest\matches\sfm_data.json -o C:\SfmTest\matches\
特徴点の抽出がされ、以下のようなメッセージが表示されます。
You called :
C:\build\Windows-AMD64-\Release\openMVG_main_ComputeFeatures.exe
--input_file C:\SfmTest\matches\sfm_data.json
--outdir C:\SfmTest\matches\
--describerMethod SIFT
--upright 0
--describerPreset NORMAL
--force 0
--numThreads 0
- EXTRACT FEATURES -
0% 10 20 30 40 50 60 70 80 90 100%
|----|----|----|----|----|----|----|----|----|----|
***************************************************
Task done in (s): 372.355
そして次がopenMVG_main_computeMatchesです。
C:\build\Windows-AMD64-\Release\openMVG_main_computeMatches.exe -i C:\SfmTest\matches\sfm_data.json -o C:\SfmTest\matches\
一致する特徴点の探索が実行されます。
You called :
C:\build\Windows-AMD64-\Release\openMVG_main_computeMatches.exe
--input_file C:\SfmTest\matches\sfm_data.json
--out_dir C:\SfmTest\matches\
Optional parameters:
--force 0
--ratio 0.8
--geometric_model f
--video_mode_matching -1
--pair_list
--nearest_matching_method AUTO
--guided_matching 0
--cache_size unlimited
- Regions Loading -
0% 10 20 30 40 50 60 70 80 90 100%
|----|----|----|----|----|----|----|----|----|----|
***************************************************
- PUTATIVE MATCHES -
Use: exhaustive pairwise matching
Using FAST_CASCADE_HASHING_L2 matcher
Using the OPENMP thread interface
0% 10 20 30 40 50 60 70 80 90 100%
|----|----|----|----|----|----|----|----|----|----|
***************************************************
Task (Regions Matching) done in (s): 6.61982
- Geometric filtering -
0% 10 20 30 40 50 60 70 80 90 100%
|----|----|----|----|----|----|----|----|----|----|
***************************************************
Task done in (s): 10.8103
Export Adjacency Matrix of the pairwise's geometric matches
最後がopenMVG_main_IncrementalSfMです。
C:\build\Windows-AMD64-\Release\openMVG_main_IncrementalSfM.exe -i C:\SfmTest\matches\sfm_data.json -m C:\SfmTest\matches\ -o C:\SfmTest\outReconstruction\
3Dモデル化とバンドル調整です。以下のような表示が延々と繰り返されます。
Sequential/Incremental reconstruction
Perform incremental SfM (Initial Pair Essential + Resection).
- Features Loading -
0% 10 20 30 40 50 60 70 80 90 100%
|----|----|----|----|----|----|----|----|----|----|
***************************************************
Track building
Track filtering
Track export to internal struct
Track stats
------------------
-- Tracks Stats --
Tracks number: 12222
Images Id:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 47, 48, 49, 50, 52, 53, 54, 55,
------------------
TrackLength, Occurrence
2 7940
3 1930
.....
Automatic selection of an initial pair:
0% 10 20 30 40 50 60 70 80 90 100%
|----|----|----|----|----|----|----|----|----|----|
***************************************************
A-Contrario initial pair residual: 24.4525
Bundle Adjustment statistics (approximated RMSE):
#views: 2
#poses: 2
#intrinsics: 1
#tracks: 123
#residuals: 492
Initial RMSE: 2.92594
Final RMSE: 2.87801
Time (s): 0.0378221
.....
そして最後に以下のようなメッセージが表示されれば解析は無事終了です。
Histogram of residuals:
0 | 42203
0.396 | 12307
0.792 | 5168
1.19 | 2474
1.58 | 1189
1.98 | 634
2.38 | 333
2.77 | 177
3.17 | 85
3.56 | 33
3.96
Total Ac-Sfm took (s): 18.0752
...Generating SfM_Report.html
...Export SfM_Data to disk.
C:\SfmTest\outReconstruction\cloud_and_poses.ply ファイルをMeshLabなどのツールで開くと出来上がった3D点群データを確認できます。