Metashapeでマスクを使ってカメラパラメータを改善する方法

アイキャッチ, metashape-mask Metashape

波立つ水面や風に揺れる植生、水底の模様などはアラインメントの精度を下げます。マスクを使ってそうした影響を除去する方法を説明します。ただ、SKラボの経験上、マスクの設定は大変な割に効果がないことも多いのです。マスクなしの解析結果に納得できないときに試せば良いと思います。

MetashapeはAgisoftの商用写真測量ソフトです。

マスクが必要な状況とは

波立つ水面や風に揺れる植生は、画像の特徴点の位置がずれる原因となり、カメラパラメータの推定精度に悪影響を与えます。水面や屋根の太陽の反射も、カメラが移動するにつれて移動するため、特徴点の位置がずれる原因です。また、綺麗な水域で水底の模様が見える場合は、水面の屈折で水底が浅く見えますが、その程度がカメラ位置により異なるためにやはり悪影響を与えるのです。

左:風に揺れる植生 右:太陽が反射する浅海域
左:風に揺れる植生 右:太陽が反射する浅海域

以上のような理由から、水面や揺れる植生などをあらかじめマスクして、カメラパラメータの推定に利用しないようにすることが有効な場合があります。

すだくん
すだくん

マスクをすると、それだけタイポイントの数が減ることになるから、精度的に不利になることもあるよ。また、Metashapeが優秀で、水面や揺れる植生上にもともとタイポイントが生成されにくいという側面もあるね。

かわのさん
かわのさん

水面があれば必ずマスクすると決めつけず、まずは普通に写真のアラインメントを行ってみて、タイポイントのでき方やカメラパラメータの様子がおかしくないかどうかを確認してから、マスクの使用を検討した方がいいかもね。

マスクの設定法

マスクは写真ビューとその上のメインビューで設定します。まず写真ビューで作業対象画像をダブルクリックしてメインビューに表示させます。写真ビューツールの「マスクを表示」(右から3つ目の黒四角に白丸のアイコン)をクリックすると、画像にマスクが設定されているかどうか見ることができます。(下図左)

次に、適当な選択ツール(下図中央の赤丸)をクリックし、マスク対象範囲を囲みます。

すると、「選択範囲を追加」、「選択範囲を差し引く」、「選択範囲を反転」ボタンが有効になりますから、下図右の赤丸「選択範囲を追加」をクリックすると、選択範囲が白い縁取りで暗く表示されるとともに、写真ビューの当該画像にマスクが表示されます。

マスクの設定:写真ビューで画像を選び、メインビューで範囲選択してマスクにしていく。
マスクの設定:写真ビューで画像を選び、メインビューで範囲選択してマスクにしていく。

マスクの適用方法

「写真のアラインメント」ダイアログでマスクの適用方法を指定します。「マスク適用先」ドロップダウンでキーポイントかタイポイントが選択できます。

キーポイントは、画像1枚1枚で選定される特徴点、タイポイントは、2枚の画像間で対応関係が発見された対応点ですから、マスク適用先をタイポイントにすれば、複数の画像に含まれる同じ範囲については、1つの画像だけにマスクがあれば対応する他の画像でもタイポイントが生成されないはず。なので、マスクを設定する画像の数を減らすことができるはずです。(確かにそうなるのですが、問題があることが次節で明らかになります!)

写真のアラインメントダイアログのマスク適用先ドロップダウンメニュー
写真のアラインメントダイアログのマスク適用先ドロップダウンメニュー

マスクをタイポイントに適用する(楽だけどおススメしません!)

下図は、できるだけ少ない画像にマスクを作成してタイポイントに適用しようとした例です。下図上は元の画像で、下図下の対応した場所に設定したマスクが表示されています。

タイポイントに適用するためのマスク
タイポイントに適用するためのマスク

この設定で「写真のアラインメント」を実行します。下図上はマスクなしでアラインメントした結果、下図下はタイポイントを対象にマスクしてアラインメントした結果で、左にタイポイントのマッチング状況図、中央に疎な点群、右にカメラパラメータと収差図が表示されています。

下図より、タイポイントを対象にマスクすると、確かに水面のタイポイントは生成されないのですが、何故か陸地のタイポイントも大きく減少しています。その結果、カメラパラメータはかなり変化し、右端の収差図も乱れたものになってしまいました。これが正しい動作なのか、バグなのかはいまのところ判明していません。

上:マスクなしでアラインメントを実行、下:タイポイントにマスクを適用してアラインメントを実行
上:マスクなしでアラインメントを実行、下:タイポイントにマスクを適用してアラインメントを実行

以上より、タイポイントにマスクを適用するのはやめた方が良いことがわかります。

マスクをキーポイントに適用する(大変だけど必要ならこちら)

キーポイントは個々の画像に作成するものですから、マスクをキーポイントに適用する場合には、マスクしたい対象が写っているすべての画像にマスクを設定する必要があります。

下図下は、マスクの設定状況、下図上は、「写真のアラインメント」実行後のタイポイントのマッチング状況と疎な点群、カメラパラメータと収差図です。この方法では、陸上のタイポイントはマスクなしと遜色なく生成されていることがわかります。疎な点群もクッキリしていて、収差図も乱れていませんね。

キーポイントにマスクを適用して

以上より、キーポイントへのマスク適用は期待どおりに動作しているようです。

マスクしたままポイントクラウドを構築するとマスクされた範囲に密な点群は生成されない!

前節で作成した疎な点群は、水面はポッカリ抜けています。しかし、「高密度クラウド構築」では改めて対応点を探していくはずだし、「高密度クラウド構築」ダイアログにはマスクに関連するパラメータはないので、水面が抜けた疎な点群であっても密な点群は全体に生成されると思いませんか?

でもそうはなりません。画像にマスクが設定されていると、その範囲には密な点群は生成されません!ですので、きれいなDEMやオルソが作成したければ、「高密度クラウド構築」前にマスクをリセットしておく必要があります。

マスクのリセットは、写真ビュー内の右ボタンメニューから「マスク」ー「マスクをリセット」ー「全てのカメラ」で行います。下図では、マスクをリセットする前に、念のために「マスクをエクスポート」して保存しています。

左:写真ビューのコンテクストメニューからマスクをエクスポート 右:マスクをリセット
左:写真ビューのコンテクストメニューからマスクをエクスポート 右:マスクをリセット

下図左は、マスクなしでアラインメント、高密度クラウドを構築して生成したDEMとオルソ、下図中は、マスクしたまま高密度クラウドを構築してDEMとオルソを生成したもので、DEMは水辺や橋の標高に影響されているし、オルソは汚く分断されています。下図右はマスクをリセットしてから高密度クラウドを構築したもので、期待通りの結果になっています。

マスクは高密度クラウド構築にも影響する
マスクは高密度クラウド構築にも影響する

マスクの設定と適用方法について説明しました。実をいうと、本例では肝心のカメラパラメータの改善効果について明確に示すことができません。もっとはっきりとカメラパラメータの改善が見られる事例に出会えたら、また報告しますね! Have fun!

コメント

タイトルとURLをコピーしました