【このテーマの記事は、UAV写真測量について、日々の文献調査や研究で得た、PhotoScanに限らない一般的な情報を掲載していきます。用語の説明は「PhotoScanを極める」に譲ります。】
【プロローグ】
UAV写真測量では数百枚以上の写真を撮ることが多いですが、
全ての画像を鉛直下向きに、つまり同じ向きで撮る「平行撮影」が、いまだ広く行われています。
この撮り方は、DJI GS Proなどの自動飛行アプリのデフォルト設定でもあります。
地理院マニュアル案も、向きの異なる(傾きのある)画像を混ぜましょうとは書いてくれていません。
一般的なセルフキャリブレーション付きSfM(※A)に用いる場合、
この「平行撮影」にドーム状変形などの地形の歪みが起こりやすいという欠点があることや、
傾きのある撮影を少し加えるだけで精度がよくなることは、繰り返し述べてきました。
しかし、実はあまり知られていないもっと基本的な欠点があり、そもそも
「完全に向きが同じ画像のみでは、奥行き方向のスケールを表す内部パラメータfが求まらない」
のです。このことも、こちらの記事や随時更新型マニュアルなどに書いてきましたが、本記事では、
なぜfが求まらないかを図解します。
平行撮影は、仕事に使うにはリスクが大きいということを、感覚的に掴んでいただけたら幸いです。
【前置き1:平行撮影の場合のfの「求まり方」】
さて、画像のみからfが求まらないとなると、SfMがfを求める有効な手がかりは、
- 通常のドローン(例:Phantom 4 Pro)の場合、標定点間の高低差
- 撮影位置高精度測位型ドローン(例:Phantom 4 RTK)の場合、画像間の撮影高度差や、画像と標定点との高低差
となります。
1の場合、撮影高度に対し、標定点間の高低差は通常小さいため、fは正確に推定できません。
2の場合、せっかく撮影位置高精度測位型ドローンを使うのに、複数高度で撮影するか、標定点を置くことが必須となります。
よって、いずれの場合も、画像だけからfが求まるような撮り方をするべきです。
【前置き2:平行撮影でも精度が出ることがあるのは何故?】
しかし現地実験をすると、1の場合でも検証点誤差が小さくなることがあります。
それは、平行撮影を行うように飛行計画を設定しても、実際にはわずかな撮影の向きのぶれが生じ、
全画像が完全に同じ向きにはならないためです。
しかしこの向きのバラつきは、ジンバルなどの性能や、風の状況に影響されると考えられます。
仕事では明らかに、このような把握・制御が難しい要因に頼るべきではありません。
SfMの精度はもともと環境依存なのに、さらに危ない賭けになってしまいます。
【いよいよ図解】
これから下の図を使って、「平行撮影ではfが求まらないこと」を感覚的に理解します。
まずは図の説明です。下図は、
- 画像が3枚だけ:撮影位置がA, B, Cの3点だけ
- タイポイントがS, T, Uの3点だけ
- カメラの歪みや「主点(光軸と撮像面の交点)と画像中心とのずれ」は無視する
という、現実より大幅に単純な状況を描いた模式図になります。
カメラは、投影中心(レンズ中心・光学中心)を頂点とし、撮像面(イメージセンサ面)を底辺とする三角形で表しています。この図は撮像面の中心を通る鉛直断面を描いているため、撮像面が直線に見えますが、実際の撮像面はもちろん、画像と同じ長方形です。カメラを表す三角形の頂角は画角に相当します。歪みや主点ずれがないため、投影中心から撮像面に下ろした垂線(光軸)の撮像面との交点(主点)は撮像面の中心であり、三角形は二等辺三角形になります。この光軸の向きがカメラの向き(撮影の向き)です。ここでは3枚とも、同じ高さから同じ鉛直下向きに撮影しています。
タイポイントとは、複数の画像上に写った特徴点のうち、複数の画像間で対応付けられた、3次元空間の点です(世界座標は未知)。下図の場合、3タイポイントはいずれも、3画像全てに写り、対応付けられています。例えばタイポイントS, T, Uは、投影中心Aの撮像面上で点s, t, uに写っています。撮像面に写った像が画像ですから、撮像面上の点s, t, uの位置は、画像A上に点S, T, Uが写った位置を表します。
投影中心Aからsを通り、Sに至る線は、AからSを見る視線と呼べます。下図では歪みのないカメラを仮定しているので、3点A, s, Sは一直線上にあります。この「現実空間のタイポイント、それが撮像面上に写った点、投影中心が1直線上にあること」を「共線条件」といいます。
下図では視線が3画像×3タイポイント=9本ありますので、共線条件が9つ得られます。
SfMではまず多数のタイポイントを見つけ、それらが生む共線条件(※B)を根拠にして、カメラパラメータ:
- 外部パラメータ:A, B, Cの相対的な位置(撮影位置)、A, B, Cにおけるカメラの相対的な向き
- 内部パラメータ(セルフキャリブレーション付きの場合):f, 画像の中心のずれ、歪みなど
を求めていくわけです。ここではこれを、感覚的に捉えましょう。いま、
「各視線を折り曲げず、
各タイポイントが各撮像面に写った各点の位置(画像Aではs, t, u)を動かさない」
という縛り(=共線条件)のもと、カメラパラメータをどのように動かせるか、
考えてみてください。この縛りのもと動かせないものは、共線条件で求まるものです。
一方、動かせてしまうものは、共線条件では一意に決まらないものです。
図を見て想像するだけでは難しいですので、元のPowerPointファイルもこちらに置いています。
【1907加筆】
下図では簡単のため、共線条件(視線)を3画像×3タイポイント=9本しか描いていませんが、実際のSfMでははるかに多数の共線条件を用います。各画像により多くのタイポイントがある状況を想像してこの問題を考えてください(3点×3画像では、下記以外の動かし方が出来てしまいます)。
いかがでしょうか。
上記の縛りを満たしたまま、この図全体を縦方向に伸縮できてしまう、
ということにお気づきいただければ、大成功です。
例として縦を1.5倍に引き伸ばした図を下に示します。視線は直線のままですし、タイポイントが撮像面に(画像に)写る位置も変わっていません。
では、縦を1.5倍に引き伸ばしたときに、変化したカメラパラメータは何でしょうか?
上下の図で外部パラメータが変わっていないことは明らかです。内部パラメータはfしか考慮していませんが、そのfだけが1.5倍に増えました。
fは画面距離と呼ばれ、図中で、投影中心と撮像面との距離として描かれています。これが上下の図で、1.5倍伸びています。これで、fは平行撮影の共線条件では一意に定まらないことを掴んでいただけたかと思います。
fの変化によって、他に何が変わったでしょうか。タイポイントS, T, Uがカメラから1.5倍遠くなり、S, T, U間の高低差も1.5倍になりました。つまり、SfMで推定される空間の、画像奥行き方向(=下向きの撮影では鉛直方向)のスケールが1.5倍になったのです。これが冒頭でfのことを、奥行き方向のスケールに関する内部パラメータ、と紹介した所以です(※C)。
上下の図で、タイポイントの高低差が1.5倍になったことからわかるように、fは、地形の起伏のスケールに直結する、最重要内部パラメータです。例えばSfMにおいてfを1%過大評価してしまうと、その後のMVSで推定される点群の高低差も1%過大評価することになります。また、点群とカメラの距離も1%大きく評価するため、カメラを基準に世界座標を与える場合(Phantom 4 RTKなどを用い、標定点を用いない場合)には、点群が撮影高度の1%ぶん低い位置に推定されてしまいます。
【クイズ】
本研究室では今春、以上の内容を踏まえて、学生さんに次の3つのクイズに取り組んでもらいました。
(上の図のように、標定点がない場合に)
Q1. タイポイントや画像を増やしても、fは不定だろうか。
Q2. 一部の画像の撮影高度を変えても、fは不定だろうか。
Q3. 一部の画像を傾けて撮影しても、fは不定だろうか。
今は当時と異なり、Phantom 4 RTKも登場していますので、
- 通常のドローン(例:Phantom 4 Pro)の場合:SfMに使える精度で撮影位置が測れない場合
- 撮影位置高精度測位型ドローン(例:Phantom 4 RTK)の場合:SfMに撮影位置情報を使える場合
の2つの場合について考えていただければと思います。図のPowerPointファイルはこちらです。
クイズの答えは、本ページの末尾にあります。
【注釈】
※A
「セルフキャリブレーション付き」とは、画像や標定点のデータから、カメラの撮影位置・向きだけでなく、
内部パラメータ(カメラの幾何学特性を表すパラメータ;奥行き方向のスケール、中心のずれ、歪みなど)まで求めることを表します。飛行前後にカメラキャリブレーションによって内部パラメータを求めた場合も、その結果は固定的に用いず、調整の初期値とするだけです。
セルフキャリブレーション付きSfMは、地理院マニュアル案第3編でも標準とされている、3次元点群作成では一般的な方法です。私自身も
ため、セルフキャリブレーション付きSfMを前提として研究しています。
※B
今回の図と違い、現実のSfMではレンズの歪みや、主点と画像中心とのずれなども考慮しますが、その場合でも共線条件を使う(それらを推定・補正ながら共線条件を使う)ことに変わりはありません。
※C
より正確に言えば、fは「画像の上下左右方向に対する」奥行き方向のスケールの比を決めるパラメータです。画角(図でカメラを表す三角形の頂角)を決めるパラメータとも言えます。ただ、UAV写真測量の対象領域は多くの場合、水平スケール>鉛直スケールであるため、水平方向のスケールは標定点や撮影位置の高精度測位によって正確に得られやすいものです。これを前提とするか、もしくは撮像面のサイズは既知で固定と考えれば、「奥行き方向のスケールの比を決めるパラメータ」という表現でも問題ないと思います。
【クイズの答え】
1. 通常のドローン(例:Phantom 4 Pro)の場合:SfMに使える精度で撮影位置が測れない場合
A1. タイポイントや画像を増やしても、fは不定です。
A2. 一部の画像の撮影高度を変えても、fは不定です。
A3. 一部の画像を傾けて撮影すれば、fの解は1つに決まります。
2. 撮影位置高精度測位型ドローン(例:Phantom 4 RTK)の場合:SfMに撮影位置情報を使える場合
A1. タイポイントや画像を増やしても、fは不定です。
A2. 一部の画像の撮影高度を変えれば、fの解は1つに決まります。
A3. 一部の画像を傾けて撮影すれば、fの解は1つに決まります。
2の場合、高度か傾き(天底角)のどちらかを複数化して撮れば十分に見えるかもしれませんが、以上はあくまでfの解が一意に定まるかという話であって、精度については論じていません。
現実には、fやK1などの歪みパラメータなどを高精度に同時推定する必要がありますので、
1, 2どちらの場合でも、複数の高度から、斜め撮影を混ぜて撮ることが推奨されます。
【おまけ:実例】
先日河川で、Phantom 4 RTKを使い、標定点を用いないUAV写真測量の現地実験を行いました。
論文投稿中のため詳細は書けませんが、単一高度から撮った画像だけでSfMをすると、傾いた画像が半数も入っていたにもかかわらず、地表面全体が何十 cmも浮き上がって推定されてしまいました。例えば高度100 mから撮ると、fを0.5%過小評価するだけで、地表面の点群が50 cmも浮き上がってしまう理屈になります。
今回は幸い、学生さんの機転で、保険として別の高度からも撮っていたので、その画像を混ぜることで、まともな結果を得ることができました。
まあ今回は、水面と背の高い植生がたっぷりある河道で、風もある、というハードモードであったためかもしれませんが、上記2の場合でも、つまり撮影位置の高精度測位が可能な場合でも、
撮影の高度・傾き(天底角)の「両方」を複数化しないと、大失敗しうる、
と学んだ次第です。
昨秋の写真測量学会のスライドp. 18では、まさにの撮り方を提案したわけですが、ハードモードの場合、この絵よりももっと、斜め撮影や低高度撮影を充実させたイメージが良いと思います。