以下、本発明に係る補正距離算出装置について一例を示し、図面を用いて詳細に説明する。図1は、補正距離算出装置の概略構成を示したブロック図である。補正距離算出装置100は、記録部(記録手段、メモリ)101と、ROM(Read Only Memory)102と、RAM(Random Access Memory:メモリ)103と、CPU(Central Processing Unit:コンピュータ、仮想世界座標系構築手段、画像配置手段、発信源座標算出手段、仮想面設定手段、到達画素数算出手段、補正距離算出手段、距離補正手段)104とを有している。また、補正距離算出装置100には、カメラ200と、モニタ210と、ジャイロセンサ220とが接続されている。
カメラ200は、周囲の様子を動画によって撮影する。カメラ200は、例えば、車両、飛行機、ドローンなどに搭載することが可能になっている。カメラ200には、CCDイメージセンサやCMOSイメージセンサ等の撮像素子が設けられている。カメラ200で撮影された動画は、補正距離算出装置100の記録部101に記録される。カメラ200により撮影された動画の1フレーム分の画像を、「動画像」と称する。
なお、補正距離算出装置100において、後述する補正距離を算出するためには、カメラ200で撮影された1枚の画像があれば十分である。しかしながら、補正距離算出装置100のCPU104は、後述するように、動的視差法を用いてカメラ200で撮影された動画から撮影対象物のoptical flowを検出し、動画像に映る撮影対象物からカメラまでの距離を算出距離として算出する処理を行う。このため、カメラ200では、動画像を撮影する必要が生じる。従って、実施の形態に係るカメラ200は、動画を撮影する機能を備えるものとし、補正距離算出装置100は、カメラ200で撮影された動画の1フレーム分の画像である「動画像」を利用して、補正距離を算出する。
ジャイロセンサ220は、カメラ200の傾きを検出する。具体的には、カメラ200の光軸の角度を、現実世界(カメラ200が存在する現実の世界)において仮想的に設定されるx軸、y軸およびz軸からなる3軸の回転パラメータを用いて検出する。ここで、回転パラメータを示すためのx軸、y軸およびz軸は、現実世界で仮想的に設定される座標軸であるが、後述する仮想の世界においても、対応するx軸、y軸およびz軸が設定される。仮想の世界のx軸、y軸およびz軸からなる座標系を、仮想世界座標系と称する。仮想世界座標系の構築については後述する。ジャイロセンサ220によって、現実世界のカメラ200の傾きを検出することにより、カメラ200によって撮影された動画像の傾きを、仮想世界座標系に対応づけて設定することが可能になる。
記録部101には、カメラ200により撮影された動画像が、ジャイロセンサ220により検出された回転パラメータに対応づけられて記録される。より詳細に説明すると、カメラ200によって撮影された動画は、複数のフレームの画像(動画像)を時系列的に記録したデジタルデータとして、記録部101に記録される。例えば、T時間分の動画を、カメラ200で撮影した場合を考える。カメラ200が、ΔT時間毎に1枚の割合でフレームの画像(フレーム画像、動画像)を撮影する能力がある場合、記録部101には、T/ΔT枚のフレーム画像が時系列的に記録される。さらに、それぞれのフレーム画像(動画像)には、それぞれの時間におけるカメラ200の傾きを示した回転パラメータが関連付けられて記録されている。
なお、補正距離算出装置100あるいはカメラ200に、フレームバッファーを設けて、カメラ200で撮影された単位時間毎のフレーム画像がフレームバッファーに一時的に記録され、フレームバッファーに記録されたフレーム画像が、時系列的に記録部101に記録される構成であってもよい。また、記録部101に記録される動画像は、カメラ200によりリアルタイムに撮影された動画像には限定されず、予めカメラ200によって撮影された動画像(過去の動画像)であってもよい。ただし、上述したように、撮影された動画像には、撮影時におけるカメラ200の回転パラメータが対応づけられて記録される。
カメラ200で撮影される動画は、デジタルデータで記録されるものだけには限定されない。例えば、アナログデータで記録された動画であっても、デジタル変換処理を施すことによって、時系列的なフレーム画像として、記録部101に記録することが可能である。時系列的に記録されたフレーム画像を動画像として用いることにより、補正距離算出装置100で補正距離の算出処理を行うことが可能となる。
また、カメラ200は、周囲の景色等を動画で撮影することが可能な撮影手段であれば、その種類・構成は特に限定されない。例えば、一般的なムービーカメラであってもよく、また、スマートフォン等の携帯端末に設けられるカメラであってもよい。スマートフォンに設けられるカメラを、実施の形態に係るカメラ200として用いる場合、スマートフォンに設けられるジャイロセンサを、実施の形態に係るジャイロセンサ220として用いることができる。
また、記録部101には、補正距離の算出処理に用いられる初期情報が記録される。例えば、カメラ200に設けられるレンズの焦点距離の情報が記録される。カメラ200の焦点距離の情報は、後述する仮想レーザの発信源の位置座標を示す係数Lを決定するために用いられる。また、記録部101には、上述したジャイロセンサ220によって求められた回転パラメータの情報、つまり、カメラ200の傾きに関する情報が記録される。カメラ200の傾きに関する情報は、仮想世界座標系における動画像の法線ベクトルを決定するために用いられる。さらに、記録部101には、後述する現実世界の単位長(例えば、1cm)に対応する仮想世界座標系の画素数に関する情報(対応長さ情報)が記録される。また、記録部101には、現実世界における地面からカメラ200までの高さhに関する情報(カメラ200の高さ情報)が記録される。カメラ200の高さ情報は、例えば、カメラ200で動画が撮影された状態において、地面からカメラ200までの高さを予め測定しておくことによって得ることができる。
記録部101は、一般的なハードディスク等によって構成されている。なお、記録部101の構成は、ハードディスクだけに限定されるものではなく、フラッシュメモリ、SSD(Solid State Drive / Solid State Disk)などであってもよい。記録部101は、動画像を、時系列的な複数のフレーム画像として記録することが可能な記録媒体であり、また初期情報を記録することが可能な記録媒体であるならば、具体的な構成は特に限定されない。
CPU104は、記録部101に時系列的に記録された複数の動画像(フレーム画像)および初期情報に基づいて、動画像に映る撮影対象物からカメラ200までの補正距離を算出する処理を行う。CPU104は、プログラム(例えば、図7に示すフローチャートに基づくプログラム)に基づいて、補正距離の算出処理を行うが、その詳細については後述する。
また、CPU104は、公知の方法である動的視差法を用いて、カメラ200で撮影された動画から撮影対象物のoptical flowを検出し、動画像に映る撮影対象物からカメラまでの距離を、算出距離として算出する処理を行う。実施の形態に係るCPU104では、動画像の全ての画素について算出距離の算出を行う。CPU104によって算出された算出距離は、記録部101に記録される。
ROM102には、CPU104が補正距離を算出するためのプログラム(例えば、図7に示すフローチャートに基づくプログラム)や、算出距離を算出するためのプログラム等が記録される。RAM103は、CPU104の処理に利用される作業エリアとして用いられる。具体的に、RAM103は、CPU104が仮想世界座標系を構築するための作業エリアとして利用される。
実施の形態に係る補正距離算出装置100では、プログラムが、ROM102に記録される構成について説明する。しかしながら、プログラムが記録される記録媒体は、ROM102だけに限定されるものではなく、記録部101にプログラムを記録する構成であってもよい。
モニタ210には、カメラ200で撮影された動画を表示することが可能である。また、補正距離によって距離補正が行われた動画像の画素毎の算出距離の情報に基づいて、カメラ200の周囲の状況を示す3次元動画が作成された場合には、作成された3次元動画を表示することができる。モニタ210として、例えば、液晶ディスプレイや、CRTディスプレイなどの一般的な表示装置が用いられる。
次に、CPU104が、記録部101に記録された動画像(フレーム画像)と、動画像(フレーム画像)に対応づけられた初期情報とに基づいて、動画像に映った撮影対象物からカメラ200までの距離を補正するための補正距離を算出する方法について説明する。
まず、補正距離を用いて補正を行う対象となる算出距離Zm(撮影対象物からカメラ200までの算出距離)を、動的視差法を用いて算出する手順について簡単に説明する。既に説明したように、動的視差法では、動画に映る複数の撮影対象物が、わずかな時間で動画像上を移動したときのそれぞれの画素の軌跡を移動画素数として求めて、各撮影対象物毎に、カメラから撮影対象物までの算出距離を算出する。M個(M≧2)の撮影対象物のターゲットピクセル(移動画素数を求める対象となる画素)のうち、移動画素数が最も少ない画素数をμとし、移動画素数が最も多い画素数をγとし、さらに、M個のターゲットピクセルによりそれぞれ特定される撮影対象物からカメラまでの現実距離(現実の世界の距離)のうちで最も近い距離をZNとし、撮影対象物からカメラまでの現実距離のうちで最も遠い距離をZLとする。
この場合、移動画素数が少ない撮影対象物は、遠方に存在する撮影対象物に対応すると判断することができる。なぜならば、遠方に存在する撮影対象物と近くに存在する撮影対象物とが現実の世界において同じ距離だけ移動しても、動画像に映る撮影対象物の移動画素数が異なるためである。遠方に存在する撮影対象物と近くに存在する撮影対象物とが同じ距離だけ移動すると、遠方に存在する撮影対象物の移動画素数は、近くに存在する撮影対象物の移動画素数よりも少なくなる。このため、複数のターゲットピクセルのうち最も移動画素数が少ない撮影対象物の画素の距離(画素数μ)が、現実世界の距離のうちで最も遠い距離ZLに対応し、移動画素数が多い撮影対象物の画素の距離(画素数γ)が、現実世界の距離のうちで最も近い距離ZNに対応する。
このように、動的視差法では、ターゲットピクセルの対象となる撮影対象物の現実世界の距離範囲(ZNからZLまで範囲)と、動画像におけるターゲットピクセルの移動画素数の範囲(μからγまでの範囲)との対応関係に基づいて、撮影対象物毎(ターゲットピクセル毎)に、カメラから撮影対象物までの算出距離を求める。ここで、動的視差法により検出される画素毎の算出距離は、相対距離を検出するものである。すなわち、動的視差法では、移動画素数の値(例えば、optical flowの値)が正規化されており、現実世界の距離範囲(ダイナミックレンジ)も固定されているため、カメラから近い撮影対象物までの距離も、カメラから遠い撮影対象物までの距離も、相対的な違いがあり、絶対的な距離とは言えない。このため、ある程度の誤差が生じてしまう。
例えば、1つの動画像に、極めて遠方に位置する撮影対象物と、極めて近くに位置する撮影対象物とが同時に映っている場合には、現実世界で最も近い距離から最も遠い距離までの距離範囲が長くなる。この場合には、現実世界で最も近い距離から最も遠い距離までの距離範囲が短い場合に比べて、動的視差法により求められるターゲットピクセル毎の算出距離により大きな差が生じるおそれがある。
また、移動画素数の値を、optical flowの値によって検出する方法では、既に説明したように、テクスチャーのない状態において、optical flowの値が小さくなる傾向がある。このため、求められた算出距離が、現実世界の距離よりも遠くなってしまうという問題があった。
実施の形態では、補正距離算出装置100のCPU104が、optical flowの値に基づいて、動的視差法により撮影対象物からカメラまでの算出距離を算出する処理を行い、さらに、CPU104が、動的視差法により算出された算出距離を補正するための補正距離を算出する処理を行う場合について説明する。
なお、CPU104によって算出される算出距離は、optical flowの値に基づく動的視差法によって算出される距離には限定されない。AMP法やFMP法に基づく動的視差法によって算出される算出距離であってもよい。さらに、動的視差法以外の公知の方法、例えば、複眼カメラを用いたり、単眼カメラと距離センサとを用いたりすることによって、CPU104で算出距離を算出する構成としてもよい。CPU104では、どのような方法で算出される算出距離であっても、算出された算出距離を補正するための補正距離を算出することが可能である。
補正距離算出装置100で補正距離を算出する処理では、次の3つの考え方を導入することを特徴とする。
[特徴1]仮想的な3次元空間を構築する。仮想的な3次元空間を仮想世界座標系と称する。
[特徴2]仮想世界座標系に対して、カメラ200で撮影された動画像を配置し、仮想的なレーザ(仮想レーザ)の発信源を、仮想世界座標系に設定する。
[特徴3]仮想世界座標系に対して仮想的な面(仮想面)を設定する。
補正距離算出装置100のCPU104は、プログラムに従って仮想世界座標系を構築し、仮想的に仮想レーザの発信源を設定し、仮想面の設定を行う。これらの3つの特徴について、詳細に説明する。
[特徴1:仮想世界座標系]
CPU104は、プログラムに基づいて、メモリ空間に対して、仮想世界座標系の構築を行う。具体的には、CPU104は、ピクセル単位(画素単位)の直交する3軸の座標系からなる仮想的な3次元空間を、CPU104の演算処理用のメモリ空間(RAM103あるいは記録部101)上に、仮想世界座標系として構築する。仮想世界座標系において、横方向をx軸方向、縦(上)方向をy軸方向、奥行方向をz軸方向とする。仮想世界座標系の距離(仮想距離)は、画素数(画素長)で示される。仮想世界座標系の仮想距離を画素数で示すことにより、現実世界の距離よりもより高い(細かい)精度で距離を示すことができる。
例えば、従来の動的視差法では、動画像に映る撮影対象物のうちで最も遠い現実世界の距離を100mとし、最も近い現実世界の距離を1mとし、距離の基本単位を1mとすると、1m~100mまでの100段階の精度で、現実世界における距離のダイナミックレンジが設定される。特に、カメラ200から最も遠い撮影対象物までの現実世界の距離や、最も近い撮影対象物までの現実世界の距離は、目視で設定したり、予め測定を行ったりして決定される。このため、例えば、ナノmmのような詳細な精度で、現実世界における距離のダイナミックレンジを設定することは、現実的なことではなかった。
しかしながら、実施の形態に係る補正距離算出装置100のCPU104では、仮想世界座標を構築し、動画像に映る撮影対象物の移動画素数に対応して、仮想世界座標系における撮影対象物までの仮想距離を、画素数を用いて示すことができる。このため、仮想世界座標系における仮想距離のダイナミックレンジを、現実世界における距離のダイナミックレンジに比べて、より精度良く、かつ柔軟に設定することが可能である。例えば、仮想世界座標における最も近い撮影対象物から最も遠い撮影対象物までの仮想距離のダイナミックレンジの精度を、十万段階の精度とすることもできる。仮想距離は、CPU104の演算処理により仮想的に設定される空間の距離であるため、現実距離では想定しにくいような高精度な仮想距離(画素数)を設定することが可能である。仮想距離のダイナミックレンジを高精度に設定することにより、従来のような物理的な単位長(例えば、cmやm等)を、ダイナミックレンジの設定で考慮する必要がなくなる。
なお、CPU104では、補正距離を算出するために仮想世界座標系の構築を行うが、仮想世界座標系の距離は画素数で示されるため、動的視差法により算出された算出距離を補正するために、仮想世界座標系で求められる画素単位の補正距離(仮想距離)を、現実世界の補正距離(cmやm等の物理的数値による距離)に変換する必要がある。この変換は、記録部101に記録される対応長さ情報、つまり、現実世界の単位長(例えば、1cm)に対応する仮想世界座標系の画素数に関する情報に基づいて変換される。
例えば、現実世界における1cmの長さが、仮想世界座標系において40pixelに該当する場合、つまり、対応長さ情報が40[pixel/cm]であった場合を考える。、仮想世界座標系の補正距離(仮想距離)が、400000pixelであるとすると、現実世界の補正距離は、
400000[pixel]/40[pixel/cm]
=10000[cm]
=100[m]
により、求めることができる。
後述するように、補正距離算出装置100のCPU104によって求められる、動画像上の各画素から撮影対象物までの仮想世界座標系の仮想距離を、現実世界の距離に変換することによって、現実世界の単位長で、動画像上の各画素の補正距離を求めることができる。動画像上の全ての画素に対して補正距離を求めることにより、動画像における各画素の配置に対応する補正距離を、行列形式に並べて記録することができる。CPU104は、全画素の補正距離を、各画素の画素位置に対応させて行列形式に並べて、行列データを作成する。行列データを用いることにより、動画像の全て画素について算出される算出距離に対して、現実世界の距離で示される全ての画素の補正距離を、一斉に適用して、補正処理を行うことが可能になる。行列データのそれぞれの画素の補正距離を、キャリブレーションの値と称する。
仮想世界座標系は、動画像の各画素の算出距離を補正するための補正距離を算出するために設けられる仮想の座標空間である。このため、仮想空間座標系を構築する場合、CPU104は、動画像に映る現実世界(動画像を撮影したカメラ200の周囲の状況)と完全に一致するような座標空間を構築する必要はない。少なくとも、カメラ200から撮影対象物までの算出距離の精度を向上させるために必要な対象物が、仮想世界座標系に存在していれば十分である。実施の形態では、カメラ200から撮影対象物までの算出距離の精度を向上させるために必要な対象物として、仮想面を想定する。その一例として、仮想世界座標系に仮想地面を設定する。
現実世界におけるカメラ200の設置状態などにより異なるが、一般的なカメラの設置状態を考慮すれば、カメラ200で撮影した動画像に、地面が映り込む可能性は高い。例えば、走行する車両に設置されたカメラであっても、ドローンに設置されたカメラであっても、さらにはロボット等に設置されたカメラであっても、地面を基準とし走行、飛行、移動されるものにカメラが設置される。このため、地面は、カメラ200から撮影対象物までの算出距離の精度を向上させるために必要な対象物として、最も有効なものである。地面が、現実世界および仮想世界座標系において共通した対象物となる場合には、次述するように、現実世界における地面からのカメラの高さ(位置)と、仮想世界座標系の仮想カメラの位置座標との対応関係を、決定することができる。
また、仮想世界座標系における基本的な撮影対象物を、面(仮想面)として捉えることは、カメラ200から撮影対象物までの算出距離の精度を向上させるために対象物を設定する上で有効である。仮想世界座標系における仮想地面は、カメラ200から撮影対象物までの算出距離の精度を向上させるために必要な対象物の一例である。仮想面は、仮想地面だけに限定されず、仮想地面以外にも、カメラ200の右側あるいは左側に建物等が存在する場合や、高速道路用の側壁が存在する場合には、仮想面として仮想側面壁を設定することができる。仮想側面壁を設定することにより、カメラ200から撮影対象物までの左右側方における算出距離の精度を高めることができる。同様に、カメラ200の正面方向に仮想正面壁を設定する場合も同様である。このような、仮想世界座標系における仮想面の設定については、後述する。
次に、上述した仮想世界座標系を構築する場合には、現実世界の距離と、仮想世界座標の仮想距離との対応関係を設定する必要がある。具体的には、仮想世界座標系の単位長は画素[pixel]であり、現実世界の単位長は[m]や[cm]であるため、それぞれの単位長が異なる。このため、現実世界の単位長が仮想世界座標系においてどの程度の画素数に対応するかを明確する必要が生じる。この場合に、前述した記録部101に記録される対応長さ情報、つまり、現実世界の単位長(例えば、1cm)に対応する仮想世界座標系の画素数に関する情報が用いられる。
また、現実世界の単位長(例えば、1cm)に対応する仮想世界座標系の画素数に関する情報(対応長さ情報)を用いても、現実世界において基準となる点(基準点)と、基準点に対応する仮想世界座標系の座標との関係を明確にしないと、現実世界と仮想世界座標系とを対応付けることができない。現実世界と仮想世界座標系との対応関係を明確にするために、実施の形態に係る補正距離算出装置100では、カメラ200の高さ情報を利用する。
カメラ200の高さ情報とは、動画像を撮影したカメラ200が、現実世界において地面からどのくらいの高さに設置されたかという情報を意味する。例えば、カメラ200が車両に設置される場合、地面からの高さhは、基本的に一定の値となる。例えば、カメラ200の高さ情報の値hを150cmとすると、CPU104は、カメラ200の高さ情報の値h(=150cm)と、仮想世界座標系における仮想カメラの高さ位置とを対応づける処理を行う。ここで、仮想世界座標系におけるカメラの高さ位置の決定は、仮想世界座標系における動画像の位置座標に影響を与えるものである。このため、実施の形態に係る補正距離算出装置100では、動画像の中心座標(中心画素)に仮想カメラが存在すると仮定する。つまり、現実世界におけるカメラ200の高さ位置hを、仮想世界座標系における動画像の中心座標(特に、y軸上の座標)に対応させる処理を行う。
仮想世界座標系において仮想カメラの高さ位置を対応づけるためには、仮想世界座標の原点を予め設定する必要がある。仮想世界座標系を3次元空間(x,y,z)で表すと、この空間の原点は(x,y,z)=(0,0,0)と表すことができる。上述した仮想カメラの位置(動画像の中心位置)は、原点との関係で決定されるが、仮想世界座標系の座標は、カメラから撮影対象物までの補正距離を算出するために用いられる座標系であるため、仮想世界座標系において相対的に仮想カメラの位置が決定されれば十分である。従って、原点が、仮想カメラの位置(動画像の中心位置)に対してどちら側に位置していても、問題ない。例えば、仮想世界座標系における仮想カメラの位置(動画像の中心位置)と原点位置とが一致していてもよく、あるいは異なる位置となっていても問題ない。実施の形態に係る補正距離算出装置100では、説明の便宜上、仮想世界座標における仮想カメラの位置(動画像の中心位置)の座標を(Xx,Xy,Xz)として、Xx≧0,Xy≧0,Xz≧0となるように、仮想カメラの位置(動画像の中心位置)の座標および原点を設定する。後述する図2,図3(b)では、Xx>0,Xy>0,Xz≧0となる座標に仮想カメラの位置の座標、つまり動画像の中心位置の座標を設定する場合を一例として示している。
CPU104は、現実世界におけるカメラ200の高さ位置hに対応するように、仮想世界座標系のy軸の座標Xyの値を設定する。カメラ200の高さ位置hと座標Xyとの対応関係は、試験的に決定されるものではなく、任意に定めることができる。例えば、Xy=6000pixelのように任意の値を設定することが可能である。このXy=6000という画素長(ピクセル長)と、現実世界におけるカメラ200の地上からの高さh=150cmとの対応関係を示す情報が、上述した対応長さ情報である。つまり、対応長さ情報は、現実世界の単位長に対応する仮想世界座標系の画素数に関する情報に該当する。対応長さ情報は、既に説明したように、補正距離算出装置100の記録部101に、初期情報として記録される。
また、現実世界と仮想世界座標系との単位長を対応させる処理だけでは、動画像に映る画素毎のカメラ200から撮影対象物までの補正距離を求めることはできない。動画像を仮想世界座標系に設置するために、カメラ200の光軸の傾きに関する情報を用いて、仮想世界座標系における動画像の傾きを決定する必要がある。前述したように、ジャイロセンサ220によって測定されたカメラ200の傾きに関する情報を用いることにより、動画像の傾斜角度の設定を行う。
カメラ200によって撮影された動画像は、現実世界におけるカメラの設置位置を基準として、カメラ200の傾きに応じた方向の映像を記録したものである。カメラ200の現実世界の傾きは、既に説明したように、ジャイロセンサ220によって検出されている。ジャイロセンサ220は、カメラ200の光軸に対する回転パラメータを検出することにより、カメラ200の傾きを検出する。具体的に、ジャイロセンサ220は、カメラ200の傾きを、現実世界のx軸、y軸およびz軸に対するそれぞれの回転パラメータとして検出する。そして、CPU104は、ジャイロセンサ220により検出された回転パラメータを用いて、仮想世界座標系のx軸、y軸およびz軸に対するそれぞれのパラメータを設定することにより、仮想世界座標系における仮想カメラの傾きを決定する。カメラ200の傾きはカメラ200の光軸の方向を示すものであるため、仮想世界座標系に配置される動画像の法線の方向に対応する。
以上説明したように、現実世界のカメラ200の高さ位置hに対応するようにして、仮想世界座標系における仮想カメラの位置座標を決定し、現実世界におけるカメラ200の傾きに基づいて、仮想世界座標系における仮想カメラの傾きを決定することにより、仮想世界座標系における動画像の中心位置(中心画素)と、動画像の法線とを決定することが可能になる。
また、動画像の1画素と仮想世界座標系の1画素とが等価に対応する場合には、仮想世界座標系における動画像の中心位置と法線とを決定することにより、仮想世界座標系における動画像の中心画素の位置座標(Xx,Xy,Xz)と、中心画素に対応する動画像の四角の画素位置とに基づいて、仮想世界座標系における動画像の全ての画素の位置座標を決定することができる。
動画像の画像サイズは、カメラ200の撮影可能画素数によって異なる。例えば、近年では、ハイビジョン画質(1,280画素×720画素)、フルハイビジョン画質(1,920画素×1,080画素)、4K画質(3,840画素×2,160画素)、8K画質(7,680画素×4,320画素)で撮影可能なカメラが多く存在している。CPU104は、カメラ200で撮影された動画像の中心画素の位置と傾きとに基づき、カメラ200で撮影された動画像の大きさに合わせて、それぞれの画素の位置座標を算出する。
実施の形態に係るCPU104では、動画像の画素と仮想世界座標系の画素とが等価に対応する場合について説明するが、例えば動画像の画像サイズを拡大あるいは縮小して動画像サイズを修正した上で、各画素の仮想世界座標系の位置座標を算出する構成とすることも可能である。例えば、動画像の画像サイズを拡大あるいは縮小した場合に、その拡大あるいは縮小に対応して、仮想世界座標系のスケールを修正することが可能である。また、仮想世界座標系のスケールを変更することなく、動画像の画像サイズのみを拡大あるいは縮小した場合であっても、後述する仮想レーザの発信源の座標を動画像から近づけたり遠ざけたりすることにより、適切に調整することが可能である。
図2は、カメラ200の高さ位置情報およびカメラ200の傾き情報に基づいて、仮想世界座標系に対して動画像が配置された状態を示した図である。図2では、動画像の法線ベクトル(a,b,c)を、紙面左上方向に伸びるようにして示している。また、図3(a)は、2次元からなる動画像の画像座標系を示した図である。動画像は、3次元からなる仮想世界座標系とは別に、2次元からなる画像座標系を備えており、動画像の平面上の画素を(α,β)で表すことができる。
さらに、図2に示すように、仮想世界座標系における動画像の四角について、右下角の座標をA点としてA(x1,y1,z1)で示し、右上角をB点としてB(x2,y2,z2)で示し、左上角をC点としてC(x3,y3,z3)で示し、左下角をD点としてD(x4,y4,z4)で示す。また、CPU104では、既に説明したように、動画像の四角の中心となる中心画素の画素位置を(Xx,Xy,Xz)とし、仮想世界座標系における仮想カメラの位置座標を、カメラ200によって撮影された動画像の中心画素の位置座標に設定する。
動画像の中心画素(Xx,Xy,Xz)を通る法線ベクトル(a,b,c)を備えた平面(x,y,z)は、
a(x-Xx)+b(y-Xy)+c(z-Xz)=0・・・式4
と表すことができる。一方で、図3(a)に示した画像座標系の2次元平面(α、β)が、仮想世界座標系の3次元座標において点(α、β、φ)に対応する(位置する)と仮定すると、式4より、
a(α-Xx)+b(β-Xy)+c(φ-Xz)=0が成立し、φを求めることができる。
従って、カメラ200で撮影された動画像の各画素に対応する3次元座標の点(α、β、φ)を、仮想世界座標系における動画像上の画素位置(sx,sy,sz)とすると、
(sx,sy,sz)=(Xx,Xy,Xz)+k(α-αa, β-βa, φ-φa)
として求めることができる。なお、αaはαの平均であり、βaはβの平均であり、φaはφの平均である。また、kは定数である。このようにして、仮想世界座標系における動画像上の位置座標(sx,sy,sz)を、求めることができる。
また、別の方法として、カメラ200により撮影された動画像を、行列[(α,β)]の要素として捉えて、各要素(α,β)に対応させた点を(sx,sy,sz)として求めてもよい。具体的には、図3(b)に示すように、仮想世界座標系に配置された動画像は通常傾きを有し、動画像の傾きは、平面における法線(a,b,c)によって表すことができる。
動画像を、図3(a)に示したように、2次元の画像座標系の平面(α,β)として捉えると、画像座標系の点は、行列[(α,β)]、α=1,2,・・・,M、β=1,2,・・・,Nで表すことができる。また、動画像の四角は、仮想世界座標空間において(Xx,Xy,Xz)を通る法線(a,b,c)の平面上のA(x1,y1,z1)、B(x2,y2,z2)、C(x3,y3,z3)、D(x4,y4,z4)に対応する。この場合に、線分ABをM等分し、線分BCをN等分して、それぞれの等分点から碁盤の目を作るように引いた線分の交点を、行列[(α,β)]の要素(α,β)に対応させて、その交点を(sx,sy,sz)とする。このようにして、仮想世界座標系の交点(sx,sy,sz)を求めることにより、カメラ200により撮影された動画像の各画素の位置座標を、仮想世界座標系において求めることができる。
[特徴2:仮想レーザの発信源]
次に、CPU104は、仮想世界座標系に、仮想的なレーザ(仮想レーザ)を発するための発信源を設定する。仮想レーザの発信源から、仮想世界座標系に配置された動画像の各画素に対して仮想レーザが発せられ、動画像の各画素を通過した仮想レーザが、仮想世界座標系に設定される仮想的な対象物(仮想面)に到達する場合を考える。
実施の形態に係る補正距離算出装置100のCPU104では、上述したように、動画像の中心画素の位置座標を、仮想世界座標系における仮想カメラの位置座標に設定して、動画像を配置する。動画像の法線は、既に説明したように(a,b,c)とし、仮想世界座標系に動画像が配置された状態において、動画像の1画素と仮想世界座標系の1画素とが等価に対応するものとする。つまり、動画像の画素単位と仮想世界座標系の画素単位とは同等な画素である場合を考える。
仮想世界座標系における動画像の四角の座標をA(x1,y1,z1)、B(x2,y2,z2)、C(x3,y3,z3)、D(x4,y4,z4)とし、動画像の中心座標を(Xx,Xy,Xz)とすると、動画像の法線(a,b,c)は、仮想世界座標系に配置された動画像の2つの辺(例えば、AB辺とAD辺)のベクトルの外積で計算することができる。
動画像の2つの辺(例えば、AB辺とAD辺)のベクトルを、それぞれベクトルA,ベクトルBとし、2つのベクトルA,Bの交点から仮想世界座標系におけるそれぞれのベクトル要素を、(Ax,Ay,Az)および(Bx,By,Bz)とすると、ベクトルAとベクトルBとの外積は、
(Ax,Ay,Az)×(Bx,By,Bz)
=(AyBz-AzBy,AzBx-AxBz,AxBy-AyBx)
によって求めることができる。
ここで、(AyBz-AzBy)をa1とし、(AzBx-AxBz)をb1とし、(AxBy-AyBx)をc1とすると、ベクトルAとベクトルBとの外積は、(a1,b1,c1)と表すことができる。この外積は、仮想世界座標系における動画像の法線ベクトル(a,b,c)に対応する。
法線ベクトルの大きさが「1」となるように法線ベクトルを正規化すると、法線ベクトル(a,b,c)は、
(a,b,c)
=(a1/|(a1,b1,c1)|, b1/|(a1,b1,c1)|,c1/|(a1,b1,c1)|)
となる。
従って、動画像の中心位置(Xx,Xy,Xz)から長さLの法線ベクトルの位置は、
(Xx,Xy,Xz)+L(a,b,c)
によって表すことができる。Lは係数である。
図2に示すように、仮想世界座標系における仮想レーザの発信源の位置座標を(x0,y0,z0)とすると、仮想レーザの発信源は、動画像の中心位置(Xx,Xy,Xz)から伸びる法線ベクトル上に位置することから、係数Lを決定することにより、
(x0,y0,z0)=(Xx,Xy,Xz)+L(a,b,c)・・・式5
として表すことが可能になる。
係数Lの長さは、仮想レーザの発信源から発せられた仮想レーザが、動画像に映る対象物の画素を通過して、仮想世界座標系に存在する仮想的な撮影対象物(仮想面)に仮想レーザが当たることを前提として決定される。具体的には、係数Lは、カメラ200におけるレンズの焦点距離に基づいて求めることができる。焦点距離とは、カメラ200のレンズの中心である主点からカメラ200の撮像素子までの距離を意味する。
図4(a)は、カメラ200の焦点距離と撮影される画像の撮影範囲との関係を説明した図である。カメラ200におけるレンズの焦点距離が近い場合(例えば、焦点距離rが24mmの場合)には、より広い範囲を撮影することが可能となる。このように焦点距離が近いレンズは広角レンズと呼ばれ、広角の画角で撮影を行うことができる。また、カメラ200においてレンズの焦点距離が遠い場合(例えば、焦点距離rが200mmの場合)には、レンズ正面の撮影対象物を拡大した状態で撮影することできる。この場合には、撮影範囲が広角の場合に比べて狭くなる。このように焦点距離が遠いレンズは望遠レンズと呼ばれ、望遠の画角で撮影を行うことができる。さらに、カメラにおけるレンズの焦点距離が中距離の場合(例えば、焦点距離rが50mmの場合)には、広角レンズよりも撮影範囲が狭いが、望遠レンズよりも撮影範囲が広い、中位の範囲で撮影を行うことができる。このように焦点距離が中距離のレンズは標準レンズと呼ばれ、標準の画角で撮影を行うことができる。
図4(a)に示した図では、カメラ200の位置を固定して、カメラ200の撮影範囲の違いを示した。一方で、図4(b)では、カメラ200で撮影される動画像の大きさを基準として、カメラ200の位置を動画像に対して前後させた状態を示している。また、図4(c)は、図4(b)に示す焦点距離のレンズを用いてカメラ200で撮影された動画像において、当該動画像から仮想レーザの発信源までの仮想距離を示した図である。
カメラ200によって望遠レンズ(r=200mm)で撮影対象物を撮影した場合には、図4(b)に示すように、動画像の画角が狭くなってしまう。このような画角で撮影された動画像では、図4(c)に示すように、仮想レーザの発信源から動画像までの仮想距離が長くなってしまう(図4(c)の距離L1)。カメラ200によって標準レンズ(r=50mm)で撮影対象物を撮影した場合には、図4(b)に示すように、動画像の画角が望遠レンズの場合に比べて広くなる。このような画角で撮影された動画像では、図4(c)に示すように、仮想レーザの発信源から動画像までの仮想距離が、望遠レンズの場合に比べて短くなる(図4(c)の距離L2)。さらに、カメラ200によって広角レンズ(r=24mm)で撮影対象物を撮影した場合には、図4(b)に示すように、動画像の画角が標準レンズに比べて広くなる。このような画角で撮影された動画像では、図4(c)に示すように、仮想レーザの発信源から動画像までの仮想距離が、標準レンズの場合に比べて短くなる(図4(c)の距離L3)。
仮想レーザの発信源の位置は、仮想レーザが動画像の各画素を通過して、仮想世界座標系に仮想的に存在する撮影対象物に当たる場合を想定して決定される。このため、仮想世界座標系における動画像から仮想レーザの発信源までの仮想距離は、カメラ200の画角に応じて変化することになり、結果的にカメラの焦点距離に応じて決定することができる。
従って、動画像の中心画素の位置座標(Xx,Xy,Xz)に対する、仮想レーザの発信源の座標(x0,y0,z0)を示した式5の係数Lは、カメラ200におけるレンズ焦点距離に基づいて決定することができる。カメラ200におけるレンズの焦点距離は、撮影された画像のexif(Exchangeable image file format)情報や、動画のメタデータなどから求めることができる。CPU104は、記録部101に記録されるカメラ200の焦点距離に関する情報に基づいて係数Lを決定する。
なお、係数Lはカメラ200の焦点距離に基づいて決定される値であるため、焦点距離が変化しないレンズを用いてカメラ200で動画像を撮影する場合には、仮想レーザの発信源の座標を示す係数Lの値も変化しない。このため、カメラ200の焦点距離に基づいて係数Lを一度決定しておけば、カメラ200の焦点距離が変更されない限り、係数Lの値をそのまま使用し続けることができる。
また、実施の形態に係る補正距離算出装置100では、カメラ200の焦点距離に関する情報に基づいて係数Lを決定するが、動画像を撮影したカメラ200の焦点距離に関する情報が不明な場合もあり得る。その場合には、焦点距離が明らかなカメラで撮影した動画像の画角と、焦点距離が不明なカメラで撮影した動画像の画角とを比較することにより、焦点距離が不明なカメラの焦点距離を推測することができる。このため、動画像の画角に基づいて焦点距離を判断して、係数Lを決定することも可能である。
さらに、焦点距離が明らかなカメラで撮影した動画像がない場合には、現実世界においてカメラから撮影対象物までの距離や撮影対象物の寸法が明らかな撮影対象物を撮影し、撮影された撮影対象物を仮想世界座標系に正確に配置することにより、動画像の中心位置から仮想レーザの発信源までの仮想距離を示す係数Lの値を求めることができる。
図5(a)は、カメラ200で撮影された動画像の一例を示し、図5(b)は、仮想世界座標系における仮想レーザの発信源の位置と、仮想世界座標系に配置された動画像の位置と、仮想世界座標系に配置された仮想撮影対象物の位置との関係を示した図を示している。例えば、図5(a)に示すように、動画像の中心に、起立した高さ100cmの看板の上端縁が映っている場合を考える。看板の高さを100cm、カメラ200の高さを150cm、カメラ200の傾きが水平方向からθであるとする。図5(a)(b)に示すように、動画像の中心画素であって、100cmの高さの看板の上端縁が映っている画素をP2点とすると、図5(b)に示す動画像の中心であるP2点と、仮想世界座標系に位置する仮想看板の上端縁のP1点との延長線上に、仮想レーザの発信源P3が存在することになる。このP1点とP2点とを通る延長線は、動画像の法線方向と一致する。
また、図5(a)(b)に示すように、動画像に映る看板と地面との境目をP4点とし、図5(b)に示すように、仮想世界座標系に位置する仮想看板と仮想地面との境界をP5とすると、仮想世界座標系におけるP4点とP5とを通る延長線上に、仮想レーザの発信源P3が存在することになる。このように、図5(b)に示す仮想世界座標系において、P1点とP2点との延長線と、P4点とP5点との延長線との交点P3が、仮想レーザの発信源の座標となる。ここで、P2点は、動画像の中心点であるため(Xx,Xy,Xz)で示すことができる。このため、仮想世界座標系におけるP1点の座標およびP5点の座標を、記録部101に記載される対応長さ情報と、現実世界におけるカメラ200の高さ情報と、現実世界における看板の高さ寸法の情報とに基づいて算出し、さらに、動画像のP4点における仮想世界座標系の位置座標を求めることにより、点P1とP2との延長線とP4とP5との延長線との交点P3の座標を求めることができる。動画像の中心点である(Xx,Xy,Xz)から交点P3までの仮想距離(画素数)を算出することにより、係数Lを算出することが可能になる。
上述したように、現実世界におけるカメラ200の高さ情報の値h=150cmである場合であって、対応長さ情報が40[pixel/cm]である場合、カメラ200の高さhに対応する仮想世界座標系の画素長(ピクセル長)は、6000pixel(=150cm×40[pixel/cm])となる。看板の高さ(現実世界で高さh=100cm)は、仮想世界座標系において4000pixel(=100cm×40[pixel/cm])の画素長になる。仮想カメラの位置座標(動画像の中心座標)P2点から仮想看板の上端縁の位置座標P1点までの水平方向の画素数(図5(b)におけるRの長さ)は、カメラの傾きθから、R=2000・tanθで求めることができる。このため、仮想世界座標系における仮想看板の上端縁P1点は、動画像の中心の位置座標P2(Xx,Xy,Xz)を基準として、x軸方向で-2000pixel(6000pixel-4000pixel)、z軸方向で、+2000・tanθ[pixel]の位置座標に存在すると判断できる。
また、係数Lは、現実世界の単位長に対応する仮想世界座標系の画素数の値によって、つまり、対応長さ情報の値によって、ある程度の範囲で誤差を許容することができる。例えば、仮想世界座標系において、仮想地面から仮想カメラの位置までの画素数を一万画素に設定した場合、係数Lが、約500画素から約2000画素までの範囲の値であれば、最終的に求められる補正距離の値に大きな差は生じない。
また、上述した法線(a,b,c)の値は、カメラ200の傾きに対応する値であるため、カメラ200の傾きの時間変化に伴って、変化する場合がある。例えば、車載用カメラとして、車両にカメラ200が設置されており、仮想世界座標系のz軸方向を正面方向(水平方向)に向けて設置される場合には、法線の値が(a,b,c)=(0,0,1)となる。例えば、カメラ200が車両の側方を向いた状態で設置される場合には、法線の値が(a,b,c)=(1,0,0)あるいは(a,b,c)=(-1,0,0)となる。例えば、ドローンに搭載されるカメラとして、カメラ200が真下を向いた状態でドローンに設置される場合には、法線の値が(a,b,c)=(0,-1,0)となる。ドローンにカメラ200が搭載されるような状態では、カメラ200が揺れるため撮影された動画の映像もブレてしまうおそれがあるが、スタビライザー等のブレ防止機器を用いることにより、カメラ200の揺れを抑えて画面のブレを抑制することができる。このようにカメラ200の揺れを抑えて画面のブレを抑制することにより、法線の値の細かな変化を抑制することが可能である。
また、動的視差法を用いて、画素点(sx,sy,sz)におけるoptical flowの値を抽出することにより、動画像に映る撮影対象物の画素の時間変化を抽出することができる。仮想レーザはCPU104により創造される仮想のものであって、実在するものではないが、仮想レーザが通過すると仮定する画素点(sx,sy,sz)の時間変化は、optical flowの値によって求めることが可能になる。
求められたoptical flowの値には、正規化処理が施される。ここで、optical flowの値の正規化処理について簡単に説明する。動的視差法によって求められるオリジナルのoptical flowの値をq1とすると、正規化されたoptical flowの値q2は、
q2=(γ0-μ0)・q1/(γ(t)-μ(t))+μ0・・・式6
で算出することができる。ここで、μ(t)は、時刻tの動画像により求められるoptical flowの値の最小値であり、γ(t)は、時刻tの動画像により求められるoptical flowの値の最大値を示している。また、μ0は、事前に定められる正規化されたoptical flowの値の最小値を示し、γ0は、事前に定められる正規化されたoptical flowの値の最大値を示している。また、正規化された距離範囲[μ0,γ0]に対応する、事前に測定された現実距離の距離範囲(ダイナミックレンジ)として[ZN,ZL]が設定される。ここで、μ0は、ZLに対応し、γ0はZNに対応している。正規化されたoptical flowの値q2に対応する算出距離Z∈[ZN,ZL]の値は、公知の方法である動的視差法を用いることによって算出することことができる。正規化されたoptical flowの値q2の距離範囲は、カメラ200により撮影された任意の時間tの動画像において一定であるため、相対距離範囲と見なすことができる。
[特徴3:仮想世界座標系に対して仮想面を設定する]
図2を参照して既に説明したように、CPU104は、仮想レーザの発信源から発せられた仮想レーザが、仮想世界座標系に配置された動画像上の画素を通過して、仮想世界座標系に存在する仮想的な撮影対象物に当たるように、仮想レーザの発信源の設定を行う。ここで、仮想レーザが動画像に映る「地面」の画素を通過して、仮想世界座標系の仮想地面に当たる場合を考える。仮想レーザの発信源の座標は、動画像の中心座標(Xx,Xy,Xz)から撮影対象物とは反対側(図2の紙面左上方向)へ垂直に伸びる法線上であって、動画像の中心座標(Xx,Xy,Xz)からL画素の位置に存在すると考える。法線ベクトル(a,b,c)は正規化されたものであるため、L(a,b,c)の距離は画素数Lの長さに対応する。仮想レーザの発信源(x0,y0,z0)から発せられた仮想レーザが、動画像の平面上の画素(sx,sy,sz)を通過して、仮想地面に当たる場合における仮想レーザの通過線(軌跡線)上の座標を、図2に示すように、(p,q,r)とする。この座標(p,q,r)は、次の式7で表すことができる。
(p,q,r)=(1-t)(x0,y0,z0)+t(sx,sy,sz)
・・・式7
仮想レーザの発信源の座標(x0,y0,z0)と、動画像上の座標(sx,sy,sz)は、既に説明したように既知の座標である。また、仮想世界座標系において、仮想地面のy座標の値は0である。このため、図6に示すように、仮想レーザの通過線が仮想地面に当たる位置の座標を(p*,0,r*)として表すことができる。従って、仮想地面における座標(p*,0,r*)は、上述した式7に基づいて、次の式8として表すことができる。
(p*,0,r*)=(1-t)(x0,y0,z0)+t(sx,sy,sz)
・・・式8
式8のy座標の値が0であることから、0=(1-t)y0+tsyとなる。また、上述したようにy0とsyとは既知の座標の値であることから、tの値を決定することができる。tの値が決定されれば、x0,z0,sx,szが既知の値であるため、p*およびr*の値を算出することができる。
仮想地面(p*,0,r*)から動画像上の座標(sx,sy,sz)までの仮想距離は、仮想世界座標系の画素単位で∥(sx,sy,sz)-(p*,0,r*)∥となる。この仮想距離は、仮想レーザの発信源より発せられた仮想レーザが、動画像上の画素座標(sx,sy,sz)を通過して、途中で障害物に遮られることなく仮想地面(p*,0,r*)に到達したときの、動画像上の画素位置(sx,sy,sz)から仮想地面(p*,0,r*)までの仮想距離に該当する。この仮想距離は、動画像上の画素座標(sx,sy,sz)に依存している。そして、動画像上の座標(sx,sy,sz)から仮想地面(p*,0,r*)までの、仮想レーザの通過線(軌跡線)による仮想距離のダイナミックレンジ(距離範囲)は、画素単位で[0, ∥(sx,sy,sz)-(p*,0,r*)∥](0から∥(sx,sy,sz)-(p*,0,r*)∥までの範囲)と定めることができる。
従って、仮想レーザが動画像上の座標(sx,sy,sz)を通過して、仮想世界座標系の仮想地面(p*,0,r*)に到達することが可能な場合には、動画像上の座標(sx,sy,sz)毎に、動画像上の座標(sx,sy,sz)から仮想地面(p*,0,r*)までの仮想距離(∥(sx,sy,sz)-(p*,0,r*)∥)を決定することができる。このようにして決定される、動画像の各画素から仮想地面までの仮想距離は、仮想地面に対するキャリブレーションデータとなる。
また、動画像に映る撮影対象物が地面以外の他の部分に該当する場合には、仮想世界座標系においても他の部分に該当する仮想面を設定することにより、動画像上の座標(sx,sy,sz)から仮想面までの仮想距離を決定することができる。例えば、動画像に空が映っている場合に、空に該当する仮想面として遠方の仮想正面壁を設定することにより、動画像の空に該当する画素位置に対して、動画像上の各画素から空までの仮想距離を決定することができる。
動画像の全ての画素毎に動画像からの仮想距離を決定することにより、全ての画素に対応するキャリブレーションデータを作成することができる。全ての画素のキャリブレーションデータは、仮想世界座標系における画素単位の距離データである。このため、CPU104は、全ての画素のキャリブレーションデータを現実世界の長さに変換した後に、動画像の画素位置に対応させて行列形式に並べて記録することにより、行列データを作成する。行列データの要素は、仮想世界座標系における動画像上の各画素位置から仮想面までの仮想距離に対応する、現実世界の単位長の補正距離を示す。なお、行列データとして、各画素に対応する補正距離のダイナミックレンジを設定することも可能である。
このように、実施の形態に係る補正距離算出装置100のCPU104において、仮想世界座標系に仮想面を設定することにより、動画像の各画素の画素位置から仮想面までの仮想距離を求めることができ、この仮想距離を用いて補正距離を算出することが可能となる。
ここで、従来の動的視差法を用いて、カメラ200で撮影された画像に映る撮影対象物からカメラ200までの算出距離を求める方法を、再度確認する。従来の動的視差法では、時刻t-1から時刻tまでのわずかに時間が異なる動画像から、撮影対象物の画素のoptical flowを検出して、optical flowの値q1を、画素単位の軌跡(画素数)により求める。optical flowの値q1は、動画像に映る複数の撮影対象物の画素(ターゲットピクセル)毎に求められ、時刻tにおいてoptical flowの値が最も小さいものをμ(t)、最も大きいものをγ(t)とする。この場合、求められたoptical flowの値q1は、μ(t)≦q1≦γ(t)となる。その後、既に説明したように、μ0、γ0、、μ(t)、γ(t)を用いてoptical flowの値q1を正規化することによりoptical flowの値q2が算出され、正規化されたoptical flowの値q2は、μ0≦q2≦γ0となる。また、動的視差法では、事前に測定された撮影対象物における最も近い距離ZNと最も遠い距離ZLに基づいて、ZN≦Z≦ZLの範囲で算出距離Zが計算される。そして、動的視差法では、カメラ200から撮影対象物までの算出距離を算出するための関数Z(q2)=ae・exp(b・q2)の係数aおよびbを決定する。
このように算出距離Zは、動画像の画素の座標(sx,sy,sz)毎に算出されるが、実施の形態に係る補正距離算出装置100のCPU104では、上述した座標(sx,sy,sz)に依存する、現実世界の単位長に変換されたキャリブレーションデータ(補正距離)を用いて、動的視差法により求められた画素毎の算出距離Z(q2)の補正を行う。このキャリブレーションデータによる補正は、上述したように、仮想世界座標系に対して仮想面を設定することにより実現される。
既に説明したように、仮想レーザが、仮想レーザの発信源(x0,y0,z0)から発せられ、カメラ200で撮影された動画像上の画素(sx,sy,sz)を通過する場合には、仮想レーザの通過線(軌跡線)を、式7で表すことができる。
(p,q,r)=(1-t)(x0,y0,z0)+t(sx,sy,sz)
・・・式7
ここで、tは任意の係数である。上述したキャリブレーションデータによる補正を行うため、CPU104では、仮想世界座標系において仮想レーザが到達する範囲に、仮想地面や、仮想壁や、仮想床や、仮想の物体等の仮想面を設定する。つまり、CPU104は、動画像の各画素(sx,sy,sz)から仮想レーザが到達する地点までの距離範囲に、仮想面による制約を加える。
既に説明したように、仮想レーザの発信源から仮想レーザが、動画像上の座標(sx,sy,sz)を通過して、途中で障害物に遮られることなく仮想地面に到達した場合、動画像上の画素位置から仮想地面までの仮想距離は、∥(sx,sy,sz)-(p*,0,r*)∥と示すことができ、この仮想距離のダイナミックレンジ(仮想距離の距離範囲)は、動画像上の画素位置(sx,sy,sz)に依存する。例えば、動画像上の画素位置(sx,sy,sz)に依存する仮想レーザの通過線において、仮想壁や仮想地面などの仮想レーザの到達点を想定する。この想定により、動画像の画素位置から、途中に障害がなければ仮想レーザが到達し得る位置までの最大の仮想距離は、動画像の画素位置から仮想壁や仮想地面までの仮想距離となる。
つまり、上述した仮想レーザの通過線を示す式7
(p,q,r)=(1-t)(x0,y0,z0)+t(sx,sy,sz)
・・・式7
において、(p,q,r)の一部の変数の値を、仮想地面や仮想壁の存在によって生じる境界条件の値として設定することができる。
既に説明した仮想地面の場合には、(p,q,r)における境界条件が(p*,0,r*)となる。これらの境界条件から、式7のtの値を求めることにより、p=p*、r=r*が決まり、動画像上の位置(sx,sy,sz)の各画素が取り得る最大の仮想距離が、∥(sx,sy,sz)-(p*,0,r*)∥として求められる。画素毎に求められた動画像から撮影対象物までの仮想距離[pixel]が、仮想レーザの通過線上の座標であって、∥(sx,sy,sz)-(p*,0,r*)∥よりも近い仮想距離である場合には、仮想壁や仮想地面などよりも動画像に近い位置に、仮想対象物が存在すると判断することができる。このような仮想面による制約の設定によって、仮想世界座標系における動画像上の画素位置から仮想レーザの到達点までの仮想距離の精度を高めることができる。このような制約の導入を「(x, y, z)-dependent calibration」と称する。
従来の動的視差法では、カメラ200から撮影対象物までの算出距離を計算する場合に、仮想面等による制約が全く用いられていなかったため、動画像の画素毎に算出される算出距離のダイナミックレンジにも制約が設定されていなかった。
具体的には、動画像において撮影対象物が映る画素(ターゲットピクセル)のうち、移動画素数が最も少ない画素数μ0、および、移動画素数が最も多い画素数γ0と、撮影対象物からカメラ200までの現実距離のうちで最も近い距離ZN、および、最も遠い距離ZLとを用いて、動画像に映る撮影対象物の画素毎に、カメラ200から撮影対象物までの算出距離を算出していた。この場合、動画像に映る撮影対象物が、カメラ200から近い距離に存在する場合であっても、遠い距離に存在する場合であっても、一律に、最も近い距離ZNと最も遠い距離ZLとを用いて算出距離を求めていたため、動画像の画素毎に、カメラ200から撮影対象物までの算出距離のダイナミックレンジに制約を設けることがなかった。
実施の形態に係る補正距離算出装置100では、仮想距離のダイナミックレンジに制約を設定することにより補正距離を算出し、従来の動的視差法で算出されたカメラ200から撮影対象物までの算出距離を、補正距離を用いて画素毎に補正することができる。
さらに、実施の形態に係る補正距離算出装置100では、仮想距離のダイナミックレンジに制約を設けるだけでなく、仮想世界座標系を構築することにより、従来の動的視差法で用いられていた現実世界の距離のダイナミックレンジ[ZN,ZL]よりも、ダイナミックレンジの分解能を高めることができる。
例えば、μ0からγ0までの間隔が10000pixelであるときに、ZNからZLまでの間隔を20000pixelと仮定すると、極めて詳細な仮想距離のダイナミックレンジを設定することができる。仮想世界座標系で20000pixelが現実世界において100cmに対応する場合には、現実世界における1/200cmが、仮想世界座標系における1画素に対応する。この場合には、対応長さ情報が、200[pixel/cm]となる。
時刻tにおいて、動画像の画素位置(sx,sy,sz)で測定されるoptical flowをq(sx,sy,sz)とし、同時刻に動画像の画面全体で測定されるoptical flowのダイナミックレンジを[μ(t),γ(t)]とし、さらに事前に定められた正規化されたoptical flowのダイナミックレンジを[μ0,γ0]として、測定されたoptical flowであるq(sx,sy,sz)を、正規化されたoptical flowに変換する。事前に測定されて正規化された現実距離のダイナミックレンジを[ZN,ZL]として、正規化されたoptical flowの値q2を、算出距離Z∈[ZN,ZL]に変換する。このとき、算出距離Zは前述した制約によるキャリブレーションが行われていないものとする。
例えば、既に説明した仮想地面では、動画像の画素位置(sx,sy,sz)から撮影対象物までの仮想距離のダイナミックレンジにおいて、仮想地面による制約が設定されるため、距離が最大で、∥(sx,sy,sz)-(p*,0,r*)∥[pixel]であった。しかしながら、現実距離のダイナミックレンジ[ZN,ZL]には、このような制約が入っていない。ただし、分解能が[ZN,ZL]という形で入っている。
そこで、動画像の画素位置(sx,sy,sz)に依存する仮想距離のダイナミックレンジを、[Dmin(sx,sy,sz),Dmax(sx,sy,sz)][pixel]とする。例えば、一例として、[Dmin(sx,sy,sz),Dmax(sx,sy,sz)]=[30000,80000]となる場合を考える。このときの30000pixelが3mに対応し、80000pixelが8mに対応すると、上述した正規化された現実距離のダイナミックレンジにより得られた算出距離Zは、
d(sx,sy,sz)=(Dmax(sx,sy,sz)-Dmin(sx,sy,sz))・Z/(ZL-ZN)+Dmin(sx,sy,sz)
に変換することができる。この結果は、仮想世界座標系の画素単位で示された算出距離d(sx,sy,sz)を示す。
ここで重要な点として、制約の設定を「(x, y, z)-dependent calibration」として適用する場合、各時刻の動画像に関して、事前に、[Dmin(sx,sy,sz),Dmax(sx,sy,sz)]を要素とする行列データを一度作成し、任意の時刻tにおいてカメラ200で撮影された動画像の全ての画素(sx,sy,sz)に適用することである。
動画像の法線ベクトルが一定である場合には、動画像の全ての画素に対して、行列データを一度適用して計算するだけでよいが、時刻とともにカメラ200の撮影方向が変化して動画像の法線ベクトルが変化する場合には、各時刻t毎に行列データを適用する必要がある。法線ベクトルの変化が、首振りカメラのように周期的に変化する場合には、一周期の半分だけ行列データを作成しておく必要がある。また、仮想世界座標系において求められる動画像の画素位置から撮影対象物までの仮想距離は、画素単位の距離であるため、現実距離に変換するために、初期情報として記録部101に記録された「対応長さ情報」を用いて、画素長[pixel]から現実世界の距離cmへ、補正距離を変換する必要がある。
仮想地面までの仮想距離に変換されたd(sx,sy,sz)に関し、optical flowの値に基づいて計算された動画像の画素毎の距離が、∥(sx,sy,sz)-(p*,0,r*)∥よりも小さい場合には、仮想レーザの発信源から発せられた仮想レーザが仮想地面に到達するよりも手前の位置であって、仮想レーザの通過線上の位置に、仮想の障害物などが存在することになる。
また、カメラ200で撮影した動画像の道路に該当する部分が、テクスチャーのない状態で映っている場合には、optical flowを検出してもoptical flowの値が検出されないか、あるいは極めて小さくなってしまい、optical flowの値に基づいて算出される算出距離が遠くなってしまう可能性がある。この場合には、仮想距離のダイナミックレンジの最大値として∥(sx,sy,sz)-(p*,0,r*)∥を与える。このような仮想距離のダイナミックレンジに対して最大値を設定することにより、現実世界の距離に対応した、より誤差の少ない算出距離を導くことになる。このように、仮想面の存在を制約として設定しておくことにより、「(x, y, z)-dependent calibration」を適用してキャリブレーション時の最大値を超えない仮想距離を、ダイナミックレンジの最大値とすることができる。このため、動画像においてテクスチャーのない状態の部分があっても、制約の範囲内に仮想距離でダイナミックレンジが制限されることになる。従って、このような制約を設定した仮想距離に基づいて補正距離を算出して算出距離を補正することにより、算出距離に発生する誤差を抑制することが可能にある。
動的視差法のように、道路等の制約を入れない場合には、optical flowの値の最小値μ0に対応する現実世界の距離がZLとなって、最も遠方の距離(例えば空に基づく距離)を基準として、カメラ200から撮影対象物までの算出距離が算出される。このため、動的視差法に基づいて算出された算出距離は、不自然な結果を招いてしまうおそれがある。このため、仮想世界座標系において仮想地面(仮想道路)、仮想側面壁、仮想正面壁などの仮想面を設定することは、カメラ200から撮影対象物までの仮想距離の算出においてキャリブレーションを行うことになる。実施の形態に係る補正距離算出装置100では、仮想地面(仮想道路)、仮想側面壁、仮想正面壁などの仮想面を設定し、仮想レーザが到達する仮想面までの長さを最大の仮想距離とすることを特徴とするため、全ての物体が、仮想壁に張り付いているか、仮想地面の上に存在するという想定に基づいて、カメラ200で撮影された動画像の画素位置から撮影対象物までの仮想距離が算出される。
また、実施の形態に係る補正距離算出装置100では、仮想世界座標系を構築して、動画像の画素毎に撮影対象物までの仮想距離を算出するため、仮想距離に基づいて求められる補正距離によって算出距離が補正され、補正された算出距離の距離情報に基づいて3次元動画像を生成した場合であっても、動画像のブレを抑制することができる。
例えば、カメラ200そのものが動く場合、時刻tに撮影された動画像における各画素の算出距離による距離情報と、時刻t+1に撮影された動画像における各画素の算出距離による距離情報とでは、距離情報の基本となるカメラ200の位置が異なっている。このカメラ200の位置の時間変化を考慮しないで、単に算出距離による距離情報に基づいて3次元動画像を作成すると、カメラ200の位置の変化によってブレが発生する。特に、カメラ200の移動速度や方向が変化する場合には、このブレが顕著になってしまうとともに、その修正が容易ではなかった。
補正距離算出装置100では、CPU104において、仮想カメラの座標(Xx,Xy,Xz)が時間経過に応じて変化することを前提にして、時刻t毎に変化した仮想カメラの位置座標と、この仮想カメラの位置座標から撮影対象物までの仮想距離とを算出することにより補正距離を算出し、算出された補正距離で算出距離を補正することにより、3次元動画像を作成することができる。このように、カメラの位置変化を考慮して3次元動画像を作成することにより、作成された3次元動画像を、仮想世界座標系に沿った3次元空間の動画像とすることができる。仮想世界座標系という固定された空間に基づいて3次元動画像を作成することにより、動画像に生ずるブレを抑制することが可能になる。
上述したように、仮想世界座標系を構築すると同時に、現実世界の制約を仮想世界座標系に設定することにより、カメラ200により撮影された動画像の画素毎に、カメラ200から撮影対象物までの算出距離の算出精度を高めることができる。実施の形態に係る補正距離算出装置100では、制約として仮想地面(仮想道路)を設定した場合について説明したが、制約となる仮想面は、仮想地面には限定されない。
例えば、仮想面として、仮想地面(仮想道路)だけでなく、前述したように、仮想正面壁、仮想側面壁などを任意で設定(想定)することができる。仮想地面を示す仮想世界座標系の位置座標は、仮想レーザの通過線を示す位置座標(p,q,r)のyの値が0となる場合、つまり(p*,0,r*)の場合である。同様に、仮想カメラの右側に存在する仮想側面壁の位置座標は、動画像の中心位置よりも高い値を示すx軸上の一定値の位置座標、例えば、(A1,q*,r*)(A1は定数、ただしA1>Xx)となる。また、仮想カメラの左側に存在する仮想側面壁の位置座標は、動画像の中心位置よりも低い値を示すx軸上の一定値の位置座標、例えば、(A1,q*,r*)(A1は定数、ただしA1<Xx)となる。もし、仮想カメラの位置座標がx軸上の座標で0の場合には、右側に位置する仮想側面壁のxの値は正の値となり、左側に位置する仮想側面壁のx軸の値は負の値となる。
さらに、仮想カメラの正面に存在する仮想正面壁の位置座標は、例えば、(p*,q*,A2)(A2は定数、ただしA2>Xz)となる。仮想面(仮想地面、仮想側面壁、仮想正面壁等)と、仮想レーザの通過線との交点は、一意的に決まる。
また、仮想面の設定は、単一平面には限定されない。複数の面が組み合わされた複雑な形状なものであってもよく、曲面によって構成されるものであってもよい。仮想面に仮想レーザが到達した場合、仮想レーザの到達点は、仮想レーザの通過線を示す直線と、仮想面との交点として定まる。この交点の座標を(p*,q*,r*)とすると、この交点から動画像上の画素位置(sx,sy,sz)までの仮想距離は、(x, y, z)-dependent calibrationにおける仮想距離のダイナミックレンジの最大値、つまり∥(sx,sy,sz)-(p*,q*,r*)∥を決定するものとなる。
つまり、動的視差法により求められるoptical flowの値を正規化した値(正規化されたoptical flowの値)と、正規化された現実距離とは対応しているが、正規化された現実距離のダイナミックレンジを示す[ZN,ZL]の最大値であるZLは、仮想世界座標系における画素単位の仮想距離の最大値∥(sx,sy,sz)-(p*,q*,r*)∥に相当する。
仮想世界座標系における動画像上の画素位置(sx,sy,sz)から撮影対象物までの仮想距離をd(sx,sy,sz)とし、現実世界における地上からのカメラ200の高さ(物理的高さ)をh[cm]とすると、現実世界における1[cm]に対応する仮想世界座標系の画素長との対応関係(対応長さ情報)を用いることにより、現実世界におけるカメラ200から撮影対象物までの補正距離[cm]を求めることができる。現実世界におけるカメラ200から撮影対象物までの補正距離[cm]を、Dr(sx,sy,sz)[cm]とすると、
Dr(sx,sy,sz)
=d(sx,sy,sz)÷対応長さ情報([pixel/cm])・・・式9
で求めることができる。
式9による現実世界の距離[cm]と、仮想世界座標系の仮想距離[pixel]との対応関係は、仮想面(仮想地面、仮想道路、仮想側面壁、仮想正面壁、仮想曲面等)に関してもそのまま適用することができる。なお、仮想世界座標系において空に該当する範囲については、無限遠として処理するのではなく、既に説明したように、遠方に存在する有限な仮想距離の仮想正面壁を設定することにより、空に対応する補正距離の検出を行うことが可能となる。
[仮想世界座標系における仮想距離と仮想カメラの位置座標との関係]
次に、(x, y, z)-dependent calibrationの仮想距離に対する仮想カメラの位置座標(Xx,Xy,Xz)の依存性について説明する。図6は、仮想レーザの発信源(x0,y0,z0)から発せられた仮想レーザが、動画像上の画素位置(sx,sy,sz)を通過して、仮想地面(p*,0,r*)に到達した状態を示した図である。
既に説明したように、仮想レーザの通過線の座標を(p,q,r)とすると、仮想レーザの通過線の座標は、次の式7で示すことができる。
(p,q,r)=(1-t)(x0,y0,z0)+t(sx,sy,sz)
・・・式7
仮想レーザが仮想地面に到達したときの、仮想地面の座標は(p*,0,r*)である。このため、式7におけるyの値qがq=0となり、0=(1-t)y0+tsyとなる。
このtの値をt*とすると、t*=y0/(y0-sy)となる。
このt*の値を、式7のx座標とz座標とにおける関係式に代入することにより、
p*=(1-t*)x0+tsx
r*=(1-t*)z0+tsz
として、仮想地面の座標を求めることができる。
また、仮想レーザが仮想地面に到達したときの、仮想地面(p*,0,r*)から動画像上の画素位置(sx,sy,sz)までの仮想距離の最大値、Dmax(sx,sy,sz)は、
Dmax(sx,sy,sz)=∥(sx,sy,sz)-(p*,0,r*)∥
で示される。
ここで、動画像上の画素位置(sx,sy,sz)は、既に説明したように、カメラ200で撮影された動画像の各画素に対応する3次元の点(α、β、φ)として、
(sx,sy,sz)=(Xx,Xy,Xz)+k(α-αa, β-βa, φ-φa)
・・・・式10
として求めることができる。αaはαの平均であり、βaはβの平均であり、φaはφの平均である。また、kは定数である。この式10から明らかなように、動画像上の画素位置(sx,sy,sz)は、動画像の中心位置(Xx,Xy,Xz)に関連する位置となっている。式10のx座標の関係式より、仮想レーザが通過する動画像上の画素のx座標は、sx=Xx+k(α-αa)と示すことができる。
また、既に説明したように、仮想レーザの発信源の座標(x0,y0,z0)は、
(x0,y0,z0)=(Xx,Xy,Xz)+L(a,b,c) ・・・式5
で示すことができる。式5のx座標の関係式より、仮想レーザの発信源の座標のx座標は、x0=Xx+Laと示すことができる。
一方で、上述した式7より、p*=(1-t*)x0+t*sxである。従って、
p*=(1-t*)x0+t*sxに対して、x0=Xx+Laと、sx=Xx+k(α-αa)を代入すると、
p*=(1-t*)(Xx+La)+t*(Xx+k(α-αa))
=Xx+La+t*(k(α-αa)-La)
従って、p*-sxは、
p*-sx
=(Xx+La+t*(k(α-αa)-La))-(Xx+k(α-αa))
=La-k(α-αa)+t*(k(α-αa)-La)
となる。
既に説明した
Dmax(sx,sy,sz)=∥(sx,sy,sz)-(p*,0,r*)∥
を考慮すると、Dmaxのxの値sxは、∥sx-p*∥であり、p*-sxの絶対値で示されるため、上述した
p*-sx=La-k(α-αa)+t*(k(α-αa)-La)
の式から、Dmax(sx,sy,sz)のx座標の値∥p*-sx∥は、動画像の中心画素のx座標の値Xxから独立であり、t*もXxから独立であると判断することができる。
また、同様にして、上述した式7のz座標の関係式より、
r*=(1-t*)z0+t*sz
と表すことができる。
式5のz座標の関係式より、仮想レーザの発信源の座標のz座標は、
z0=Xz+Lcと
表すことができ、式10のz座標の関係式より、仮想レーザが通過する動画像上の画素のz座標は、
sz=Xz+k(γ-γa)と表すことができる。
このz0=Xz+Lcとsz=Xz+k(γ-γa)とを用いて、r*=(1-t*)z0+t*szの式を変形すると、
r*=(1-t*)(Xz+Lc)+t*(Xz+k(γ-γa))
=Xz+Lc+t*(k(γ-γa)-Lc)
また、sz=Xz+k(γ-γa)を用いて、
r*-sz=Xz+Lc+t*(k(γ-γa)-Lc)-(Xz+k(γ-γa))
=Lc-k(γ-γa)+t*(k(γ-γa)-Lc)
となる。
Dmax(sx,sy,sz)=∥(sx,sy,sz)-(p*,0,r*)∥を考慮すると、Dmaxのz座標の値szは、∥sz-r*∥であり、r*-szの絶対値で示される。このため、
r*-sz=Lc-k(γ-γa)+t*(k(γ-γa)-Lc)
の式から、Dmax(sx,sy,sz)のz座標の値∥p*-sz∥は、動画像の中心画素のz座標の値Xzから独立であると判断できる。
一方で、式10のy座標の関係式より、仮想レーザが通過する動画像上の画素のy座標は、
sy=Xy+k(β-βa)
と表すことができ、中心画素のy座標の値Xyに依存していると判断できる。
このため、Dmax(sx,sy,sz)のy座標の値∥p*-sy∥は、動画像の中心画素のy座標の値Xyに依存していると判断することができる。
上述した数式を用いて説明したように、動画像上の画素位置(sx,sy,sz)から仮想地面(仮想道路)までの仮想距離の最大値Dmax(sx,sy,sz)は、仮想世界座標系におけるカメラの位置座標(Xx,Xy,Xz)(動画像の中心位置)のx座標の値Xxには依存しない。同様に、仮想地面(仮想道路)までの仮想距離の最大値Dmax(sx,sy,sz)は、仮想世界座標系におけるカメラの位置座標(Xx,Xy,Xz)のz座標の値Xzには依存しない。しかしながら、仮想地面(仮想道路)までの仮想距離の最大値Dmax(sx,sy,sz)は、仮想世界座標系におけるカメラの位置座標(Xx,Xy,Xz)のy座標の値Xyに依存する。仮想世界座標のXyの値(画素数)は、現実世界における地上からカメラ200までの高さhに対応する値である。
上述した説明は、仮想地面(仮想道路)を想定した場合において、最大値Dmax(sx,sy,sz)が仮想カメラの位置座標(Xx,Xy,Xz)(動画像の中心位置)のどの要素に依存するか否かの説明であるが、仮想カメラの左側あるいは右側に仮想側面壁が存在する場合や、仮想カメラの正面に仮想正面壁が存在する場合においても同様に考えることができる。
仮想側面壁の場合には、仮想側面壁に仮想レーザが到達した座標を(p0,q,r)として境界条件を考えれば、仮想側面壁までの仮想距離の最大値Dmax(sx,sy,sz)は、Xx,p0には依存するが、Xy,Xzには依存しない。つまり、仮想カメラから仮想側面壁までの仮想距離の最大値Dmax(sx,sy,sz)は、仮想カメラの位置座標(Xx,Xy,Xz)(動画像の中心位置)のうちx座標の値Xxにのみ依存する。
また、仮想正面壁の場合には、仮想正面壁に仮想レーザが到達した座標を(p,q,r0)として境界条件を考えれば、仮想正面壁までの仮想距離の最大値Dmax(sx,sy,sz)は、Xz,r0には依存するが、Xx,Xyには依存しない。つまり、仮想カメラから仮想正面壁までの仮想距離の最大値Dmax(sx,sy,sz)は、仮想カメラの位置座標(Xx,Xy,Xz)(動画像の中心位置)のうちz座標の値Xzにのみ依存する。
また、カメラ200の傾きが変化することにより、カメラ200により撮影された動画像の画面の法線(a,b,c)が変化する場合、仮想距離の最大値Dmax(sx,sy,sz)は、法線の変化に影響を受けるため、依存性を有することになる。法線の変化に対する依存性を考慮することは、事前にキャリブレーションデータによる行列データを作成するときに重要である。つまり、仮想距離の最大値Dmax(sx,sy,sz)の算出において、依存性の高い要素を予め明確にしておくことにより、無駄に行列データ(キャリブレーションデータ)を作成することを防止することができ、処理負担の軽減を図ることが可能になる。
以上説明したように、CPU104は、カメラの高さ情報や対応長さ情報を用いて、現実世界におけるカメラ200の高さ位置や現実世界の単位長に対応する画素数を求めることにより、現実世界のカメラの高さに対応する、仮想世界座標系の仮想カメラの位置座標(Xx,Xy,Xz)の画素値(x軸方向の画素値Xx,y軸方向の画素値Xy,z軸方向の画素値Xz)を求めて、仮想世界座標系を構築することができる。
また、CPU104は、ジャイロセンサ220等を用いてカメラ200の傾きを検出することにより、仮想世界座標系における動画像の法線ベクトルを決定することができ、カメラの焦点距離に関する情報を用いることにより、法線ベクトルの延長上に位置する仮想レーザの発信源の座標を算出することができる。
さらに、CPU104は、仮想世界座標系に対して、現実世界の道路や周囲の建物等を考慮して、仮想地面(仮想道路)、仮想側面壁、仮想正面壁などの仮想面を制約条件として設定することにより、仮想世界座標系における動画像の画素毎の仮想距離の最大値Dmax(sx,sy,sz)を算出することができる。
また、CPU104は、仮想世界座標系における動画像の画素毎の距離の最大値Dmax(sx,sy,sz)を、対応長さ情報に基づいて現実世界の単位長さに変更することにより、現実世界におけるカメラ200から撮影対象物までの補正距離を算出することができる。
このようにして、CPU104で算出された画素毎の補正距離を、既に説明したキャリブレーションデータとして用いて、カメラが設定される状態に応じて事前に行列データを作成しておくことにより、動的視差法により画素毎に求められたカメラ200から撮影対象物までの算出距離に対して、補正距離に基づく補正処理を行うことが可能になり、より正確な算出距離を算出することができる。
実施の形態に係る補正距離算出装置100において、補正距離を用いて補正処理を行う対象となる算出距離は、既に説明したAMP(Accumulated-Motion-Parallax)法、FMP(Frontward-Motion-Parallax)法、および、optical flowの値を動的視差と見なす動的視差法により算出された算出距離には限定されない。実施の形態に係る補正距離算出装置100では、カメラ200によって撮影された画像の画素毎にカメラ200から撮影対象物までの算出距離が算出されたものであれば、いかなる方法で算出された算出距離に対しても、補正処理を行うことが可能である。
最後に、実施の形態に係る補正距離算出装置100が車両に設置される状態において、補正距離を算出する場合を一例として示すことにより、具体的な説明を行う。図7は、補正距離算出装置100のCPU104が、動的視差法により算出されたカメラ200から撮影対象物までの算出距離を、補正距離を用いて補正する処理を示したフローチャートである。
車両が高速道路を走行する場合、一般的な高速道路では、対向車線との間に、中央分離体からなる側壁が設けられており、さらに反対側の側面には防音壁等からなる側壁が設けられている。さらに、一般的な高速道路は、2車線あるいは3車線の左右方向の広さが確保されている。従って、高速道路を走行する車両に補正距離算出装置100が設置される場合、カメラ200を通して撮影される車両前方の動画像には、道路と、左右の側壁とが存在する。また、車両の前方方向には、前方を走行する他の車両や、遠方のカーブに伴って正面へと回り込んだ側壁等が存在する場合もある。このような場合には、前方向に存在する他の車両や壁面が、正面壁として存在することになる。
補正距離算出装置100のCPU104では、例えば、図示を省略したGPSデータに基づいて、あるいは車載されるカーナビゲーションシステムの地図データに基づいて、車両が高速道路を走行しているか否かを判断することが可能である。車両が高速道路を走行していると判断した場合、CPU104は、高速道路の走行状況に対応する仮想世界座標系を構築し、仮想道路と、左右の仮想側面壁と、仮想正面壁とを制約として設定する。
高速道路の1車線の道路幅は、一般的に約3.5mである。高速道路には、2車線あるいは3車線分の道路に加えて、路側帯も存在するため、防音壁(左側の側壁)から中央分離帯(右側の側壁)までの一般的な左右幅は、10m程度になる。車両がどの車線を走行しているかによって、左右の側壁までの距離は変化するが、GPSや地図データにより走行車線を判断することによって左右の側壁までの距離を判断することができる。あるいは、カメラ200により撮影された動画像を画像解析することにより、走行車線を判断して左右の側壁までの距離を判断したり、ミリ波レーダー等を用いて直接左右の側壁までの距離を求めることも可能である。さらに、車両の走行車線等が判断できない場合であっても、高速道を走行していることだけ判断できれば、少なくとも左右数メートル程度の距離に側壁が存在すると想定することもできる。
CPU104は、車両が高速道路を走行しており、現実世界において道路や側壁や正面壁が存在すると判断した場合、記録部101に記録される初期情報を読み出した後に(ステップS.1)、仮想世界座標系を構築する(ステップS.2:仮想世界座標系構築ステップ、仮想世界座標系構築機能)。この処理において、CPU104は、仮想世界座標系構築手段として機能する。
具体的に、CPU104は、記録部101から、(1)カメラ200の焦点距離の情報、(2)カメラ200の傾きに関する情報、(3)対応長さ情報(現実世界の単位長さに対応する仮想世界座標系の画素数に関する情報)、(4)現実世界におけるカメラ200の高さ情報を読み出す(ステップS.1)。CPU104が仮想世界座標系を構築する場合には、初期情報として読み出した対応長さ情報、カメラ200の高さ情報が用いられる。
車両にカメラ200が設置される場合、地面からカメラ200までの高さは、一般的に一定であり、現実世界におけるカメラ200の高さが変化する可能性は低い。記録部101から読み出された(3)対応長さ情報が、例えば40[pixel/cm]であり、車両に設置されるカメラ200の高さ((4)現実世界におけるカメラ200の高さ情報)が150cmであった場合には、仮想世界座標系における仮想カメラの高さ、つまり、動画像の中心画素のy軸の値が、6000pixel(=150cm×400[pixel/cm])に設定される。CPU104は、対応長さ情報と、カメラ200の高さ情報とに基づいて、対応するスケールの仮想世界座標系を、メモリ(RAM103)上に構築する。
次に、CPU104は、構築された仮想世界座標系に対して、カメラ200によって撮影された動画像を配置する処理を行う(ステップS.3:画像配置ステップ、画像配置機能)。この処理において、CPU104は、画像配置手段として機能する。動画像の中心画素の座標(Xx,Xy,Xz)において、上述したように、y軸の値Xyは、Xy=6000pixelである。x軸の値Xxは、任意に設定することができるが、後述する左右の側壁までの距離を考慮して、Xx≧20000pixelに設定することが好ましい。また、z軸の値Xzは、任意に設定することができる。
さらに、CPU104は、記録部101より読み出された(2)カメラ200の傾きに関する情報に基づいて、仮想世界座標系に配置される動画像の傾きの設定を行う。カメラ200の傾きに関する情報により求められる情報は、ジャイロセンサ220によって求められた回転パラメータの情報であり、この回転パラメータの情報に基づいて決定されるx軸、y軸、z軸の傾きに対するパラメータは、動画像における法線(a,b,c)の方向に対応する。
このため、CPU104は、(4)カメラ200の高さ情報に基づき決定される動画像の中心画素の座標(Xx,Xy,Xz)と、(2)カメラ200の傾きに関する情報に基づいて決定される動画像の法線方向とに基づいて、仮想世界座標系に対して動画像を配置することができる。このように、仮想世界座標系に対して動画像を配置することにより、動画像の四角を含む全ての動画像上の各座標の位置座標を決定することができる。
次に、CPU104は、仮想レーザの発信源の位置座標を決定する処理を行う(ステップS.4:発信源座標算出ステップ、発信源座標算出機能)。この処理において、CPU104は、発信源座標算出手段として機能する。仮想レーザの発信源の位置座標(x0,y0,z0)は、既に説明した式5に基づいて、(x0,y0,z0)=(Xx,Xy,Xz)+L(a,b,c)により算出することができる。動画像の中心画素の座標(Xx,Xy,Xz)は、既にステップS.3の処理によって決定されており、動画像の法線(a,b,c)も、既にステップS.3の処理によって決定されている。このため、係数Lが決定されれば、仮想レーザの発信源の位置座標(x0,y0,z0)を決定することができる。
CPU104は、記録部101より読み出した(1)カメラ200の焦点距離の情報に基づいて係数Lを決定する。既に説明したように、係数Lは、カメラ200の画角に影響する係数であり、カメラ200の焦点距離に対応する係数である。このため、CPU104は、カメラ200の焦点距離に基づいて係数Lを決定し、決定された係数Lと、既に決定されている動画像の法線(a,b,c)と、動画像の中心画素の座標(Xx,Xy,Xz)とに基づいて、仮想レーザの発信源の座標(x0,y0,z0)を決定する。
次に、CPU104は、仮想世界座標系に対して仮想面の設定を行う(ステップS.5:仮想面設定ステップ、仮想面設定機能)。この処理において、CPU104は、仮想面設定手段として機能する。CPU104は、カメラ200により撮影された動画像を画像解析することにより、あるいは、GPSや地図データを利用することにより、走行車線を判断する。例えば、車両が高速道路の3車線のうちの中央の車線を走行している場合には、既に説明したように、現実世界における左右の側壁までの距離がそれぞれ5m(=500cm)であると判断することができる。
CPU104は、記録部101から読み出した対応長さ情報に基づいて、仮想世界座標系における左右の仮想壁までの仮想距離[pixel]を算出する。上述したように、対応長さ情報が40[pixel/cm]である場合、仮想世界座標系における仮想カメラ(動画像の中心位置)から左側あるいは右側の仮想側面壁までの画素長は、20000pixel(=500cm×40[pixel/cm])となる。このため、CPU104は、動画像の中心の位置座標に対してx軸方向に+20000pixelの位置に存在する仮想側壁面と、動画像の中心の位置座標に対してx軸方向に-20000pixelの位置に存在する仮想側壁面とを設定する。
また、補正距離算出装置100は車両に設置されているため、CPU104は、車両の走行する道路に対応する仮想道路(仮想地面)を、仮想面として設定する。既に説明したように、仮想地面は、仮想カメラ(動画像の中心位置)から6000pixel下側に位置することになる。このため、CPU104は、動画像の中心の位置座標に対してy軸方向に-6000pixelの位置に存在する仮想道路を設定する。
さらに、CPU104は、カメラ200により撮影された動画像の画像解析等により、現実世界において、高速道路の前方に他車両が走行していることを判断した場合には、前方の他車両の位置に基づいて仮想正面壁を設定する。また、車両の前方に他車両等が存在しない場合であっても、カメラ200の前面に、カーブにより回り込んだ側壁が存在する場合には、回り込んだ側壁を仮想正面壁として設定する。さらに、車両前方に広がる空や遠方の建物が、動画像の画像解析により検出される場合には、車両前方の空等を仮想正面壁として設定することができる。
このようにして、仮想世界座標系に対して、仮想道路および仮想側面壁等の仮想面(制約)を設定した後に、CPU104は、動画像上の全ての画素位置(sx,sy,sz)から仮想面等を含む対象物までの仮想距離(画素数)の最大値Dmax(sx,sy,sz)を算出する(ステップS.6:到達画素数算出ステップ、到達画素数算出機能)。この処理において、CPU104は、到達画素数算出手段として機能する。
距離の最大値Dmax(sx,sy,sz)は、既に説明したように、仮想レーザの発信源(x0,y0,z0)より発せられた仮想レーザが、動画像の画素位置(sx,sy,sz)を通過して、仮想面(p,q,r)に到達した場合における各画素位置(sx,sy,sz)から仮想面(p,q,r)までの仮想距離[pixel]を示している。また、仮想距離の最大値Dmax(sx,sy,sz)は、既に説明したように、Dmax(sx,sy,sz)=∥(sx,sy,sz)-(p,q,r)∥によって算出することができる。
次に、CPU104は、算出されたターゲットピクセルの距離の最大値Dmax(sx,sy,sz)を画素単位の距離からcm(あるいはm)単位の距離へと変換する(ステップS.7:補正距離算出ステップ、補正距離算出機能)。この処理において、CPU104は、補正距離算出手段として機能する。距離の最大値Dmax(sx,sy,sz)は、仮想世界座標系の画素数で示される仮想距離であるため、現実世界の距離に変換する必要がある。CPU104は、記録部101から読み出された(3)対応長さ情報を利用して、仮想距離を現実世界の距離に変換する処理を行う。
既に説明したように、仮想世界座標系における動画像上の画素位置(sx,sy,sz)から撮影対象物までの仮想距離[pixel]をd(sx,sy,sz)とし、現実世界における補正距離をDr(sx,sy,sz)とすると、Dr(sx,sy,sz)は、
Dr(sx,sy,sz)
=d(sx,sy,sz)÷対応長さ情報([pixel/cm])・・・式9
により求めることができる。このようにして、CPU104は、仮想世界座標系における全画素の最大値Dmax(sx,sy,sz)の仮想距離[pixel]を、現実世界の距離[cm]に変換することにより、補正距離を算出することができる。
CPU104は、動画像の全ての画素について、仮想距離の最大値Dmax(sx,sy,sz)を算出した後(ステップS.6)、算出された仮想距離の最大値Dmax(sx,sy,sz)を現実世界の距離に変換する(ステップS.7)ことにより、全ての画素に対応するキャリブレーションデータを求めることができる。CPU104は、全ての画素に対応するキャリブレーションデータに基づいて、動的視差法により算出された画素毎の算出距離Zに対して補正を行うための、行列データを作成する(ステップS.8:補正距離算出ステップ、補正距離算出機能)。
そして、CPU104は、動的視差法によって、動画像の全ての画素毎に求められたカメラ200から撮影対象物までの算出距離のデータに対して、行列データを適用することにより、算出距離の補正処理を行う(ステップS.9:距離補正ステップ、距離補正機能)。この処理において、CPU104は、距離補正手段として機能する。
具体的に、CPU104では、動的視差法に基づいてターゲットピクセル毎に算出された現実世界の算出距離と、行列データに記録される対応するターゲットピクセルの補正距離(Dr(sx,sy,sz))とを比較する。そして、CPU104は、動的視差法に基づいて算出された算出距離が、補正距離よりも長い(遠い)場合に、動的視差法に基づいて算出された算出距離を、補正距離に修正する処理を行う。
例えば、動画像に映る道路がアスファルト等である場合には、該当する部分の動画像がテクスチャーのない状態になってしまう。この場合には、道路のoptical flowの値が小さくなる可能性が高いため、動的視差法に基づいて算出された算出距離が、カメラ200からアスファルトまでの現実距離よりも遠い(距離が離れている)と判断されてしまう。従って、動的視差法に基づいて算出されたカメラ200からアスファルトまでの算出距離を、補正距離で補正(制限)することにより、現実世界におけるアスファルトまでの距離に比べて、算出距離があまりにも長い距離(遠い距離)になってしまうことを防ぐことができる。
CPU104は、図7に示した処理を継続的に繰り返し実行することにより、Δt毎にカメラ200で撮影される動画像に基づいて、動的視差法により算出された算出距離を、継続的に補正することが可能になる。
図8(a)は、一般道を走行する車両に設置されたカメラ200で撮影された動画像を示している。また図8(b)は、動的視差法によって画素毎に算出されたカメラ200から撮影対象物までの算出距離を色の明暗によってグレースケールで示した図である。図8(b)では、動画像に対してmean-shift法を適用することにより、同一対象物と判断される領域に画像の分割を行った上で、分割された領域毎に算出距離の算出が行われている。このため分割された領域毎に、同じ明暗からなる色が附されている。図8(b)では、距離が長く(遠く)なるに従って明度が暗くなり、距離が短く(近く)なるに従って明度が明るくなる。しかしながら、図8(b)を観察すると、現実距離の遠近関係と、明度の明暗関係とは、必ずしも適切に対応していない。
図9(a)は、図8(a)に対応する仮想世界座標系を構築し、仮想地面(仮想道路)と、左右の仮想側面壁と、正面の仮想正面壁とを仮想面として設定し、動画像の各画素位置から仮想面までの補正距離を求めることにより、求められた補正距離を色の明暗によってグレースケールで示した図である。図8(a)に示す動画像は、一般道を走行する車両に設置されたカメラ200で撮影された画像であるため、画面下側の正面位置に道路が存在する。また、動画像の左右には、建物や対向車などの側壁に該当するものが存在している。さらに、正面遠方には空が存在するため、空を仮想正面壁として設定することができる。
図9(b)は、図9(a)に示す仮想世界座標系の仮想面に基づいて、動画像の全ての画素毎に算出した補正距離を用いて、図8(b)に示す動的視差法の算出距離を補正した図を示している。図9(b)では、画像の中央上側部分、つまり最も遠くなる空部分が最も暗い明度となり、その部分から下側方向あるいは左右方向に進む従って、段階的に明度が明るく変化している。このように、CPU104により仮想世界座標系を構築し、仮想面を設定して補正距離を算出し、算出された補正距離を用いて動的視差法で求められた算出距離を補正する。この補正により、遠方に存在する撮影対象物は算出距離が長くなり、近傍に近づくに従って撮影対象物までの算出距離が段階的に短くなるように補正を行うことができる。このため、CPU104で算出した補正距離により算出距離の補正を行う前に比べて、算出距離の算出精度を高めることが可能になる。
また、CPU104は、車両に設置されたカメラ200により撮影された動画像の画像解析を行ったり、GPSおよび地図データを用いたりすることによって、動画像に映る道路状況を判断し、道路状況に対応する複数の行列データを予め作成することもできる。例えば、地図データや画像解析によって、車両が市街地の交差点に近づいた場合を想定して、予め交差点用の仮想面、例えば、仮想正面壁が左右に分離している仮想壁などに基づく行列データを作成しておく。このように、仮想世界座標系において動画像上の画素位置から仮想面までの相対的な画素長を算出し、道路状況に応じて、算出された相対的な画素長を現実世界の距離へ変換しておくことにより、道路状況に応じて予め複数の行列データとして作成しておくことができる。該当する状況に応じて、CPU104が複数の行列データから適切な行列データを選択して適用することにより、カメラ200から撮影対象物までの算出距離の補正を、迅速かつ柔軟に行うことが可能になる。
また、実施の形態に係るカメラ200がドローンに搭載された場合、CPU104は、ドローンにより撮影された動画像に基づいて、カメラ200から撮影対象物までの算出距離を補正するための補正距離を算出することができる。この場合においても、ドローンのカメラ200が下方向を向いた状況に応じて、1つ又は2つ程度の補正用の行列データを予め保持しておき、ドローンの周囲状況に応じてCPU104が行列データを選択して適用することにより、カメラ200から撮影対象物までの算出距離を補正することができ、算出距離の算出精度を高めることが可能になる。
さらに、人間が入ることのできない環境で活動するロボットに、実施の形態に係るカメラ200を搭載する場合においても同様に、予め複数の行列データを作成して保持しておき、ロボットの作業現場の状況に応じてCPU104が行列データを選択して適用することができる。このため、作業現場の状況に応じて、カメラ200から撮影対象物までの算出距離を最適に補正することができ、算出距離の算出精度を高めることが可能になる。
ここで、行列データは、動画像の全ての画素の補正距離を算出し、算出された補正距離を、動画像の画素位置に対応させて行列形式に並べたデータである。従って、行列データは、動画像を撮影したカメラの周囲の状況を考慮して仮想世界座標系に仮想面を設定する一方で、その他の具体的な仮想撮影対象物の存在を設定せずに、動画像の画素毎に補正距離を算出して、各画素に補正距離を対応づけた画像データとして捉えることができる。つまり、仮想面以外に撮影対象物が仮想世界座標系に存在しないと想定し、カメラの周囲の状況(道路状況等)に応じてパターン化して、補正距離に基づいて事前に作成した画像データと考えることができる。CPU104によって、補正距離に基づいて作成された行列データを、「基準距離画像」と称することにする。
上述した図9(a)は、カメラ200の周囲の状況を示した動画像(図8(a))に基づいて、仮想世界座標系に仮想地面(仮想道路)と、左右の仮想側面壁と、正面の仮想正面壁とが設定された場合の「基準距離画像」を示している。それぞれの画素には、それぞれの画素に対応する補正距離が設定されているため、補正距離を色の明暗によってグレースケールで示すと、動画像のそれぞれの画素に設定される補正距離が、画素毎に変化している状態を視覚的に認識することができる。
カメラ200で撮影された動画像には、仮想面に対応する壁や道路等の他に、様々な撮影対象物が映っている。このため、仮想世界座標系に、これらの撮影対象物が仮想撮影対象物として存在する場合を想定すると、基準距離画像における画素毎の補正距離(仮想距離)よりも手前に、仮想撮影対象物が位置することになる。つまり、動画像に仮想面に対応する壁面等以外の撮影対象物が映っている場合、撮影対象物は、基準距離画像の前景をなすものと判断することができる。
基準距離画像には、画像の全ての画素に対して画素毎に補正距離が対応付けられているため、例えば、optical flowを用いた動的視差法により算出された算出距離を、基準距離画像を用いて補正すると、動画像の全ての画素に対して、それぞれの画素毎に距離を補正することができる。このため、撮影対象物からカメラまでの全ての画素の距離精度を向上させることが可能になる。
特に、動的視差法により算出された算出距離のデータを、全ての画素の算出距離が動画像の画素位置に対応けられて記録されたデータであると考えれば、動的視差法により算出されたデータも、画像データとして捉えることができる。つまり、動的視差法により算出されたデータも、例えば「算出距離画像」という名称の画像データであると考えることができる。動的視差法によって算出された「算出距離画像」に対して、画素位置に補正距離が対応付けられた「基準距離画像」を適用することにより、それぞれの画素に対応する算出距離を補正距離で補正することができるため、一般的な画像処理に準じた処理手順によって、各画素の補正処理を漏れなく実行することが可能になる。
さらに、既に説明したように、道路や壁のようなテクスチャーのない状態となる部分では、動画像においてoptical flowが抽出できない、あるいは、optical flowの値が小さな値になってしまい、現実の距離に比べて算出距離に大きな誤差が生じる可能性がある。このような場合においても、基準距離画像を用いて算出距離の補正を行うことにより、効果的に誤差の補正を行うことが可能になる。
さらに、補正距離算出装置100を車両に固定して車両前方の様子をカメラ200で撮影する場合、車両が前方に移動するときのカメラ200の向きは一定である。しかしながら、走行する車両が車線を変更したり、カーブを曲がったりする場合には、カメラ200が車両に固定されていても、車両の移動に応じて、現実世界におけるカメラ200の位置と向きとが変化する。このように現実世界でカメラ200の位置と向きが変化する場合には、仮想世界座標系における動画像の中心座標(カメラ200の位置座標)と法線ベクトルとが変化することを考慮する必要が生ずる。従って、仮想世界座標系のカメラ200の位置座標(動画像の中心座標)(Xx,Xy,Xz)が固定であっても、法線ベクトル(a,b,c)が時間的に変化し(つまり、法線ベクトルは時間tの関数(a,b,c)(t)となり)、この変化に伴って、仮想レーザの発信源の位置座標(x0,y0,z0)も時間的に変化する(つまり、(x0,y0,z0)(t)となる)ものとして、取り扱う必要が生じる。
また、カメラ200が首を振るように動く、いわゆる首振りカメラの場合には、カメラ200の動きが周期的な動きとなるため、カメラ200により撮影された動画像の法線ベクトルや、仮想レーザの発信源の位置座標や、動画像上の各画素の画素位置の動きが周期的に変化する。仮想世界座標系において首振りカメラの回動支点となる固定位置を(Xx,Xy,Xz)にするとき、首振りカメラの動画像の法線ベクトルは、時間tに応じて変化するベクトル(a,b,c)(t)として表すことができる。このとき、仮想世界座標系における動画像の各画素位置は、a(t)(x-Xx)+b(t)(y-Xy)+c(t)(z-Xz)=0として表すことができ、首振りカメラの回動支点(Xx,Xy,Xz)から仮想カメラの法線方向の長さLの位置に存在する仮想レーザの発信源の位置も、時間とともに変化する位置座標(x0,y0,z0)(t)として表すことが可能になる。このように時間tに応じて周期的に変化する仮想レーザの発信源の座標と、時間tに応じて周期的に変化する動画像の各画素の位置座標とを考慮して、仮想レーザの発信源から動画像の各画素を通過して、仮想面に到達する点を求めることにより、仮想世界座標系における最大値Dmax(sx,sy,sz)を、カメラの動きに対応させて求めることができる。
以上、本発明に係る補正距離算出装置、補正距離算出用プログラムおよび補正距離算出方法について、実施の形態に係る補正距離算出装置100を一例として示し、詳細に説明を行ったが、本発明に係る補正距離算出装置、補正距離算出用プログラムおよび補正距離算出方法は、実施の形態に示した例には限定されない。
例えば、実施の形態に係る補正距離算出装置100では、カメラ200により撮影された動画像の全ての画素に対して、補正距離の算出を行うことにより、全ての画素に対応するキャリブレーションデータを行列データ(基準距離画像)として算出する場合について説明した。しかしながら、本発明に係る補正距離算出装置において算出する補正距離は、必ずしも動画像の全ての画素に対して算出する必要はなく、一部の画素に対応する補正距離だけを算出するものであってもよい。