【概要】
SfM/MVSによる写真測量・フォトグラメトリ解析ソフトAgisoft Metashape Professionalにおいて、
SfM ( Structure from Motion)の結果に関する多数の項目をチェックし、
ミス・問題が疑われる場合はアラートを表示するプログラム"checkSfM"をリリース!
MetashapeでSfM工程「写真のアラインメント」を実行後、
- 結果が正常かどうか、細かくチェックする時間のない方
- 何をチェックしていいのかわからない方
- 検証点誤差が大きいが、原因がわからない/原因を探す時間がない方
に、少しでも役立てていただければ幸いです。

【プロローグ1:SfMは正しく使われていないことも多い】
ここ数年、私はたくさんの技術者・研究者から、SfM (Structure from Motion)を使った写真測量などの精度に関する悩み相談を受けてきました。そしてそこで受けた印象は、
日本の技術者・研究者には時間がない!
ということでした。
特に、写真測量・フォトグラメトリの解析の第1ステップとしてSfMを実施するとき、
初歩的な問題や間違いによって精度の悪い結果になっているケースが多いと感じます。ちょっとした知識不足やミスで、本来2 cmにできる検証点誤差が容易に20 cm, 200 cmにも膨れ上がってしまうのが、SfMの怖いところです。
問題に気づかず、または解決方法がわからず、そのままMVS(密な点群の生成)工程に進めば、正常な成果物は当然得られません。その結果、写真測量は精度が悪い・諦めよう、という結論になるのは、残念なことです。
【プロローグ2:精度を極めるためのプログラムより必要なものは】
5年前にリリースしたAgisoft Metashape用Pythonプログラム:repeatSfM
は、SfMを多数の解析設定で繰り返し、持っている画像でできるだけ高精度を得られる解析設定を探そうというプログラムでした。しかしいま思えば、基本を押さえた上で、さらに精度を極める時間のある技術者/研究者は、日本にどれだけいるのでしょう?
【本題:無料SfM診断?checkSfM】
おそらく、いま多くの方にニーズがあるのは、
時間不足で生じた問題やミスを発見してくれる、「最低限のチェックプログラム」ではないかと思います。今回リリースするcheckSfMは、そんなプログラムです。
具体的には、Agisoft社のMetashape Professional上で実行できるPythonプログラムで、SfMの結果について多数の項目をチェックし、ミス・問題が疑われる場合にはアラートで指摘してくれます。
現時点のバージョン ver_240802 では、実態としては数日前から作り始めただけの、
- チェックする項目や出せるアラートの数が多くない
- 一般の使用に耐えるように設計・調整したものでもない。アラートの発出基準も当研究室向け
- 各アラートについて、想定される原因、対応方法に関する説明が未完成
- アラートといってもprint文でメッセージが表示されるだけの味気ないもの
というプロトタイプ的、ver0.1的なものですが、それでも、
- Metashapeのコンソールで実行するだけで、様々な問題やミスを見つけてくれるので、実務に携わる忙しい技術者のお役に立つこともあるだろう
- MetashapeのPython APIで再投影誤差、検証点誤差などを計算するのが容易でないぶん、このようなプログラムでも価値があるだろう
- リリースすることで、ニーズがわかるだろう
ということで、リリースさせていただきます。当研究室でも利用予定です。
本プログラムは無償ですが、著者によるニーズ把握などの目的から、簡単な利用申請後にダウンロードいただく形式をとっています。
利用をご希望の方は、先に下記の説明文(プログラム同梱のREADMEファイルとほぼ同内容)をお読みいただき、注意事項を理解して使用条件に同意いただける場合、ページの末尾より利用申請フォームにお進みください。
――――― checkSfMの説明文 ―――――
【プログラム名】 checkSfM
【機能】 Agisoft Metashapeで実施したSfMについて、多数の項目をチェックし、ミスや問題が疑われる場合はアラートを表示します。
【使用方法】
- main_checkSfM.py と lib_checkSfM.pyを、同じフォルダに入れます。
- チェックしたいプロジェクトを、Agisoft Metashape Professionalで開きます。このプロジェクトは、
- SfMつまり「写真のアラインメント」 (Align Photos)が済んだものでなければなりません。
- 標定点 (Control Point)や検証点 (Check Point)のマーカーを各3点以上含むプロジェクトであることが推奨されます。
- 「写真のアラインメント」後、マーカーを設置し、標定点マーカーの座標ソース値にチェックを入れて「カメラを最適化」 (Optimize Cameras)を実行した後のプロジェクトが理想です。
- リッチPythonコンソール (rich Python console)を表示する設定にします。
- 「スクリプトを実行」 (Run script)で、main_checkSfM.pyを実行します。
- ダイアログが出てきますので、目標精度(※)を、m単位で入力してください。その後、実行に少し時間がかかりますが、Metashapeのウィンドウを操作しないでください。
- 実行が終了したら、コンソールに表示されたメッセージを確認します。!!から始まる行(アラート)が表示されている場合は、SfMの過程にミスや問題が潜んでいる可能性があります。
※ 本プログラムは、実行直後にユーザーに、目標精度の入力を求めます。ここで目標精度とは「検証点のSfMの結果(カメラパラメータ)に基づく推定位置と、現地地上測量などによる観測位置の距離 [m]の、RMS(Root Mean Square;代表値の1つで、平均より大きい)」です。短く書けば、検証点誤差(3軸合成)のRMSとなります。同じプロジェクトをcheckSfMにチェックさせても、目標精度次第で、アラートが出たり出なかったりします。
【著者/Author】 Ariyo Kanno
【著作権に関する注意事項/Notes on copyright】
本プログラムの一部は、Agisoft Forum (https://www.agisoft.com/forum/)において、ユーザーからの質問に対してAgisoft Technical SupportのAlexey Pasumansky氏が投稿したコードをコピーして作られています。該当箇所にはコピーしたコードのあるURLを示しています。
This source code is partially made by copying the source code posted by Alexey Pasumansky (Agisoft Technical Support) to Agisoft Forum (https://www.agisoft.com/forum/).
【使用条件/Terms of use】
- 本プログラムを利用して直接的・間接的に生じた一切の損失に対し、著者(神野有生)および関係者は一切の責任を負いません。
- 本プログラムについて何事も保証できませんし、質問に答えることは約束できません。
- 本プログラムは、著者から直接提供された、または指定された方法で利用申請した本人のみが利用できます。加工の有無に関わらず、他者への提供、再配布を禁止します。
【他の注意事項】
- 基本的には、空中測量研究室の内部使用を想定した簡単なプログラムであって、広く一般の使用に耐えるように設計・調整したものではないことを、ご了承ください。
- 現時点では、チャンクで複数の座標系が使用されている場合(例:カメラとマーカーに異なる座標系が設定されている場合)には対応していません。その他、著者が想定していない状況のプロジェクトでは、エラー終了する可能性があります。
- アラートを表示する基準は、著者のMetashapeの用途を想定して「適当に」設定されています。用途に合わせて、"alert"が登場する行のif文の条件式を変更してください。
- リリース前のテストは非常に限られています。特にMetashapeのバージョンが異なると、APIの違いにより、正常に動作しない可能性があります。
【開発環境】
Agisoft Metashape Professional Version 2.1.1 build 17821 (64bit)
Windows 10 Home
――――――――――
注意事項を理解して使用条件に同意いただける場合、利用申請フォーム
にお進みください。
【最後に:周知のお願い(2024/8/6加筆)】
checkSfMのリリースは、工学の研究者として業界のニーズの調査の意味合いがあり、checkSfMの今後のアップデートは、ニーズ次第と考えております。たくさんダウンロードいただいたり、フィードバックをいただいたりすると、著者は「やはりニーズがある」と工学的意義に自信を持って、アラート発出基準の研究やそれに基づく機能の拡充に取り組むことになります。そのため、(著者が全く使えていない)SNSで周知いただくことは、有難いことです。既にご協力いただいた皆様、ありがとうございます。