時事随想

時事随想

ニュースや新聞を見て、想ったことを綴った随想・論説集

写真からの航空機の飛行高度推定(2)Googleマップを使って、計算なしに距離を推定する

 iPhoneで撮影した写真から航空機の飛行高度推定を行う方法について、以前の記事で説明しました。

 この記事には、次の問題があります。

  • 計算式がたくさんあって難しいこと(笑)
  • カメラパラメータ(焦点距離)を較正せず、Exifデータの値を用いていること。
  • カメラモデルとして単純なピンホールカメラを仮定していること。

 実は、この3つの問題は、Googleマップを使えば解決できます。さらに、計算式もほとんどありません。

1. 距離測定の原理

 距離測定の原理は、視角と対象物の大きさが分かれば、距離が分かる、というものです。基本的に三角測量と同じです。

 これを実現するためには、まず、カメラの画素数と視野角の関係を決める必要があります。このために、カメラモデルを導入し、焦点距離・レンズ歪・光軸中心・撮像面と光軸との傾きなどのカメラパラメータを求めます。カメラモデルとして、最も単純なカメラパラメータを用いると、カメラパラメータの推定は、焦点距離のみとなり、問題が単純化されます。

 さて、カメラパラメータを求めてから、距離推定を行うと、汎用性はありますが、ある程度、専門知識が必要となります。

 本稿では、そのような専門知識がなくても、比較的正確に対象物までの距離を測定する方法について説明します。

2. Googleマップを用いて、距離を求める

 計算式も何も用いずに、距離を求める方法としては、全く同じ大きさの実物の被写体を、画像上で同じように映るように置き、そこまでの距離を物差し(測距器)で測ることです。

 しかし、この方法は、被写体が航空機となると、現実的ではありません。そこで、本稿で示す方法では、ランドマーク写真(風景写真)とGoogleマップ(物差し)を使って距離を測ります。

 計測は、図1の流れに沿って、行います。

f:id:toranosuke_blog:20180711213628p:plain
図1. Googleマップを用いた距離推定


① ランドマーク写真を撮影する。

 まず、ランドマーク写真を撮影します。 ランドマーク写真に写っている建物など目印は、Googleマップ上でも同定できなければなりません。

 撮影地点と目印の高度が同じならば、Googleマップ上の水平距離が目印までの距離となります。今回、用いたランドマーク写真の目印と撮影地点の高さは、最大で2~3m程度違いますが、目印までの距離が数百メートル先にあるので、1~2%程度の誤差要因となりますが、わずかな誤差として、補正しません(それに、補正するためには、計算式が必要となるので、計算いらずのコンセプトから外れる)。

 また、画素のアスペクト比が異なる場合、飛行機の向き(端から端までの直線)とカメラの向きが一致するように撮影をすることが望ましいですが、通常のカメラであればアスペクト比は1ですので、あまり気にする必要はありません。今回も、画像の回転については特に考慮に入れていません。

 正確さを求めるのであれば、画像上の飛行機と同じ位置で目印を見つけることが望ましいです(あるいは、撮影時にあらかじめ目印が一致するように撮影する)。特に広角レンズで画像の周辺部分に対象物を映してしまった場合には、気にした方がよいでしょう。これは周辺部分ではレンズ歪が大きくなるためです。もっとも、標準レンズで航空機をおよそ中心に対象物を捉えている場合には、神経質になる必要はないと思います。それは、標準レンズのレンズ歪で生じる誤差よりも、他の要素で生じる誤差の方がはるかに大きいと考えられるためです(後述)。

② 画像上で目印となる点を見つける。

 航空機の画像上の長さと同じ長さとなる二つの目印を見つけます。今回は、図1に示すように目分量で合わせていますが、画素数を計測しながら合わせると、より正確に合わせることができると思います。

③ Googleマップを使って、撮影地点と目印となる2点をそれぞれ直線で結ぶ。

 ②で決めた目印をGoogleマップ上で見つけ、撮影地点と目印とを直線で結びます。

 二つの直線が成す角度が対象物の視角となりますので、対象物の画像上の画素数と視角の対応関係が分かります。この対応関係を求めることで、カメラキャリブレーションができます(つまり、ピンホールカメラモデルでの焦点距離を求めることができます)

④ Googleマップ上で、視角の直線と 航空機を底辺とした二等辺三角形を作る。

 Googleマップ上で、航空機に見立てた直線を底辺、視角の二つの直線を等辺とする二等辺三角形を作ります。例えば、C130の幅であれば40mの長さの直線を、航空機と見立てて、それを底辺とし、③で得られた二つの直線を等辺とする二等辺三角形を作るように航空機の直線を配置します。

 航空機が視線に対して垂直であるという前提条件をおいて、二等辺三角形としていますが、実際には傾きがあり、斜めです。斜めであることを考慮する場合は、航空機が斜めとなっているのに対応するように、直線を斜めに配置します。このとき、撮影地点からの距離は小さくなります。ちょっとの傾きの違いで数十メートル移動します(今回の撮影条件の場合)。これが誤差を与える大きな要因の一つとなります。

⑤ Googleマップで撮影地点から底辺までの距離を求める。

 Googleマップで撮影地点から底辺までの距離を求めます。この距離が撮影地点から航空機までの距離となります。

誤差

 実際にやってみるとわかりますが、誤差の大きな要因は、目視で画像間の対応関係を求めている点です。

  • 航空機の端点(航空機画像)→目印(ランドマーク写真)→目印(Googleマップ)→実寸(Googleマップ)

 このそれぞれの対応をとる際に、目分量でやっているので、誤差が大きくなります(例えば、10m程度の誤差はすぐにでます)。

 この誤差の大きさを考えると、レンズ歪や撮影地点の高度、カメラモデルなどに起因する誤差は無視してよい範囲と思います。③までの作業は、カメラキャリブレーションの際に必要となる作業と同じ作業で、必要なステップですが、それ以降は、計算によって求められるので、高い精度を求めるならば、④以降は計算によって求める方がよいでしょう。

3. 航空機画像を用いた実測

 以前の記事で用いた3枚の画像のうちの一つを用いて、本稿の方法で計測処理を行いました。基本的な流れは、同じですが、航空機の幅方向と長さ方向の両方を用いて、距離を推定しています。画像上での全幅と全長がほぼ同じだったので、二つの長さは同じとして取り扱っています(実際には、全長方向は若干短い)。

2.1 航空機の写真画像

 概ね真上を飛行するC130をiPhone5sで撮影した。概ね、真上といっても、本当の真上ではなく、天頂からの角度が10~30°程度はあったと思います。

f:id:toranosuke_blog:20180711212827j:plain
 図2. C130をiPhone5sで撮影。

2.2 ランドマーク画像①を用いた推定結果

f:id:toranosuke_blog:20180711213821p:plain
中央がランドマーク画像。幅・長さ方向が水平線と平行となるように航空機画像を回転します。航空機の端と対応する適当な建物などを目印として決めます。
f:id:toranosuke_blog:20180711213848p:plain
(上)撮影地点と目印を直線で結びます。(下)航空機の全長・全幅の長さの直線をおいて、二等辺三角形を作ります。緑線が全長、黄色線が全幅に対応します。そして、Googleマップで撮影地点から底辺中央までの距離を計測します。


航空機までの距離:
 386m(長さ方向からの推定)、519m(幅方向からの推定)。

2.3 ランドマーク画像②を用いた推定結果

f:id:toranosuke_blog:20180711214921p:plain
f:id:toranosuke_blog:20180711214944p:plain


航空機までの距離:
 370m(長さ方向からの推定)、497m(幅方向からの推定)。

2.4 ランドマーク画像③を用いた推定結果

f:id:toranosuke_blog:20180711215257p:plain
f:id:toranosuke_blog:20180711215317p:plain


航空機までの距離:
 372m(長さ方向からの推定)、491m(幅方向からの推定)。

2.5 推定結果のまとめ

 ここまでで、求めたものは、カメラから航空機までの距離dです。真上にあれば、そのまま距離dを高度Hとして構いません。しかし、この写真を撮影したとき、完全に真上を通っていたわけではありませんでした。この場合は、天頂からの角度\alphaに応じて、距離dを高度Hに補正する必要があります。補正式は、 H=d\cos\alphaです。以前の記事では、\cos\alpha=0.92として計算しましたので、今回も同じ値を用いて計算します(計算なしのつもりでしたが、ちょっとだけ計算が残ってしまいました:-p)。

 距離から高度に補正した結果もまとめて、以下の推定結果となります。

長さから推定幅から推定
距離 高度 前回距離 高度 前回
写真①386m355m392m519m471m483m
写真②370m340m 497m457m
写真③372m342m 491m451m

 機体の長さについては、若干大きめで推定している(5%ぐらい)ので、それを考慮すると、高度は少なくとも20mぐらいは高くなると思います。

 また、長さ・幅ともに斜めに機体が写っていますので、推定した高度よりも若干距離が小さくなります(おそらく1~2割ぐらいは高度は低くなる(但し、直感計算)。また、距離の推定結果からすると、幅の方が長さよりも傾いている。全長30m、全幅40mが同じぐらいの長さで写っていることからも、これは明らか)。これらを考慮すると、飛行高度は、350m~400m程度と推定できる。

 前回の記事の方法の推定値は、392m~483mで、今回の結果は1割強、高度が低く見積もられています。基本的には、カメラキャリブレーションに対応することを行っている今回の方法の方が、より正確な推定を得られる方法と思います。

 但し、画像の間の対応を取る際に、誤差が入り込むので、その操作をできるだけなくした方がよいです。このため、カメラキャリブレーションを一旦行ってから、その後は、計算して求める方がより高い精度が得られるでしょう。

3. まとめ

 今回は、Googleマップを用いて、航空機の高度を推定する方法について説明しました。この方法であれば、多少面倒ではありますが、測量の知識がなくても、航空機の高度を推定することができます。

 最近、我が家の上空でオスプレイが低空飛行していました。ほかの地域でもオスプレイが低空飛行しているようです。もし、低空飛行していたら、写真撮影して、飛行高度を推定してみてはいかがでしょうか?あまりにも低空であれば、自治体に相談した方が良いかもしれませんね。

(2018/7/11)

関連記事

  • 写真からの航空機の飛行高度推定 - 時事随想
  • 関連のtwitter投稿
Copyright © Tenyu Toranosuke. 時事随想 All Rights Rreserved.