【このテーマでは、多数の設定の組み合わせについてMetashapeでSfMを実行し、高精度を出せる解析設定を探すためのPythonスクリプト"repeatSfM"について説明します。】
【はじめに】
現在一般的なUAV写真測量の解析において、精度の要は、SfMによるカメラパラメータの推定です。
カメラパラメータの推定に誤差があると、最終的に地形が浮き上がって推定されたり、歪んで推定されたりするためです。
Agisoft Metashape (PhotoScan)では、カメラパラメータの推定を、
「写真のアラインメント」「カメラアラインメントを最適化」(「カメラを最適化」)の過程で行います。
この過程には様々な悩ましい設定項目があり、SfMの精度に大きく影響しやすい項目だけでも
- 解析に用いる画像サイズ(アラインメントの「精度」)
- キーポイント制限・タイポイント制限
- アラインメント時に考慮(最適化)する内部パラメータ(基本セット or 自動選択:カメラモデルのフィッティングを適応する)
- バンドル調整(「カメラアラインメントを最適化」)時に考慮(最適化)する内部パラメータ(指定 or 最近のバージョンでは自動選択も可能)
- 用いる標定点の組
- カメラ精度・マーカー精度・タイポイント精度
などがあります。
本Webサイトの最初の記事で書いたように、良い精度を与える設定の組み合わせは、対象領域や撮影条件によって大きく変化します。そのような設定の組み合わせを探すには、多くの試行錯誤が必要です(そもそも画像が膨大な場合、計算負荷上、多くの試行錯誤はできませんが)。プロや専門家なら一発で良い設定がわかるという類のものではありません。
何百通りもの設定の組み合わせでSfMを行って、適切な設定の組み合わせを探そうとするとき、Chunkを分けてバッチ処理、というやり方では、計算の準備と結果の観察に膨大な手間がかかります。Metashapeで提供されているPython APIを使うのが現実的です。
また、Python APIを使ってSfMを自動実行するだけなら、比較的容易なのですが、準備から結果の観察までを効率的にするには、
- 重要な設定項目の候補値をスクリプト上で手軽に設定できる。
- 結果の観察を、エクスポートしたレポート・プロジェクトなどを1つ1つ観察する方式ではなく、ぜひチェックすべき重要項目を網羅した一覧表で行える。
ことが望ましいと言えます。そこで、私はPythonに不慣れながら、研究効率化のためにそのようなPythonスクリプトを少しずつ書き、研究室で活用してきました。
【スクリプトの概要と提供について】
そして今回、repeatSfMの最新バージョンを、希望される方に提供することにしました。
大したものではありませんが、次のような機能があります。
- 多数のケース(設定の組)について、カメラパラメータの推定(こちらのページのStep 4, 5, 12)を実行した後、三角測量により検証点誤差を評価し、結果を表形式で出力する。
- 多くの設定項目の候補は、スクリプト上でリスト形式で指定できる。一部はマーカー、プロジェクトファイルで指定する。
- 出力には検証点誤差・標定点残差の統計量の他、疎な点群の統計量、標定点・検証点・カメラに関する再投影誤差なども網羅。
- アラインメントには多少のランダム性があることに対応し、各ケースにつき複数試行を実施可能。
- 標定点を用いる場合と用いない場合(Phantom 4 RTK使用時など)に対応。
- シミュレーションとして、標定点の実測座標に正規誤差を加えることも可能。
- 各試行に関するレポートやプロジェクトの保存も可能。
- 付属の後処理用Rスクリプトを実行すれば、複数フォルダで実行した全ケース・全試行の結果の概要が、1つの見やすい表にまとまる。この表を使えば、Excelのフィルタ・ピボットテーブルなどにより、全ケースの中でベストな(例えば検証点誤差のRMSが最も小さい)設定の組を同定することはもちろん、設定の組と精度の関係の分析を容易に実施可能。
ただし注意点として、
- 本プログラムは密な点群やDEMを作るものではありません。それらの精度の要となる前段:SfMの精度を極める(適切な解析設定を探す)ためのものです。
- 本プログラムで探したベストな設定の組(検証点誤差RMSが最小の設定の組)の検証点誤差RMSを、客観的な検証点誤差RMSとみなして報告することは、統計学的にフェアではありません。ボールを10回投げて最もよく飛んだときの飛距離を、自分の平均的投擲距離として報告するのと似た問題があります。成果物の納品時に検証点誤差の報告が必要な場合には、正しくは別途、本プログラムには入力しない最終的な精度チェック用の検証点を取り置いておき、ベストな設定の組のプロジェクト(保存可能)に、それを入力して表示された誤差を報告する必要があります。
- 本プログラムおよび同梱されるデータ・プログラムは「完全に無保証」です。
- 本プログラムはAgisoft Metashape Professional Version 1.5.5 build 9097 (64 bit)で動作確認していますが、Python APIも随時バージョンアップされていますので、ご使用のバージョンで動作確認(検証点誤差RMSがレポートと一致するかなど)された上でご利用ください。
- 提供の条件・方法は、こちらの記事の末尾の記載内容と同様です。お読みの上で申請ください。
【プログラムが役立つ状況】
このプログラムが役立つと思われる状況は、
- 画像の量と時間的余裕の観点から、何十~何千通りの解析を行う時間があって
- 特定のデータセットについて、設定の組と精度の関係を調べたい
状況です。
以上、ご参考になれば幸いです。