有料ソフトではありますが、写真測量の基本的な流れを理解するにはMetashapeのWorkflowを辿ることが近道です。実用的なGCP (Ground Control Point; 標定点)を使用したUAV画像の処理の流れを解説しつつ、ステップ毎のより詳細な説明への入り口にもなるように構成しています。GCPを使用しない簡易法は別途説明しています。
MetashapeはAgisoftの商用写真測量ソフトです。
初期設定
Metashapeを起動すると、下のような画面になります。(実際にはその前にライセンスキーを入力する画面があるかもしれませんが割愛します。)
まず最初に、メニューを日本語化しましょう。ToolsメニューのPreferenceでLanguageを変更します。同時に、ログファイルを書きだすように設定しておきましょう。SKラボは、Metashapeのプロジェクトを納めるフォルダをCドライブ直下に作成し、そのフォルダにログを保存することをオススメします。プロジェクト毎のフォルダにログを保存すると毎回設定しなおさなければなりませんので忘れることがあります。
次に、GPUを使用するかどうか設定します。下図の例ではOpenCLベースのCPU内臓GPUと、CUDAベースの外部GPUが表示されています。マニュアルによるとCUDAもOpenCL 1.2もサポートされていますが、私のPCではOpenCLを選んでも効果はありませんでしたのでCUDAを選んでいます。迷ったら実験してみる必要があるでしょう。強力なGPUがあるかないかで処理速度が大幅に違いますので、Metashapeを頻繁に使用するならGPUは必須です。
またこのダイアログ下部の「GPUアクセラレーション処理時にCPUを利用する」にチェックを入れるとGPUを使用するタスクでCPUも同時に使用しますが、パワフルなGPUが1つでもあるならチェックするなとマニュアルに記載されています。
画像の配置
処理したい元画像はどこにあっても良いのですが、将来プロジェクトごと再利用・再処理する可能性が少しでもあるなら、プロジェクトを保存するフォルダ内に、画像用のフォルダを作って納めるのが良いです。別の場所に元画像が置かれていると、プロジェクトフォルダを別の場所に移動した時に、プロジェクトを開くことはできても画像本体にアクセスできなくなることがあります。
下図では、c:\metashapeというフォルダに22040202というプロジェクトフォルダを置いて、その中に画像用のimagesフォルダを作っています。プロジェクトファイルを保存したり成果物を保存する際にはこのフォルダ内に保存しましょう。
写真を追加
ワークフローの最初のステップ、「写真を追加」を実行します。通常のWindowsの操作と同様に、画像フォルダを開き、Ctrl-Aで全画像を選択してOKすれば良いです。
画像が読み込まれると、左上の座標データビューには画像のExif情報が表示され、右上のモデルビューにはカメラ(UAV)位置が、右下の写真ビューにはすべての画像が表示されます。
次に、測量目的なら投影座標系に変換しておきましょう。座標データビューの「変換」ツールをクリックすると座標変換ダイアログが開きます。そこで、適切な座標系(日本なら平面直角座標系、海外ならUTM座標系)を選びましょう。OKすると、座標データが緯度、経度から東経(m)、北緯(m)に変わります。
写真のアラインメント
このステップは、SfM (Structure from Motion)とかバンドル調整とか呼ばれる処理で、複数の元画像の間で対応する点を多数見つけ出し、それらの点の対応関係が全体的に説明できるようカメラの位置とレンズの焦点距離や歪などのパラメータを求めます。これら全体をカメラパラメータと言ったり、カメラの位置や向きを外部パラメータとか外部標定要素、レンズ関係を内部パラメータとか内部標定要素、あるいは単にカメラパラメータと言ったりもします。
カメラの位置って、ドローン搭載のGPSで測定ずみじゃないの?上の図の座標データビューのカメラセクションにも座標データが含まれているよね?
上の図をよく見てよ。精度(m)カラムの値が10mになってるでしょ。普通のGPSだとそのぐらいの誤差があるってことよ。レンズの焦点距離や歪もピントや絞りを変えたら変化するらしいわよ。だから写真測量用にUAV撮影するときはオートフォーカスをオフにするって聞いたわ。
近年はドローンにもRTK-GPSが搭載されて、カメラの位置が正確に測定できるものがあるよ。値段はまだまだ高いけどね。もしそんなドローンが使えるなら、カメラセクションの精度をもっと小さな値に設定してやれば内部パラメータも正確に求まるだろうね。
さて、ここでは写真のアラインメントダイアログで中精度、汎用事前選択にし、あとはデフォルト設定で処理します。座標データビューのカメラセクションですべてのカメラ(個々の画像のこと)にチェックが入っていることを確認しましょう。パラメータを適切に設定することで処理速度も結果の精度も大幅に変化しますので、「アラインメントパラメータの使い方と処理速度への影響」で詳しく説明します。
数分で処理が終わると、モデルビューにカメラの位置・向きと、生成された疎な点群が表示されています。(表示されていないならツールバーで「ポイントクラウド」(サイコロの4の目のアイコン)をクリックしましょう。)
右下の写真ビューの写真にチェックが入っていることも確認しましょう。チェックが入っていない写真があると、警告が表示されます。チェックが入っていない写真は、他の写真との間で有効な対応点が見つからなかったものです。そのような写真に対する対応もマニュアルには記載されているのですが、skラボが経験した範囲では労多くして実り少ない印象でした。素直に写真の重複率を大きくするなどして撮影しなおすことをオススメします。
「ツール」ー「カメラキャリブレーション」でカメラキャリブレーションダイアログを開いてみてください。「基準値」タブ内には、カメラパラメータの初期値が、「修正値」タブ内にはアラインメントの結果求められたカメラパラメータが表示されています。
なお、マッチングに使用した画像内に水面や風で揺れ動く植生などが写り込んでいると、カメラパラメータの精度に悪影響が出ます。そうした画像を除外して内部パラメータを求めておくとか、マスクを使用してそうした場所を除外する方法については別稿で説明します。
マーカー座標のインポート
Metashapeのソフト上ではGCP(基準点)を含む地上の目標物をマーカーと呼んでいます。マーカーには基準点の他に、精度検証のための検証点が含まれます。マーカー座標は別途測量し、以下のようなCSVファイルで与えます。GCPの必要数については計算式などがありますので別稿で述べます。しかし素人・個人にとっては現実的にGCPの必要数を揃えることが不可能なことも多いと思います。よい画像を用い、3Dモデルそのものの精度を上げることが大切でしょう。「よい画像」の定義については、別ソフトmicmacのマニュアルが参考になります。
まず、座標データビューの①「座標をインポート」ボタンで上述のマーカー座標ファイルをインポートします。すると②CSVをインポートダイアログが開きますので、適切に座標系、列の対応関係、何行目からデータを読むかを設定し、OKします。初めて読み込むマーカーですので、「新しいマーカーを作成しますか?」のダイアログには「全てはい」をクリックします。
すると、①マーカーセクションにマーカー座標が表示され、②モデルビューにもマーカーの位置が表示されます。下図では、マーカーの位置は疎な点群のかなり下方に表示されており、Exifの位置情報から構成された疎な点群の標高がかなりずれていることがわかります。
マーカーを対空標識などの地上の目標物と結び付ける
マーカーセクションでマーカーを1つ選び、右ボタンクリックで①「マーカーで写真をフィルタリング」をクリックします。すると、写真ビューに選択したマーカーが写っていると推定される写真だけが表示されます。それらの写真の右肩には白のフラグが表示されており、未処理であることが示されています。
写真ビューで写真を一つ選ぶと、右上のモデルビューだったところに写真が表示されますので、目標物近辺を拡大し、マーカーを正しい位置に移動させます。下図では対空標識を新たに設置して使用していますが、既存の明確な目標物があるならそれでもかまいません。移動を終えるとフラグが緑色に変わります。
上図では最初は白旗になっているけど、青旗になっているのが普通よ。たぶんマーカーの位置が疎な点群の地表から大きく外れているので、場所がわからない降参の白旗になったのだと思うわ。こんな時は対空標識が写っている写真上にマーカーがないことも多いけど、対空標識上で右ボタンクリックして「マーカーを配置」すれば大丈夫よ。
青旗は、ユーザーが位置を修正していないけど、次の計算には使用される、という意味だね。緑旗は修正済み。白旗は降参だから次の計算では使用されないよ。マーカーセクションのプロジェクションの数字を見ると、青でも緑でも数は変わらないけど、白だと数が減るからわかるんだ。
マーカーが木の枝などで覆われて見えない時には、一旦白旗や青旗をクリックして緑旗にしてから右ボタンメニューで「マーカーをブロック」すれば消えるわ。そのかわり、写真ビューで進入禁止マークつき青旗がつくよ。ちなみに、「マーカーを削除」で白旗、「マーカーピンを外す」で青旗に戻るのよ。
この作業を全ての写真、全てのマーカーについて行います。最後に、写真ビューの「フィルターをリセット」ボタン(双眼鏡アイコン)をクリックして全写真を表示し、白旗や進入禁止マークなしの青旗が残っていないか確認しましょう。
下図はすべての対応を付け終えた状態です。マーカーセクションに基準点誤差が表示されています。3.2m、176ピクセル程度の誤差があるようです。下図では全てのマーカーにチェックが入っていますが、一部のマーカーのチェックを外すと検証点扱いになり、最下段の「検証点」の誤差も表示されるようになります。次のステップで基準点を用いてカメラパラメータを最適化していくのですが、検証点は最適化には利用されません。検証点の誤差が小さいかどうかを見ることで解析の精度を評価することができます。
WebODMのGCPファイル作成機能も素晴らしかったけど、どの写真に目標物が写っているのか判断するのは結構大変だったよ。マーカーごとに関係しそうな写真を選んでくれる機能は本当にありがたいな。
マーカーの設定をする前にアラインメントを実行するのは、写真の位置関係をあらかじめ推定しておくことで、フィルタ機能を有効にするためなのね。
ちなみにMetashapeでも、GCPの座標とアラインメントで推定された疎な点群の座標の誤差が大きすぎると、インポートしたマーカーの位置と写真に写ったマーカーの位置の対応をとるのがかえってメンドウに感じることもあります。そんな時は、マーカー座標をインポートする前に、写真でマーカーを探して手動でマーカーを1つ1つ作成し、そのあと座標をインポートする方法もあります。作成するマーカー名をインポートするデータのlabelと同じにしておけば、座標はインポートした時に自動的に設定されます。マーカー1つにつき2枚の写真について正しい位置を設定すれば、残りの写真でもだいたい正しい位置に白旗が表示されるので、案外簡単です。
カメラを最適化するか?トランスフォームを更新するか?
GCP(基準点)を使った処理には、「カメラを最適化」と「トランスフォームを更新」のどちらかを選びます。「カメラを最適化」は基準点座標を用いてカメラパラメータの値を修正します。「トランスフォームを更新」はカメラパラメータは変更せず、基準点座標に合わせたジオリファレンシングのみ行います。
トランスフォームを更新
まず、マーカーすべてにチェックをつけ、カメラのチェックは外しておきます。「トランスフォームを更新」ボタンは下図の赤丸です。それをクリックすると、マーカーセクションの基準点誤差が0.19m、5.3ピクセルまで小さくなったことがわかります。その時のカメラパラメータを下図中央下部に掲載していますが、「写真のアラインメント」の最終図の値と同じままです。
カメラを最適化
まず、基準点にしたいマーカーにチェックをつけ、カメラセクションのチェックは全部外します。カメラパラメータの推定に精度の高い基準点座標を用いるためです。下図ではマーカー全部を基準点にしています。そして、赤丸の「カメラを最適化」ボタンをクリックします。すると、どのパラメータを最適化するか聞かれます。アライメントで変更された実績があるパラメータにチェックがついていますので、そのままOKをクリックします。少々計算時間をとった後、下図右側のように、マーカーセクションの基準点誤差は0.0077m, 0.775ピクセルとなりました。「トランスフォームを更新」より良い結果が得られたように見えます。カメラパラメータは下図右下に掲載していますが、アライメント直後の値から変化しています。
実際にこれが「良い結果」と言えるかどうかは、検証点を用いて点検する必要がある難しい問題です。過適合となってGCPがない場所で誤差が広がっている恐れがあるからです。
どちらを選ぶべきか
一般的には、「カメラを最適化」は精度が高い多数のGCPがある場合、「トランスフォームを更新」はGCPが少ない、あるいは精度が悪い等の場合に行います。素人・個人では良いGCPを多数用意することは難しいと思いますので、よい画像を用いてよい疎な点群を作り、3点+αのマーカーを全部基準点にして「トランスフォームを更新」するのが現実的でしょう。
「カメラを最適化」するならカメラパラメータは最適化ステップで決まるから、アラインメントのステップはスピードアップのために精度を低くしてもいいのね。「トランスフォームを更新」するなら良い疎な点群が前提だから、アラインメントの精度は高くした方がいいということだわ。
高密度クラウド構築
このステップは、アラインメントで求めたカメラパラメータが正しいとして、より多数の点群を発見する、いわゆるMVS (Multi-View Stereo)処理を行います。ここから先はGCP不使用の場合と同じ手順になります。ここでは中品質で中レベルの深度フィルタを用いて高密度クラウドを構築します。パラメータの意味は別途説明します。
このステップがMetashapeでは最も時間がかかる部分です。しばらく待つと下図のように密な点群が表示されます。
高密度クラウドはこの後の処理の基礎になりますから、精度の悪いポイントを除去してクリーンアップしたり、地面部分だけを取り出してDSM (Digital Surface Map)ではなくDTM (Digital Terrain Map)を作成できるようにしたり、いろいろな処理が用意されています。マニュアルを見てくださいね。
DEM構築
密な点群まで作成すると、Build DEMが有効になっています。座標系は画像やマーカーと同じ平面直角座標系になっているはずですので、そのままOKすれば良いです。
DEMはワークスペースビューから開くことができます。左下にワークスペースタブがあると思いますが、無ければ「ビュー」メニューからワークスペースビューを開きましょう。
オルソモザイクの構築
DEMが生成されると「オルソモザイクの構築」が有効になります。オルソモザイクの構築ダイアログでは領域の範囲指定をしなければなりませんが、Estimateボタンを押すと最大範囲が設定されますのでOKします。表示するにはDEMと同様の操作をしてください。
結果のエクスポート
GIS等で結果を利用するために、DEMやオルソをエクスポートします。TIFF形式の画像ファイルは、無圧縮か可逆圧縮されていますので、DEMデータのように値そのものが重要なものはTIFF型式でエクスポートしましょう。TIFF型式だとジオリファレンス情報も画像ファイルに含まれているというメリットもあります。
一方、オルソモザイクのように目で見るためのデータは、不可逆圧縮でも問題ありませんのでファイルサイズを小さくできるjpg画像でも良いです。ただし、jpg画像にはジオリファレンス情報が保存されませんので、ジオリファレンス情報を別ファイルとして出力するために、「Worldファイルを書き込む」にチェックを入れる必要があります。Worldファイルをどう使用するかはGISシステムによって違うので、マニュアルで確認してください。
また、GISでオルソ画像の周囲に生成される白や黒の背景色を透明にして表示することがありますが、jpgのオルソ画像の場合、不可逆圧縮の特性で背景色とは微妙に違う色が背景と画像の境目に生成されることがあります。そのような画像を複数GIS上で重ねて表示するような場合、重なりの境界に白い縁取りが見えることがあります。TIFF画像ではこのような問題は生じませんので、オルソでもTIFF画像を選択する理由になり得ます。
無料写真測量ソフトを使う場合にも、Metashapeの処理工程と比べて考えると解析の内容がより良く理解できるようになります。30日間無料試用もできますので、本格的有料ソフトを知っておくことも有用ですよ。 Have fun!
コメント