【実施例1】
【0020】
図2により、本発明の第1の実施形態について説明する。
図2は、本発明の実施形態1に係る位置情報保存システムの処理フロー図である。本実施形態では、広域画像上における精細画像を取得したカメラの相対位置関係を把握するため、時間的に連続する複数の精細画像間での特徴点マッチングを行う(S201)。これら複数の精細画像は、短時間間隔で撮影されたものとし、その時間内では撮影対象は実質的に移動していないものとする。
【0021】
図3により、特徴点マッチングの概念を説明する。マッチングとは、2枚の画像に映る同一点を結び付ける作業のことである。まず、カメラで取得した精細画像300の特徴点301を取得する(
図3(a))。
【0022】
特徴点301は、他の点と区別が容易な画像上の点のことであり、画素情報の勾配情報を特徴点の特徴量として表現することができる。特徴量の例として、公知のSIFT,SURF,ORB,AKAZE等がある。ただし、カメラの位置が変わらず、画像がほとんど変化しない場合は、当該画像から特徴点を取得しなくても良い。特徴点を取得するかの判断に関しては、多くの研究が行われているので詳細を省く。
【0023】
次に、取得した特徴点のマッチングを行う。特徴点マッチングとは、2つの精細画像300aと300bから同一地点を表す点を紐付けることである(
図3(b))。比較した特徴点の特徴量が似た値を示している場合に、2つの特徴点301aと301bが同一点を表現していると判断する。当該マッチングの精度を高めるため、幾何的制約等を使用することで、誤ったマッチングを消去しても良い。誤ったマッチングを消去する手段に関しては、後に説明する。
【0024】
次に特徴点マッチングの結果を用いて、初期の精細画像より生成された三次元点群の相対位置と、カメラの相対位置と、カメラの向きとを、推定する(S202)。三次元点群とは、当該画像上の点に対して三次元上の座標を与えたものである。カメラ相対位置と向きは、当該画像を撮影したときの、カメラの位置と向きのことである。
【0025】
図4に示すように、特徴点マッチングの結果に基づいて、三角測量を利用することで、初期三次元点群401の相対位置とカメラの相対位置402と向き403を推定することができる。このような処理は、前述のVisual SLAMにより行うことができる。
【0026】
ただし、三角測量を用いた当該処理は、カメラパラメータが既知であることを前提に行われている。カメラパラメータとは、画像のピクセルの数、センサのサイズ、焦点距離、レンズの歪み等を表現したパラメータである。しかし、実際は事前にカメラパラメータが不明である、もしくは、推定されていたとしても誤差が含まれていることがある。カメラパラメータが正確に把握できない状況でも、特徴点マッチングのマッチング結果によりカメラパラメータを推定することができるので、必ずしも事前にカメラパラメータを推定する必要は無い。
【0027】
次に広域画像と精細画像の特徴点マッチングを行う(S203)。まず、撮影した高度の異なる広域画像と精細画像の特徴点マッチングについて説明する。特徴点マッチングでは、精細画像同士のマッチングで述べたように、画素の勾配情報に基づいた特徴量の類似度で2つの点が同一の箇所を示しているかを判断する。この類似度に基づいたマッチングでは、誤対応点が多く含まれている。そこで、背後にある拘束式を推定し、正しい特徴点マッチング精度を実施するため、公知のRANSAC(RANdom Sample Consensus)と呼ばれるアルゴリズムを用いる。これにより同一地点を適切に対応付けているマッチングを抽出する。
【0028】
RANSACでは、外れ値を含んだデータから、確率的に背後に存在する拘束を推定し、その拘束に基づいて、マッチングが正しいか判断する。しかし、高度の異なる画像では、誤対応の割合の多さから、背後に存在する拘束条件を推定できず、うまく特徴点マッチングできない。
【0029】
図5を用いて、精細画像と広域画像の特徴点マッチングの方法を説明する。一例であるが、
図5は精細画像の大きさを変えて、回転した画像を広域画像に対応付けるという拘束を用いて、正しいマッチングを取得しようとしている。
【0030】
図5(a)を見ると、広域画像500は精細画像300を撮影した箇所より、高いところで撮影した結果、撮影対象物は精細画像300を小さくし、回転したように写っている。しかし、大量の誤ったマッチングがある結果、マッチング結果だけを見ても、サイズをどれだけ変化させて、回転させたか推定することは難しい。
【0031】
図5(b)は、広域画像500において、マッチング対象とする特徴点5001がある領域を510に限定して、特徴点マッチングを行なった例である。このように、精細画像300の広域画像500における場所に基づいて、明らかなマッチング誤りを除去すると、大きさと回転の変化の推定が容易となる。すると、背後の拘束が推定できた結果、
図5(c)のように誤マッチングを除去することができる。
【0032】
本実施形態ではRANSACを実行する前に、広域画像500における撮影範囲外の特徴点5001xが含まれているマッチングを除去する。大量の誤マッチングを除去することで、正しく背後に存在する拘束条件を推定し、結果的に正しいマッチング結果を取得することができた。以下に具体的な手順について説明する。
【0033】
まず、広域画像データベース(DBと略す。以下同様)より事前に撮影した広域画像500を取得する。ただし、当該広域画像500は精細画像300を撮影する前に撮影し、そのまま精細画像300の撮影を開始しても良い。次に、当該広域画像500の特徴点5001を取得し、特徴点DBに格納する。ただし、当該広域画像500の特徴点5001の取得は、広域画像500が事前に撮影されている場合には、事前に行い特徴点DBに格納しても良い。
【0034】
マッチングする広域画像500の領域510は、事前に広域画像DBに初期三次元点群領域として格納し、当該領域に基づいてマッチング領域を限定する。初期三次元点領域の座標は、例えば精細画像の撮影スタート位置の座標とする。この座標は、精細画像の撮影時にGPS等で記録したカメラの座標を用いる、あるいは、カメラの方向の情報を併用してもよい。これらの情報によれば、カメラが撮影した場所をおおよそ特定することができる。この場合、精密な座標は必要でない。また、カメラの座標が記録されていない場合には、処理S202で推定したカメラ位置の座標を用いてもよい。
【0035】
領域の範囲は、当該座標を中心に所定半径の円内や所定の辺の長さを持つ四角形のように定める。他の方法としては、広域画像500から初期三次元点群領域を確認できるように、事前に撮影対象の移動が想定される領域に初期三次元点群領域を示す目印を置き、目印を撮影することで、当該限定領域を事前に格納せずに実施することも考えられる。
【0036】
また、他の方法として、マッチングの前にオペレータに広域画像を表示し、オペレータが範囲を指定してもよい。これらの領域限定により、誤ったマッチングを除去する。
【0037】
次にRANSACを用いたマッチングを行う。拘束として考えられるのは、例えば、同一平面に存在する点を撮影した2枚の画像における同一地点の画像上の拘束条件である平面拘束が考えられる。また、エピポーラ拘束を用いても良い。当該広域画像500と当該精細画像300のマッチング結果から推定された平面拘束を満たす、マッチングのみを正しいマッチングとして処理する。
【0038】
広域画像の特徴点5001とマッチングした精細画像の特徴点301が存在した場合、当該特徴点301の三次元点群401は広域画像上の点との対応が確認できる。ただし、当該精細画像のみでの三次元点群の推定では、当該三次元点群401がゆがんでしまう場合がある。そこで、三次元点群とカメラ位置の補正をして広域画像と精細画像の特徴点の記録を行う(処理S204)。以下三次元点群とカメラ位置を補正する方法について説明する。
【0039】
図6で、三次元点群のゆがみとこの修正について説明する。広域画像500と精細画像300のマッチングした特徴点のうち、三角測量で3次元座標が計算されているものを抽出する。この広域画像500における特徴点の対応をもとに、三次元点群及び精細画像のカメラ位置を修正する。
【0040】
まず、広域画像上で特定されている三次元点群401の位置情報から広域画像を撮影した場所を推定する。推定した結果から広域画像と精細画像の投影誤差の和が最小になるようにカメラ位置402と三次元点群401の位置を図中太矢印のように調整することで相対自己位置を修正する。301で示す点が画像上で特徴点が存在していた箇所であり、402と401で示す点はカメラと三次元点群の相対位置である。
【0041】
推定した広域画像を撮影した場所は誤差を含んでおり、カメラ位置と三次元点群の相対位置から推定される画像上の座標は、実際の画像上の座標とは一致しない。このカメラ位置と三次元点群を結んだ直線が精細画像300上のどこに存在するかを推定する作業を再投影という。再投影される場所は、カメラ位置と、カメラの向き、カメラパラメータ、三次元点群の相対位置により、計算することができる。この再投影した点6002と実際の画像に映っている点6001の画像上での誤差を投影誤差6003という。そして、この投影誤差を最小化するようにカメラ位置と三次元点群位置を補正することで、推定誤差を削減する。最小化する手段として、例えば、非線形最適化手法であるバンドル調整を使用する。
【0042】
以上で、初期精細画像に基づいて得られた初期三次元点群の特徴点と広域画像の特徴点とが対応付けられた。広域画像上に座標軸を定義しておけば、初期三次元点群の特徴点を広域画像上の座標で表わすことができる。本実施例では、精細画像は例えば、ある一つの点検のタイミングにおいて、UAVが撮影対象の周りを飛行しながら撮影した複数の静止画像であり、初期精細画像は例えば、その中から選ばれた2つの静止画像である。撮影時にリアルタイムで処理を行っている場合には、2つの静止画像は撮影スタート直後の2枚の精細画像である。以下ではリアルタイム処理を例に説明するが、画像をいったん保存しておき、後にバッチ処理を行うことも可能である。
【0043】
次に、UAVはスタート地点から移動して行く。UAVは移動しながら新たな精細画像を撮影する。追加された新規精細画像と直前の精細画像とで特徴点マッチングを行う(処理S205)。特徴点マッチングした特徴点のうち、三次元点群として位置情報が付加された点が存在した場合、当該三次元点群の位置情報をもとに、当該追加精細画像のカメラ位置を推定する(処理S206)。ただし、カメラ位置を推定した後に、投影誤差を用いて補正する処理を行っても良い。2つの精細画像間で同じ位置情報が付加された特徴点を共有するためには、撮影範囲が一部重複するように2つの精細画像を撮影すればよい。
【0044】
続いて、三次元点群の追加を行う(処理S207)。特徴点マッチング(処理S205)の結果抽出された特徴点のうち、相対位置情報が付加されていない特徴点を抽出する。当該位置情報が付加されていない特徴点については、処理S202と同様に三角測量を用いることで、相対位置情報を付加する。当該処理を終えた後も、処理S204と同様に投影誤差を用いて補正する処理を行っても良い。相対位置情報を付加した特徴点は、三次元点群に追加する。
【0045】
続いて、広域画像と新規精細画像の特徴点マッチングを行う(処理S208〜S209)。スタート地点では、特徴点マッチングを成功させるために、既知情報もしくは目印を用いることで、マッチングする領域を決定した(処理S203)。新規精細画像と広域画像とのマッチングの領域は処理S203と同様に決定してもよいが、新規精細画像のカメラ位置とカメラパラメータで決定してもよい(処理S208)。すなわち、処理S206で当該精細画像のカメラ位置が推定されているので、倍率などのカメラパラメータに基づいて、広域画像中の精細画像位置を推定することができる。
【0046】
特徴点マッチングを行った後、必要により処理S204と同様に投影誤差を用いて補正する処理を行い、三次元点群とカメラ位置の補正をして広域画像と精細画像の特徴点の記録を行う(処理S210)。
【0047】
以後、処理S205〜処理S210のプロセスを繰り返すことによって、絶対位置情報が分からない状態であっても、逐次的に領域を限定した特徴点マッチングを行うことにより、GPS等による絶対位置情報を取得できない状況下でも、広域画像と精細画像の位置情報の対応を取り続けることができる。
【0048】
点検の結果のデータを点検対象物の位置情報とともに記録する方法について述べる。処理S205〜処理S210のプロセスでは、カメラ位置とカメラによって撮影された特徴点の三次元点群の相対位置情報を記録したに過ぎない。本実施例の目的とする点検の自動化のプロセスでは、点検対象物の相対位置情報と当該点検対象物の状態を反映したセンサデータを関連付けて記録する必要がある。
【0049】
一つの例では、記録する点検対象物の相対位置情報は、点検に使用するセンサに依存して決定することができる。温度や特定物質を検知するセンサのように、センサの位置と測定対象の位置が一致するセンサを使用する場合は、位置情報として当該センサ位置を記録すればよい。また、カメラやスペクトルカメラや熱赤外線カメラのような、センサがセンサとは離れた位置の情報を取得する場合であって、センサデータが二次元の画像として表現される場合は、センサ(カメラ)の向きによって、記録される位置情報が異なる。センサが位置情報を記録するためのカメラと同じ向きの場合は、当該カメラで取得した三次元点群の相対位置を記録すればよい。向きが異なる場合は、センサが取得しているデータが三次元座標上のどこに対応するかを把握する必要がある。このためには、センサ自体の位置とセンサの向きや感度等のセンサパラメータに基づいて、センサデータを取得している点検対象物の位置を把握することで、位置を決定することができる。また、センサに距離センサを併設することで、点検対象との距離を把握することができる。また、存在する平面を仮定することで限定することもできる。
【0050】
図7を用いて、
図2の手順を実施するための機能ブロックについて説明する。本実施形態の位置情報記録装置700は、カメラ14001と、精細画像DB14002と、特徴点DB403と、マッチングDB404と、三次元点群DB405と、カメラDB406と、広域画像DB407と、広域画像座標位置DB408と、センサDB409と、精細画像処理部410と、位置情報記録部413と、結果出力部417を有する。
【0051】
このような機能ブロックは、基本的に入力装置、出力装置、記憶装置、処理装置を備える一般的なサーバで構成することができる。本実施例では計算や制御等の機能は、記憶装置に格納されたプログラムが処理装置によって実行されることで、定められた処理を他のハードウェアと協働して実現されるものとする。サーバが実行するプログラム、その機能、あるいはその機能を実現する手段を、「部」、「機能」、「手段」、「ユニット」、「モジュール」等と呼び、処理の主語として記述する場合がある。また、以後の説明では記憶装置に格納されたデータを、「〜テーブル」、「〜リスト」、「〜DB」、「〜キュー」、「情報」等の表現で説明することがあるが、これらは等価な情報である限り、データ形式を問わない。
【0052】
また、以上の構成は、単体のサーバで構成してもよいし、あるいは、入力装置、出力装置、処理装置、記憶装置の任意の部分が、ネットワークで接続された他のコンピュータで構成されてもよい。また、
図7の構成では説明上カメラ14001を装置に含めているが、カメラ14001は別途UAVに搭載し、遠隔地から無線回線等により画像データを位置情報記録装置700に送信するように構成することができる。
【0053】
位置情報記録装置700は、1または複数のカメラ14001によって、位置情報を取得するための精細画像もしくは動画を取得し、撮影した画像を精細画像DB14002へ保存する。
【0054】
図8は精細画像DB14002のインデックスのデータ構造を示す一例である。精細画像は、例えば取得した順番がわかるように撮影した順番に精細画像ID801をつける。もしくは、撮影時刻を保存しても良い。カメラを使った場合は、撮影した当該カメラのカメラID804を保存する。また、撮影時のカメラ位置802、カメラ向き803などの撮影条件が分かっている場合にはこれらを保存してもよい。カメラ位置は例えばGPSによって取得できる。ただし、これらが分かっていない場合でも、カメラ位置802やカメラ向き803は、前述のように推定して保存することもできる。また、カメラID804に対応して、別途ピクセル数や焦点距離など、カメラの性能パラメータを格納してもよい。
【0055】
図9は、精細画像同士の特徴点マッチング部411の機能ブロック図である。本実施例では、各機能ブロックはソフトウェアで実現することにしている。保存された精細画像は、精細画像同士の特徴点マッチング部411により、精細画像同士の特徴点マッチングを行う。精細画像同士の特徴点マッチング部は、画像特徴点検出部501と、画像特徴点特徴量比較部502と、画像特徴点特徴量計算部503と、特徴点マッチングRANSAC部504を有する。
【0056】
図10は特徴点DB403のデータ構造を示す一例である。画像特徴点検出部501では、精細画像DB14002より精細画像を取得し、精細画像上の特徴点を検出し、精細画像ID1001と特徴点ID1004を割り当て、特徴点の二次元座標1002とともに特徴点DB403に保存する。画像特徴点特徴量計算部503で、精細画像と特徴点の二次元座標1002を用いて、特徴点の特徴量1003を計算し、特徴点DB403に保存する。
【0057】
画像特徴点特徴量比較部502で、特徴点DB403の特徴量1003が近い特徴点の組み合わせを特徴点マッチングとして、マッチングDB404に格納する。
【0058】
図11はマッチングDB404のデータ構造を示す一例である。マッチングDB404では、マッチングID1101に対応して、複数枚の精細画像の精細画像ID1102(1101)と、当該精細画像IDの精細画像中でマッチングした特徴点の特徴点ID1103(1004)が保存されている。
図11の1行目の例では、画像ID「2」の特徴点ID「6」の点が、画像ID「3」の特徴点ID「39」の点とマッチングしていることを示す。
【0059】
特徴点マッチングRANSAC部504では、2枚の画像の背後にある拘束条件を推定し、マッチングDB404から誤ったマッチングを除去する。
【0060】
図12にSfM部412を示す。SfM部412により、三次元点群と、カメラ相対位置、カメラ向き等を推定する。
【0061】
初期三次元点群生成部601にて、特徴点DB403とマッチングDB404に基づいて、マッチングする特徴点の二次元座標を得、
図4で説明したように、二次元座標と精細画像から初期三次元点群座標を得ることができる。初期三次元点群座標は、三次元点群DB405に格納する。また、カメラDB406のカメラパラメータと、精細画像DB14002のカメラ位置等を推定することができ、それぞれ、カメラパラメータはカメラDB406に格納し、カメラ位置等は精細画像DB14002にカメラ位置802、カメラ向き803のように格納する。
【0062】
図13はカメラDB406のデータ構造を示す一例である。カメラID1301に対して、ピクセル数1302、焦点距離1301、センササイズ1304、歪み係数1305のようなカメラパラメータが格納される。これらは事前に格納できる場合は事前に格納しておいてもよいし、精細画像から推定した値でもよい。
【0063】
図14は三次元点群DB405のデータ構造を示す一例である。初期三次元点群生成部601で生成された三次元点群の各点は一意のIDである三次元点群ID1401を付与され、三次元点群ID1401は、当該三次元点群の元となる精細画像の精細画像ID1402と、当該精細画像中において三次元点群を構成する特徴点の特徴点ID1403とともに格納される。また、三次元点群の相対位置1404が格納される。三次元点群の相対位置1404は、例えば三次元点群に対して任意に設定された原点(0,0,0)に対する、相対位置座標を示す。
図14の例では、一行目のデータは、精細画像ID「1」の特徴点ID「33」と、精細画像ID「3」の特徴点ID「22」と、精細画像ID「4」の特徴点ID「14」とがマッチングし、その点の三次元点群上の相対位置座標が(2,3,4)であることを示す。
【0064】
三次元点群ID1401に点群の色情報を保存したい場合は、精細画像DB402より色情報を取得する。ただし、3枚以上の精細画像を使っている場合は、カメラDB406に予め準備されたカメラパラメータがない場合であっても、カメラパラメータを推定することができる。その場合は、推定したカメラパラメータをカメラDB406に保存する。
【0065】
カメラ位置推定部603では、マッチングDB404のマッチング情報と、三次元点群DB405の相対位置情報と、カメラDB406のカメラパラメータにより、特徴点DB403の特徴点の二次元座標を用いて、新規精細画像のカメラ位置を推定し、精細画像DB402に保存する。
【0066】
新規三次元点群追加部602では、カメラDB406のカメラパラメータにより、特徴点DB403の特徴点の二次元座標と、精細画像DB402の当該新規精細画像のカメラ位置を用いることで、三次元点群DB405に保存されていない特徴点の相対三次元位置を推定し、三次元点群DB405に保存(追加)する。
【0067】
バンドル調整部604では、特徴点DB403の二次元座標と、三次元点群IDと、カメラDB406のカメラパラメータと、を用いて投影誤差を計算し、三次元点群とカメラ位置とカメラ向きを補正し、それぞれ、三次元点群DB405と精細画像DB402に格納する。
【0068】
図15には、広域画像と精細画像の特徴点マッチング部414の構成ブロック図を示す。広域画像と接近画像の特徴点マッチング部414には、画像特徴点検出部501、画像特徴点特徴量比較部502と、画像特徴点特徴量計算部503と、特徴点マッチングRANSAC部504と特徴点マッチング領域限定部701を有する。特徴点マッチング領域限定部701以外は、
図9に示した精細画像同士の特徴点マッチング部411と基本的に同様の構成であるが、対象とする画像に広域画像が含まれる点が異なる。特徴点マッチング領域限定部701では、直前の精細画像に含まれる特徴点の広域画像上の位置に基づいて、マッチングを行う限定領域を決定する。すなわち、今回の精細画像の特徴点は、直前の精細画像の位置の近傍に位置することが推測されるので、直前の精細画像の特徴点の位置にもとづいて限定領域を決定すればよい。ただし、初期三次元点群との対応に関しては、広域画像DB407記載のスタート座標を使用する。
【0069】
広域画像座標位置計算部415では、精細画像で撮影された特徴点が、広域画像上の座標のどこに対応付けられるかを示す広域画像座標位置を計算する。すなわち、広域画像と精細画像の特徴点マッチング部414でマッチした特徴点に対して、広域画像上の座標を対応付ける。なお、広域画像から抽出した特徴点は、
図10の特徴点DB403と同様に記録しておくものとする。
【0070】
図16は、広域画像DB407のデータ構造を示す一例である。広域画像の広域画像ID1601に対して、当該画像を撮影したカメラの位置1602、カメラの向き1603が格納される。カメラの位置1602はGPS等でカメラ位置を取得して記録することができる。かめらの向き1603はカメラの動作パラメータから取得することができる。あるいは、これらは広域画像自体から推定した値でもよい。
【0071】
スタート位置1604は、
図5で説明した広域画像と精細画像のマッチングにおいて、領域510の位置を示す。スタート位置の設定方法としては、先に述べたように、オペレータが広域画像を見て人為的に策定し入力することができる。あるいは、広域画像上でも確認可能なマークをフィールドに設置し、マークを撮影した広域画像から画像処理によりマークを抽出し、マークに基づいて定めることができる。あるいは、被写体が動かない場合は、GPS等によって被写体と同じ場所と推定される位置に定めることができる。あるいは、初期三次元点群を抽出するための精細画像を撮影したカメラの位置や方向から定めることができる。
【0072】
スタート位置1604の設定方法としては、
図16に示すように領域の中心や角部を示す二次元座標でもよいし、領域が四角形であれば、その四隅を示す二次元座標でもよい。
【0073】
図17は、センサDB409のデータ構造を示す一例である。センサを一意に識別するセンサID1701、センサが取得する点検位置の定義1702、およびセンサの向き1703を含む。
【0074】
図18は、広域画像座標位置DB408のデータ構造を示す一例である。
図14に示した三次元点群ID1401を持つ点が、広域画像ID1802を持つ広域画像の広域画像特徴点ID1803を持つ特徴点のどれに対応するかを示している。さらに、その点の広域画像上の広域画像座標1804を対応付ける。
【0075】
最後に結果出力部にて、広域画像座標DB408の広域画像座標1804を用いて、点検箇所が広域画像上のどこかを示すことができる。また、広域画像とそれぞれの特徴点の対応が判明した、三次元点群モデルを作成することができる。例えば、各点と広域画像の特徴点に番号が付加されており、数字が一致する点が同一点を表現する方法などが考えられる。