フォトグラメトリ手順書 03 フォトグラメトリ処理 写真編

2024/11/02 「フォトグラメトリ手順書 v2」をZennにて公開しました!
内容も大幅アップデート、新たなTIPSも紹介しています。
今後はそちらで更新していく予定です。

Alignment (写真位置推定)

Reality Captureを立ち上げ、写真の読み込み設定を調整する。

  • Group calibration by Exif
    Yes
    これにより写真がExif情報を元にグループ化され、処理が高速化する。

  • Ignore GPS Exif
    Yes
    写真にGPS情報が含まれている場合その情報が写真位置推定時に用いられるが、正確なGPS情報でない限り悪影響を及ぼすのでYesにしておく。


Alignmentの設定を調整する。

  • Image overlap
    Low
    使用する写真のオーバーラップ率の指定。
    十分なオーバーラップで撮影している場合はNormalやHighを使うことで処理が高速化するが、写真が繋がらなくなる(Compornetがバラける)リスクがあるのでLowとする。

その他の設定はデフォルト推奨。
デフォルト設定での処理が最も良好な結果となる。


もし写真が繋がらない(Componentがバラけてしまう)場合は以下のように設定する。

Max features per image: 160,000
Preselector features: 80,000

これにより写真位置推定時に使用する特徴点が増えるため繋がりやすくなる。
ただし繋がれば良いというものではなく、精度の低い特徴点も拾ってしまうリスクが高まるため、この設定をデフォルトとしては使わない方が良い。
(繋がってはいるがズレているという状況が発生する)


Alignmentを実行する。

ズレがないことを確認する。


この後再度Alignmentを実行する事で写真位置推定結果がより整うが、その前にまず写真のグループ化を解除する。

グループ化されているとExif情報をベースとして処理が高速化されているため写真一枚一枚の厳密な位置調整がスキップされてしまっているので、全体が繋がったのを確認出来たらここでグループ化を解除し、再度Alignmentを実行し写真位置推定結果を整える。


最後にもう一度Alignmentを実行する。


MeshとTexture (3Dモデル生成)

状況を確認するためにNormal品質で一旦メッシュ化を行う。
(本番ではHighで生成する)


生成後はポリゴン数が多くグラボによってはメッシュが表示されないのでSimplify Toolを使いリダクションを行う。

ある程度ハイポリのまま確認を行いたいので5,000,000ポリゴンをターゲットとする。


ポリゴンの状態でメッシュにズレが無いことが確認出来たら、続いてテクスチャを生成するためにまずUVを生成する。

ここではプレビュー用として8kテクスチャを1枚の設定とした。
(最終版では8kテクスチャを複数枚使うがここでは確認のみなので時間節約のため1枚とした)

設定したらUnwrapを実行する。


Unwarp(UV生成)が終わったらTextureボタンを押しテクスチャを生成する。


テクスチャが生成されたら状況を確認する。
Sweetボタンを押すとテクスチャ付きで描画される。


最後にRegistrationからこの作成したComponent(写真位置推定結果)を.rcalignファイルへ書き出す。

※ここまでの工程で生成したメッシュやテクスチャは状況確認のために生成したものなので使用しない

書き出した写真の.rcalignファイル(写真位置推定結果)と、次の工程で書き出すレーザースキャンの.rcalingファイルを合体(Merge Components)したものを使って、本番用のメッシュ化とテクスチャ生成を行う。

スケール調整 (レーザースキャンデータとの合体を行わない場合)

写真のみから生成する場合、フォトグラメトリはスケールの正しくないモデルになるので手動でスケールを合わせる必要がある。
※レーザースキャンデータとの合体を行う場合はレーザースキャンデータが正しいスケールを持っているのでこの工程は不要

Control Pointを使用し、2点間の距離を指定することでスケールを設定することが出来る。

実際の距離がわかり、特徴的な部分にコントロールポイントを設定する。

レーザースキャンを行わない場合は現地で寸法を測っておく。

Control Pointを設定したらDefine Distanceモードにする。

2つのControl Point間をドラッグする。

1DsビューにConstraintsが作られるのでDefined distanceの欄に実際の距離を入力する。単位はm。
測定した実際の距離は9.658mだったので、9.658を入力。

入力後Updateボタンを押すとスケールが反映される。

2Dビュー及び3Dビューで距離が反映されているの確認できる。