空中測量研究室の技術ノート【2冊目】

山口大学の1研究室による研究メモです。UAV写真測量, ドローン測量, フォトグラメトリ, SfM/MVSなどと呼ばれる技術の情報があります。

Metashapeでのカメラパラメータ・タイポイントの分散の調べ方

1. はじめに:最小二乗法による推定値のバラつきとは?

何かのパラメータを最小二乗法で推定するときは決まって、モデル式に(多くの場合、モデル式に含まれる観測値に)何かの誤差が含まれていると仮定している。もし誤差を認めないなら、つまり誤差項のないモデル式がすべて厳密に成り立つなら、必要最小限の数の式を適当に選んで、連立方程式として解けば済むからだ。

 

そしてその誤差に特別な仮定を置けば、求めるパラメータの推定値とともに、その推定のバラつきの指標(分散あるいは標準偏差)を得ることができる。一番簡単な例として、n組のy, xのデータから単回帰直線を推定する状況(単回帰分析)では、

y = ax + b + ε

というモデル式を考え、最小二乗法でパラメータa, b(直線の傾き・切片)を推定する。ここで、誤差εは、yの観測値に含まれる誤差を表している。そしてこのn個の観測誤差が、互いに独立で、同じ1つの正規分布に従うと仮定すれば、a, bの推定の分散を計算することができる(この単純な状況での分散は、比較的簡単な式で表されるので、調べてみよう;また以上の説明がピンとこないなら、Excel擬似乱数を発生させる関数を使い、自分でx, yのデータを作ってa, bを推定してみよう)。

 

この分散とは何だろうか。推定値は1つしかないのに、なぜバラつきがあると考えられるのだろうか。答えを書くと、この分散は、観測誤差に関する上記の仮定のもと、「観測データの生成とそれに基づく最小二乗法によるパラメータa, bの推定」を無限回行ったときに、結果として得られるa, bの推定値のバラつきを表している。誤差項の確率分布について仮定を置くことで、手元にあるデータ自体を「いくらでも繰り返せる試行の中の、ある試行で生成されたデータ」とみなすことができ、同様の試行を無数に考えることができるわけだ。

 

話変わって、セルフキャリブレーション付きのSfMあるいはバンドル調整では、内部パラメータ、外部パラメータ、タイポイントの3次元座標を同時に推定する。推定するパラメータがa, bの2つしかなかった単回帰分析の場合と比べて、モデル式も複雑だ。それでも、タイポイント(元は特徴点)の画素座標(u, v座標)の観測に誤差を認め、それが互いに独立で、1つの正規分布に従うと仮定すれば、単回帰分析の場合と同様に、それぞれのパラメータの推定値について、その推定の分散を推定することができる。最近のMetashapeでは、それらをかなり見ることができる。厳密な話をすると、Metashapeが表示する分散が、誤差について上記の最も単純な仮定を置いた場合の分散なのかどうかは未確認であるが、この記事では、それらの分散のチェック方法をまとめてみる。

 

2. 内部パラメータの分散の確認方法

内部パラメータの分散は、その平方根である標準偏差の数値として、"Camera Calibration"(カメラキャリブレーション)ダイアログから表示できる"Distortion Plot"(歪曲プロット)の"Correlation"(相関関係)タブの、"Error"(誤差)という名前の列で確認できる。

Metashapeの相関関係ダイアログ

Metashapeによる内部パラメータの相関係数行列・標準偏差の表示

列名の表示が"Standard Deviation"(標準偏差)などでなく、"Error"(誤差)となってしまっているため、本当に標準偏差なのか、この画面を見るだけでは確信が持てないが、ユーザーマニュアル(ver. 1.8.4のもので確認)には、これが標準偏差であることが明記されている。

またこのタブには、他の記事でも触れているが、内部パラメータ間の相関係数が行列(相関係数行列)として表示されている。相関係数行列と上記の標準偏差を使えば分散共分散行列が計算できる(2変数の相関係数に両変数の標準偏差を掛ければ共分散になる)ので、内部パラメータについては一応、Metashapeでは分散共分散行列が取得できるとも言える。

 

3. 外部パラメータの分散の確認方法

外部パラメータの分散は、標準偏差の数値として、"Reference pane"(座標データペイン)で確認できる。具体的には、"View Errors"(分散を表示)というボタンを押すことで、カメラの投影中心の座標を表す3列と、回転角を表す3列のそれぞれについて、列名の末尾に"sigma"(シグマ)が付いた列が登場する。"sigma"は標準偏差を表すので、「分散を表示」という訳のボタン名ながら、実際に表示されるのは標準偏差のようである。

外部パラメータの標準偏差を表示

外部パラメータの標準偏差を表示

 

4. タイポイントの分散の確認方法

タイポイントの分散は、アラインメント後のオンデマンドのバンドル調整を行うダイアログ"Optimize Camera Alignment"(カメラアラインメントを最適化)で、"Estimate tie point covaiance"(タイポイントの分散を推定する)にチェックを入れることで、計算できる。

タイポイントの分散を推定

"Estimate tie point covaiance"にチェックを入れてバンドル調整

推定した分散を表示するには、Model(モデル)メニュー -> View Mode(ビューモード) -> Point Cloud Covariance(点群の分散)を選択すればよい。Modelビューにベクトルプロットとして表示される。これはユーザーマニュアルによると、それぞれのタイポイントについて、誤差楕円体 (error ellipsoid) の長軸の方向と長半径(長軸の長さの半分)を示したものである。色も付けられていて、分散が大きいタイポイントは赤く色づけられている。

 

Modelビューで、タイポイントの分散を表示

Modelビューで、タイポイントの分散を表示

 

これは何かというと、上記のような無限回の「試行」をしたとき、タイポイントが最も動きやすい方向とその動きやすさを示したものである。タイポイントの座標にはX, Y, Zの3成分あるので、X, Y, Zそれぞれに分散があるし、X-Y, X-Z, Y-Zそれぞれの間に共分散がある。それらの兼ね合いで、最も動きやすい(バラつきの大きい;不安定な)方向と動きやすさ(バラつきの大きさ;不安定さ)が決まる。このベクトルプロットは、それらの視覚的に示したものである。詳しく学ぶには、まずは2次元の「誤差楕円」について学ぶのがよいと思われる。

 

タイポイントは3次元復元したい被写体上にあるわけだから、タイポイントの分散は、検証点誤差など対空標識が必要な指標を除けば、3Dの成果物の不安定さに関するもっとも直接的な指標になるだろう。例えば、SfMの後にMVSをして密な点群を作るなら、その点群の分散は、SfMによって生じるこのタイポイントの分散に、MVS自体で生じる分散が乗ったようなものになるはずだ。つまりタイポイントの分散は、被写体の3Dモデルの各点の位置のバラつきに直結する。このベクトルが長い領域では、検証点誤差やMVSで作る点群の位置の誤差が、小さくなることは期待できない。このベクトルが対象領域全体にわたって長ければ、それは撮影計画が悪く、内部パラメータの一部の分散が大きい(不定に近い)可能性がある。例えばfが不定に近く、fのみが不安定な状況があったとしたら、鉛直方向の長いベクトルが観察されると予想される。

 

なお、「タイポイントの分散」があれば検証点誤差の評価は要らないかと言えば、次のような理由から、そんなことはない。

  • 分散は誤差のバラつきの指標であって、誤差の平均(バイアス)の評価を含んでいない。非線形モデルについて、最小二乗法による最尤推定量が不偏推定量と言えない限りは、バイアスの評価も必要なので、検証点誤差も必要だ。
  • 分散は、無限回「試行」したときのバラつきを示すものであって、たまたまその1試行である現実が、どのくらいの誤差をもっていたかを示してくれるものではない。タイポイントの分散が小さくとも、運が非常に悪ければ、大きな検証点誤差を生じることもあり得る。