本記事では、前記事:バンドル調整でパラメータの不定性を確認するにはどうするか を踏まえ、前記事で第2の検証方法として挙げた「2. 最適化を実施したときの目的関数値が、θiを誤った値に固定した場合とθiを正しい値に固定した場合で、有意に変わらないかを調べる。」を実演したい。
具体的には、CG空間上で、完全な水平面を、理想的なピンホールカメラを鉛直下向きに向けて撮影した画像セットをMetashapeで解析して、この「平行光軸撮影で、光軸に直交する平面状の被写体を撮ること」が、内部パラメータの一部にとってCritical Configurationであるかどうか(不定になるかどうか)を、調べてみる。不定性を調べる内部パラメータとしては、次の2つをとりあげる。
-
平行光軸撮影では被写体によらず不定になることがわかっている、焦点距離f
-
平行光軸撮影では推定精度が悪いことは知られているが一般には完全に不定ではなく、このconfigurationで(=光軸と直交する平面を撮った場合に)完全に不定かどうかは不明な、放射方向歪みのパラメータK1
①準備
使用するCG画像はこんな感じだ。対空標識も写っているが、平面上にあり、飛び出してはいない。6年ほど前のCGシミュレーションに使った画像を利用している。
まず、内部パラメータに真値を与え、固定してしまう。理想的なピンホールカメラで撮影(レンダリング)しているので、f以外のパラメータは0だ。
そしてアラインメントをする。言い遅れたが撮影位置は、このように3×5のグリッド状に配置されている。
アラインメント後に一応、ダメ押しのバンドル調整「カメラアラインメントを最適化」をする。
その後、再投影誤差RMSをチェックする。撮影位置・向きの情報も、標定点も使っていないバンドル調整なので、目的関数は再投影誤差RMSだ。最小化されているのは、括弧の外にある無次元の値のはずで、今回は0.0112334だ。これが、fもK1も正しい場合の目的関数値として、ベンチマークになる。
②焦点距離fの不定性の検証
準備ができたので、fの不定性の確認に進もう。焦点距離fを固定したまま、値を誤った値1234に変更する。
このとき、再投影誤差RMSは大きくなるが、当然だから気にしない。fを固定したまま、バンドル調整を行う。
バンドル調整後に、目的関数(再投影誤差RMS)をチェックすると、0.0112335となっていて、fが真値の場合の0.0112334とほとんど変わらない。0.0000001だけ大きいのが気になるが、実はMetashapeでは通常のアラインメント直後の「カメラアラインメント最適化」でも最後の桁が増えることはよくあるので、意味のない差と思われる。さらに、今度はfの値を別の誤った値123, 2345, 3456に固定してバンドル調整すると、いずれの場合もぴったり0.0112334になった。
つまり、fが誤っていても、他のパラメータ(今回の場合、f以外の内部パラメータは全て固定されているので、外部パラメータしかないが)がそれに連動して誤る(fの誤りをカバーしようとする、と言えるかもしれない)ことで、目的関数の増加を防げたということだ。これがまさに、上で言うところのfの不定性を示している。
③K1の不定性の検証
次にK1の不定性を調べるため、fに真値2000を入れてバンドル調整をやり直し、②の開始時の状態(①の終了時の状態)に戻す。その後、K1に謝った値-0.05を入れて、
すべての内部パラメータを固定したまま、バンドル調整を実施する。
モデルビューで、点群とカメラの配置双方に、ボウル状の変形が確認できる。K1が誤った値に固定されている条件で目的関数を小さくするため、外部パラメータが連動して誤った(K1の誤りをカバーしようとして誤った)ためだ。
しかし興味があるのは、目的関数である再投影誤差RMSだ。今回は0.110368と、K1が真値の場合の値0.0112334より増えている。K1を+0.05にすると0.0798123, -0.1にすると0.542339、-0.01にすると0.0118658と、K1の値によって差は異なるが、真値の場合と比べて一貫して増えている。
これは、K1はfと異なって、不定ではないことを示している。つまり今回のconfiguration(撮り方と被写体の組み合わせ)は、fにとってはcriticalであるが、K1にとってはcriticalではない。
④余談:方法1
ちなみに、再び①の終了時の状態に戻して、K1の固定を外してバンドル調整を実施し、
「歪曲プロット」のダイアログで、K1の推定値に加えて「誤差」(おそらく標準偏差の推定値)が確認できる。この値0.00779871が、真値(今回は0だが)や推定値-5.1518e-05に対してかなり大きいことから、K1は不定ではないにしろ、やはりよく言われている通り、平行光軸撮影ではK1の 推定のバラつきが大きいこと確認できる。なお「誤差」欄の値が本当に、分散共分散行列などから求めた推定値の標準偏差ならば、その確認は前記事の検証方法1「最適解における分散共分散行列において、θiの分散が非常に大きいかを調べる。」に相当する。