以下、本発明の一実施形態を、図面を参照しつつ説明する。図1は本実施形態に係る車両検出装置10の概略的な構成を示すブロック図である。車両検出装置10は、例えば自車両の進行方向に存在する車両を検出する装置である。この車両検出装置10は、図1に示されるように、演算装置20、撮影装置31、及び警報装置32を有している。この車両検出装置10は、後述する自車両100に搭載される。
撮影装置31は、被写体を撮影することにより取得した画像を、電気信号に変換して出力する装置である。撮影装置31は、例えば図2に示されるように、自車両100のフロントウインド上部に取り付けられている。この撮影装置31は、自車両100の前方を撮影する。そして、撮影により取得した画像に関する画像情報を演算装置20へ出力する。
図3は、自車両100と車両101との相対的な位置関係を示す図である。例えば、自車両100の前方を走行する車両101が、自車両100に相対的に接近している場合を考える。図3を参照するとわかるように、矢印a1に示される位置にある車両101は、所定の時間が経過すると矢印a2に示される位置に相対的に移動する。この場合には、撮影装置31によって、まず矢印a1に示される位置にある車両101が撮影され、次に矢印a2に示される位置にある車両101が撮影される。
図4は、矢印a1に示される位置にある車両101を撮影することにより得られた画像PH1を示す図である。また、図5は、矢印a2に示される位置にある車両101を撮影することにより得られた画像PH2を示す図である。撮影装置31は、画像PH1,PH2に代表される画像PHを撮影すると、画像PHに関する情報を、演算装置20へ出力する。
本実施形態では、上述の画像PHについて、撮影装置31の光学中心に対応する点(撮影装置31の光軸とその画像面との交点である画像中心)を原点Xc(FOE:Focus Of Expansion)とするxy座標系を定義する。このxy座標系の原点Xcは、画像PHの中心と一致する。
図1に戻り、警報装置32は、演算装置20から出力される警報の発令指示を受信すると、自車両100のドライバに対して、例えば音声による警報を出力する。
演算装置20は、CPU(Central Processing Unit)21、主記憶部22、補助記憶部23、表示部24、及びインターフェイス部26を有するコンピュータである。
CPU21は、補助記憶部23に記憶されているプログラムに従って、自車両100の周囲を走行する車両101を検出する。具体的な処理の内容については後述する。
主記憶部22は、RAM(Random Access Memory)等を有している。主記憶部22は、CPU21の作業領域として用いられる。
補助記憶部23は、例えばROM(Read Only Memory)、半導体メモリ等の不揮発性メモリを有している。補助記憶部23は、CPU21が実行するプログラム、及び各種パラメータなどを記憶している。また、撮影装置31から出力される画像に関する情報、及びCPU21による処理結果などを含む情報を順次記憶する。
表示部24は、LCD(Liquid Crystal Display)などの表示ユニットを有している。表示部24は、CPU21の処理結果等を表示する。
インターフェイス部26は、シリアルインターフェイスまたはLAN(Local Area Network)インターフェイス等を含んで構成されている。撮影装置31及び警報装置32は、インターフェイス部26を介してシステムバス27に接続される。
図9乃至図20のフローチャートは、CPU21によって実行されるプログラムの一連の処理アルゴリズムに対応している。以下、図面を参照しつつ、車両検出装置10の動作について説明する。なお、ここでは図4或いは図5を参照するとわかるように、撮影装置31の視野内に自車両100の前方を走行する車両101が位置しているものとする。
まず、最初のステップS201では、CPU21は、補助記憶部23に記憶された画像情報を取得する。ここでは、例えば図5に示される画像PH2に関する画像情報を取得する。
次のステップS202では、CPU21は、処理領域の設定を行うために、図10に示されるサブルーチンSR1を実行する。サブルーチンSR1の最初のステップS301では、CPU21は、ステップS201で取得した画像情報の直近に取得した画像情報によって規定される画像PHから、検出対象物が検出されているか否かを判断する。
具体的には、CPU21は、画像PH2を規定する画像情報の前に取得された画像情報によって規定される画像PH1から、検出対象物が検出されている否かを判断する。画像PH1には、図4に示されるように、車両101が写っている。したがって、この車両101の画像が明瞭である場合には、画像PH1から車両101が検出される。この場合には、ステップS301での判断が肯定される(ステップS301:Yes)。一方、画像PH1に、車両101が写っていない場合や、画像が不明瞭である場合には、画像PH1からは、検出対象物が検出されない。この場合には、ステップS301での判断が否定される(ステップS301:No)。
ステップS301での判断が肯定された場合には(ステップS301:Yes)、CPU21は、ステップS302へ移行する。
ステップS302では、CPU21は、検出領域の設定を行う。この検出領域の設定は、検出対象と自車両100との相対速度、画像PH上での検出対象の大きさに基づいて行われる。
例えば、CPU21は、図4に示される画像PH1と、当該画像PH1が撮影される前に撮影された画像PH0によって規定される車両101のオプティカルフローに基づいて、車両101の相対速度を算出する。そして、車両101の相対速度と、画像PH1での車両101の画像の大きさに基づいて、図5に示されるように、画像PH2に、車両101の画像が現れると予測される領域A1を特定する。そして、CPU21は、領域A1を、画像PH2に写る車両101を検出するための検出領域に設定する。検出領域が設定された後は、この検出領域に対してのみ、検出対象物の検出処理が実行される。これにより、検出対象物の検出処理の際に行われる演算が少なくなる。
また、ステップS301での判断が否定された場合は(ステップS301:No)、CPU21は、ステップS303へ移行する。
ステップS303では、CPU21は、画像PHの全体を検出領域に設定する。これにより、検出対象物の検出処理は、画像全体に対して実行されることになる。
ステップS302及びステップS303の処理が終了すると、CPU21は、サブルーチンSR1を終了し、次のステップS203へ移行する。
ステップS203では、CPU21は、車両パターンの探索を行うために、図11に示されるサブルーチンSR2を実行する。車両パターンとは、例えば、車両の輪郭、テールランプ、ヘッドランプ、車両の下にできる影、タイヤ、及びナンバープレートそれぞれを構成する画素群からなる部分画像をいう。これらは、車両101の画像を構成する。以下、車両の輪郭、テールランプ、ヘッドランプ、影、タイヤ、ナンバープレートに対応する車両パターンを、車両パターン1〜6と表示する。
サブルーチンSR2の最初のステップS401では、CPU21は、演算順序の設定を行うために、図12に示されるサブルーチンSR3を実行する。
サブルーチンSR3の最初のステップS501では、CPU21は、ステップS201で取得した画像情報の直近に取得した画像情報によって規定される画像PHから、車両パターンが検出されているか否かを判断する。
具体的には、CPU21は、画像PH1から車両101を構成する車両パターンが検出されているか否かを判断する。画像PH1から、例えば、車両の輪郭、テールランプ、ヘッドランプ、車両の下にできる影、タイヤ、及びナンバープレートを示す車両パターンが検出されている場合には、ステップS501での判断が肯定される。一方、画像PH1から、車両パターンが検出されていない場合には、ステップS501での判断が否定される。
ステップS501での判断が肯定された場合には(ステップS501:Yes)、CPU21は、ステップS502へ移行する。
ステップS502では、CPU21は、車両パターンの特徴量それぞれに基づいて、車両パターンをソートする。上述の特徴量は、後述するサブルーチンSR2のステップS402で算出される要素である。この特徴量は、車両パターンを構成する部分画像が、車両101の画像の一部であることを示す信頼度と等価である。
そして、例えば、車両パターン1の信頼度が1、車両パターン2の信頼度が5、車両パターン3の信頼度が3、車両パターン4の信頼度が6、車両パターン5の信頼度が2、車両パターン6の信頼度が、7である場合には、ステップS502の処理によって、車両パターン6、車両パターン4、車両パターン2、車両パターン3、車両パターン5、車両パターン1の順に順位が付与される。
次のステップS503では、CPU21は、車両パターンについての特徴量を算出する順番を設定する。例えば、ステップS502で、各車両パターン1〜6それぞれに、車両パターン6、車両パターン4、車両パターン2、車両パターン3、車両パターン5、車両パターン1の順に順位が付与された場合には、この順位にしたがった順番を設定する。これにより、前回算出された信頼度が高い車両パターンから順に、当該車両パターンの特徴量が算出されることになる。
一方、ステップS501での判断が否定された場合には(ステップS501:No)、CPU21は、ステップS504へ移行する。
ステップS504では、CPU21は、今現在が夜間であるか否かを判断する。この判断は、画像の特定領域の平均輝度を計算し、その輝度が所定の閾値を下回るか否かにより行う。特定領域の平均輝度が、閾値を下回った場合には、今現在が夜間であると判断することができる。
ステップS504での判断が否定された場合には(ステップS504:No)、CPU21は、ステップS505へ移行する。
ステップS505では、CPU21は、車両パターンの特徴量を算出するときの順番を、昼間に適した順番に設定する。車両101の画像を構成する各車両パターンは、昼間に容易に検出できるものと、夜間に容易に検出できるものがあり、車両101の周囲環境によって、検出容易性が変化する。
そこで、昼間に検出容易性が高い車両パターンから順に、当該車両パターンに予め順位を付与しておく。そして、ステップS505では、予め付与された順位にしたがって、車両パターンについての特徴量を算出する順番を設定する。これにより、後述するステップS402において、昼間に検出容易性が高い車両パターンから順に、当該車両パターンの特徴量が算出されることになる。
一方、ステップS504での判断が肯定された場合には(ステップS504:Yes)、CPU21は、ステップS506へ移行する。
ステップS506では、CPU21は、車両パターンの特徴量を算出するときの順番を、夜間に適した順番に設定する。具体的には、夜間に検出容易性が高い車両パターンから順に、当該車両パターンに予め順位を付与しておく。そして、ステップS506では、予め付与された順位にしたがって、車両パターンについての特徴量を算出する順番を設定する。これにより、後述するステップS402において、夜間に検出容易性が高い車両パターンから順に、当該車両パターンの特徴量が算出されることになる。
ステップS503,ステップS505,又はステップS506の処理が終了すると、CPU21は、サブルーチンSR3を終了し、サブルーチンSR2のステップS402へ移行する。
次のステップS402では、ステップS401で設定された順番にしたがって、車両パターンそれぞれの特徴量を算出する。以下、各車両パターンの特徴量の算出を、図13乃至図18に示されるサブルーチンSR4〜SR9を参照しつつ説明する。
《車両輪郭候補の特徴量算出》
図13は、車両輪郭候補の特徴量を算出するための手順を示すサブルーチンSR4である。図13に示されるように、最初のステップS601では、CPU21は、特徴量の算出が既にされているか否かを判断する。例えば、画像PH1について、図13に示されるステップS601〜S611までの処理が実行されている場合には、画像PH2についてのステップS601での判断が肯定され(ステップS601:Yes)、CPU21は、ステップS602へ移行する。一方、画像PH1について、図13に示されるステップS601〜S611までの処理が実行されていない場合には、画像PH2についてのステップS601での判断が否定され(ステップS601:No)、CPU21は、ステップS603へ移行する。
ステップS602では、CPU21は、検出領域を制限する。図5に示されるように、検出領域としての領域A1は、画像PHに写る車両101の画像を含む領域に設定されている。そこで、CPU21は、ステップS601で、車両101の輪郭が検出されている場合には、この輪郭に基づいて、検出領域を制限する。これにより、図6に示されるように、車両101の輪郭を示すボディのエッジに基づいて、領域A1の中に、検出領域としての領域A2が規定される。
ステップS603では、CPU21は、領域A2に含まれる画素それぞれに対して、例えばソーベルフィルタを用いた演算を行うことにより、画素それぞれについての微分値を算出する。
次のステップS604では、CPU21は、エッジの抽出を行う。例えばCPU21は、画素それぞれの微分値を二値化する。そして、二値化された微分値(以下エッジ値という)が1となる画素をエッジ点として抽出する。
次のステップS605では、CPU21は、エッジ点を中心に水平方向に並ぶ画素の微分値のヒストグラムと、エッジ点を中心に垂直方向に並ぶ画素の微分値のヒストグラムとを算出する。
次のステップS606では、CPU21は、算出したヒストグラムのピークから、値が閾値以上となるピークを抽出する。そして、ピークが現れた画像上の領域に対して、直線上に連続して並んだエッジ点の集合を水平線分或いは垂直線分として抽出する。
次のステップS607では、CPU21は、車両輪郭候補を抽出する。例えば、CPU21は、各水平線分及び垂直成分を組み合わせる。そして、組み合わせた線分の数及び、組み合わせた線分の縦横比に基づいて、車両輪郭候補としてのエッジの集合を抽出する。
次のステップS608では、CPU21は、車両輪郭候補の線分の数、線分を構成するエッジ点の微分値の平均値、車両輪郭候補の縦横比、及び、車両輪郭候補の下限位置と幅を、実際の車両が写る基準画像から抽出した特徴量と比較して、車両輪郭候補の信頼度を算出する。この信頼度は、車両輪郭候補としてのエッジの集合が、車両101のエッジである確度と等価である。
次のステップS609では、CPU21は、ステップS608で算出した信頼度が、閾値より大きいか否かを判断する。CPU21は、信頼度が閾値より大きいと判断した場合には(ステップS609:Yes)、ステップS610に移行する。また、信頼度が閾値以下であると判断した場合には(ステップS609:No)、サブルーチンSR4を終了する。
ステップS610では、CPU21は、画像PHに設定された検出領域に、車両輪郭の候補が存在すると認識する。これにより、次回のステップS601での判断が、肯定されることになる。そして、次のステップS611で、画像PH上での車両輪郭の位値と、幅、及び高さを記憶する。CPU21は、ステップS611の処理が終了すると、サブルーチンSR4を終了する。
《テールランプ候補の特徴量算出》
図14は、テールランプ候補の特徴量を算出するための手順を示すサブルーチンSR5である。図14に示されるように、最初のステップS701では、CPU21は、特徴量の算出が既にされているか否かを判断する。例えば、画像PH1について、図14に示されるステップS701〜S710までの処理が実行されている場合には、画像PH2についてのステップS701での判断が肯定され(ステップS701:Yes)、CPU21は、ステップS702へ移行する。一方、画像PH1について、図14に示されるステップS701〜S710までの処理が実行されていない場合には、画像PH2についてのステップS701での判断が否定され(ステップS701:No)、CPU21は、ステップS703へ移行する。
ステップS702では、CPU21は、検出領域を制限する。図5に示されるように、検出領域としての領域A1は、画像PHに写る車両101の画像を含む領域である。そこで、CPU21は、ステップS701で、車両101のテールランプの部分画像が検出されている場合には、当該テールランプの部分画像に基づいて、検出領域を制限する。
ステップS703では、CPU21は、検出領域から、赤色の画素を抽出する。例えば、CPU21は、各画素のHSV値(H:Hue, S:Saturation・Chroma, V:Brightness・Lightness・Value)を算出する。そして、CPU21は、各画素について算出したHSV値と、実際のテールランプの画像を構成する画素のHSV値との差を算出し、その差が所定の範囲内にある画素を抽出する。これにより、画像PHから色相が赤の画素が順次抽出され、結果的に、赤色の画素からなる画素群が抽出される。
次のステップS704では、CPU21は、抽出された画素群から、面積が所定の基準値よりも大きい領域を形成する画素群を抽出する。そして、抽出した画素群を構成する画素にラベリングを施す。これにより、画素群それぞれが、1つの赤色領域として認識される。
次のステップS705では、CPU21は、赤色領域についての特徴量を抽出する。例えば、CPU21は、赤色領域の縦横比及び円形度、赤色領域を構成する画素の色相の平均値、基準色に対する赤色比率、1組のテールランプの候補としての1組の赤色領域の対称性等に代表される特徴量を算出する。
次のステップS706では、CPU21は、ステップS705で抽出した特徴量に基づいて、テールランプの部分画像の候補となる赤色領域を抽出する。
次のステップS707では、CPU21は、ステップS706で抽出した赤色領域と、実際のテールランプを写した基準画像から抽出した特徴量とを比較して、候補としての赤色領域が、テールランプの部分画像である確度と等価な信頼度を算出する。
次のステップS708では、CPU21は、ステップS707で算出した信頼度が、閾値より大きいか否かを判断する。CPU21は、信頼度が閾値より大きいと判断した場合には(ステップS708:Yes)、ステップS709に移行する。一方、信頼度が閾値以下であると判断した場合には(ステップS708:No)、サブルーチンSR5を終了する。
ステップS709では、CPU21は、画像PHに設定された検出領域に、テールランプの候補となる赤色領域が存在すると認識する。これにより、次回のステップS701での判断が、肯定されることになる。そして、次のステップS710で、画像PH上での、テールランプの候補となる赤色領域同士の間隔及び位置を記憶する。CPU21は、ステップS710の処理が終了すると、サブルーチンSR5を終了する。
《ヘッドランプ候補の特徴量算出》
図15は、ヘッドランプ候補の特徴量を算出するための手順を示すサブルーチンSR6である。図15に示されるように、最初のステップS801では、CPU21は、特徴量の算出が既にされているか否かを判断する。例えば、画像PH1について、図15に示されるステップS801〜S810までの処理が実行されている場合には、画像PH2についてのステップS801での判断が肯定され(ステップS801:Yes)、CPU21は、ステップS802へ移行する。一方、画像PH1について、図15に示されるステップS801〜S810までの処理が実行されていない場合には、画像PH2についてのステップS801での判断が否定され(ステップS801:No)、CPU21は、ステップS803へ移行する。
ステップS802では、CPU21は、検出領域を制限する。図5に示されるように、検出領域としての領域A1は、画像PHに写る車両101の画像を含む領域に設定されている。そこで、CPU21は、ステップS801で、車両101のヘッドランプの部分画像が検出されている場合には、当該ヘッドランプの部分画像に基づいて、検出領域を制限する。
ステップS803では、CPU21は、検出領域から、白色の画素からある白色領域を抽出する。例えば、CPU21は、各画素のHSV値を算出する。そして、CPU21は、各画素について算出したHSV値と、実際のヘッドランプの画像を構成する画素のHSV値との差を算出し、その差が所定の範囲内にある画素を抽出する。これにより、画像PHから色相が白の画素が順次抽出され、結果的に、白色の画素からなる画素群が抽出される。
次のステップS804では、CPU21は、抽出された画素群から、面積が所定の基準値よりも大きい領域を形成する画素群を抽出する。そして、抽出した画素群を構成する画素にラベリングを施す。これにより、画素群それぞれが、1つの白色領域として認識される。
次のステップS805では、CPU21は、白色領域についての特徴量を抽出する。例えば、CPU21は、白色領域の縦横比、円形度、白色領域を構成する画素の色相の平均値、基準色に対する白色比率、1組のヘッドランプの候補としての1組の白色領域の対称性等に代表される特徴量を算出する。
次のステップS806では、CPU21は、ステップS805で抽出した特徴量から、ヘッドランプの画像の候補となる白色領域を抽出する。
次のステップS807では、CPU21は、ステップS806で抽出した白色領域と、実際のヘッドランプを写した基準画像から抽出した特徴量とを比較して、候補としての白色領域が、ヘッドランプの画像である確度と等価な信頼度を算出する。
次のステップS808では、CPU21は、ステップS807で算出した信頼度が、閾値より大きいか否かを判断する。CPU21は、信頼度が閾値より大きいと判断した場合には(ステップS808:Yes)、ステップS809に移行する。また、信頼度が閾値以下であると判断した場合には(ステップS808:No)、サブルーチンSR6を終了する。
ステップS809では、CPU21は、画像PHに設定された検出領域に、ヘッドランプの候補となる白色領域が存在すると認識する。これにより、次回のステップS801での判断が、肯定されることになる。そして、次のステップS810で、画像PH上での、ヘッドランプの候補となる白色領域同士の間隔及び位置を記憶する。CPU21は、ステップS810の処理が終了すると、サブルーチンSR6を終了する。
《車両下影候補の特徴量算出》
図16は、車両下影候補の特徴量を算出するための手順を示すサブルーチンSR7である。図16に示されるように、最初のステップS901では、CPU21は、特徴量の算出が既にされているか否かを判断する。例えば、画像PH1について、図16に示されるステップS901〜S912までの処理が実行されている場合には、画像PH2についてのステップS901での判断が肯定され(ステップS901:Yes)、CPU21は、ステップS902へ移行する。一方、画像PH1について、図16に示されるステップS901〜S912までの処理が実行されていない場合には、画像PH2についてのステップS901での判断が否定され(ステップS901:No)、CPU21は、ステップS903へ移行する。
ステップS902では、CPU21は、検出領域を制限する。図5に示されるように、検出領域としての領域A1は、画像PHに写る車両101の画像を含む領域に設定されている。そこで、CPU21は、ステップS901で、車両101の下の影の部分画像が検出されている場合には、部分画像に基づいて、検出領域を制限する。
ステップS903では、CPU21は、検出領域に含まれる画素それぞれに対して、例えばソーベルフィルタを用いた演算を行うことにより、画素それぞれについての微分値を算出する。
次のステップS904では、CPU21は、エッジの抽出を行う。例えばCPU21は、画素それぞれの微分値を二値化する。そして、二値化された微分値(以下エッジ値という)が1となる画素をエッジ点として抽出する。
次のステップS905では、CPU21は、エッジ点を中心に水平方向に並ぶ画素の微分値のヒストグラムと、エッジ点を中心に垂直方向に並ぶ画素の微分値のヒストグラムとを算出する。
次のステップS906では、CPU21は、算出したヒストグラムのピークに対応したエッジ点を抽出し、微分値の符合が相互に異なるエッジ点同士を、1組のエッジ点として順次抽出する。これにより、画像PHから低輝度画素で示される影の画像のエッジが順次抽出される。
次のステップS907では、CPU21は、ステップS906で抽出されたエッジ点によって包囲される領域(以下、包囲領域という)の総面積に対する、輝度が所定の値以下の画素からなる低輝度領域の面積の割合(面積比)を算出する。
次のステップS908では、CPU21は、包囲領域が複数有る場合には、面積比が最も大きくなるときの包囲領域を、影の部分画像の候補となる領域として抽出する。また、包囲領域が1つしかない場合には、ステップS907で算出した面積比が、所定の値以上である場合に、当該包囲領域を、影の部分画像の候補となる領域として抽出する。
次のステップS909では、CPU21は、面積比率、包囲領域を構成する画素の輝度の平均値、及び包囲領域の縦横比を、実際の影が写る基準画像から抽出した特徴量と比較して、候補としての包囲領域が、車両101の影の部分画像である確度と等価な信頼度を算出する。
次のステップS910では、CPU21は、ステップS909で算出した信頼度が、閾値より大きいか否かを判断する。CPU21は、信頼度が閾値より大きいと判断した場合には(ステップS910:Yes)、ステップS911に移行する。また、信頼度が閾値以下であると判断した場合には(ステップS910:No)、サブルーチンSR7を終了する。
ステップS911では、CPU21は、画像PHに設定された検出領域に、車両の影の候補が存在すると認識する。これにより、次回のステップS901での判断が、肯定されることになる。そして、次のステップS912で、画像PH上での包囲領域の位値、及び幅を記憶する。CPU21は、ステップS912の処理が終了すると、サブルーチンSR7を終了する。
《タイヤ候補の特徴量算出》
図17は、タイヤ候補の特徴量を算出するための手順を示すサブルーチンSR8である。図17に示されるように、最初のステップS1001では、CPU21は、特徴量の算出が既にされているか否かを判断する。例えば、画像PH1について、図17に示されるステップS1001〜S1012までの処理が実行されている場合には、画像PH2についてのステップS1001での判断が肯定され(ステップS1001:Yes)、CPU21は、ステップS1002へ移行する。一方、画像PH1について、図17に示されるステップS1001〜S1012までの処理が実行されていない場合には、画像PH2についてのステップS1001での判断が否定され(ステップS1001:No)、CPU21は、ステップS1003へ移行する。
ステップS1002では、CPU21は、検出領域を制限する。図5に示されるように、検出領域としての領域A1は、画像PHに写る車両101の画像を含む領域に設定されている。そこで、CPU21は、ステップS1001で、車両101のタイヤの部分画像が検出されている場合には、部分画像に基づいて、検出領域を制限する。
ステップS1003では、CPU21は、検出領域に含まれる画素それぞれに対して、例えばソーベルフィルタを用いた演算を行うことにより、画素それぞれについての微分値を算出する。
次のステップS1004では、CPU21は、エッジの抽出を行う。例えばCPU21は、画素それぞれの微分値を二値化する。そして、二値化された微分値(以下エッジ値という)が1となる画素をエッジ点として抽出する。
次のステップS1005では、CPU21は、エッジ点を中心に水平方向に並ぶ画素の微分値のヒストグラムと、エッジ点を中心に垂直方向に並ぶ画素の微分値のヒストグラムとを算出する。
次のステップS1006では、CPU21は、算出したヒストグラムのピークに対応したエッジ点を抽出し、微分値の符合が相互に異なるエッジ点同士を、1組のエッジ点として順次抽出する。これにより、画像PHから低輝度画素で示されるタイヤの画像のエッジが順次抽出される。
次のステップS1007では、CPU21は、ステップS1006で抽出されたエッジ点によって包囲される領域(包囲領域)の総面積に対する、輝度が所定の値以下の画素からなる低輝度領域の面積の割合(面積比)を算出する。
次のステップS1008では、CPU21は、ステップS1007で算出した面積比が、所定の値以上である矩形状の包囲領域を、タイヤの部分画像の候補となる領域として抽出する。
次のステップS1009では、CPU21は、包囲領域の高さ、幅を、実際のタイヤが写る基準画像から抽出した特徴量と比較して、候補としての包囲領域が、車両101のタイヤの部分画像である確度と等価な信頼度を算出する。また、その際には、1組の包囲領域が候補として抽出されたときは、包囲領域同士の間隔や、対称性、類似性も考慮する。
次のステップS1010では、CPU21は、ステップS1009で算出した信頼度が、閾値より大きいか否かを判断する。CPU21は、信頼度が閾値より大きいと判断した場合には(ステップS1010:Yes)、ステップS1011に移行する。また、信頼度が閾値以下であると判断した場合には(ステップS1010:No)、サブルーチンSR8を終了する。
ステップS1011では、CPU21は、画像PHに設定された検出領域に、車両のタイヤの候補が存在すると認識する。これにより、次回のステップS1001での判断が、肯定されることになる。そして、次のステップS1012で、画像PH上での包囲領域相互間の間隔、位値、及び幅を記憶する。CPU21は、ステップS1012の処理が終了すると、サブルーチンSR8を終了する。
《ナンバープレート候補の特徴量算出》
図18は、ナンバープレート候補の特徴量を算出するための手順を示すサブルーチンSR9である。図18に示されるように、最初のステップS1101では、CPU21は、特徴量の算出が既にされているか否かを判断する。例えば、画像PH1について、図18に示されるステップS1101〜S1112までの処理が実行されている場合には、画像PH2についてのステップS1101での判断が肯定され(ステップS1101:Yes)、CPU21は、ステップS1102へ移行する。一方、画像PH1について、図18に示されるステップS1101〜S1112までの処理が実行されていない場合には、画像PH2についてのステップS1101での判断が否定され(ステップS1101:No)、CPU21は、ステップS1103へ移行する。
ステップS1102では、CPU21は、検出領域を制限する。図5に示されるように、検出領域としての領域A1は、画像PHに写る車両101の画像を含む領域に設定されている。そこで、CPU21は、ステップS1101で、車両101のナンバープレートの部分画像が検出されている場合には、部分画像に基づいて、検出領域を制限する。
ステップS1103では、CPU21は、検出領域に含まれる画素それぞれに対して、例えばソーベルフィルタを用いた演算を行うことにより、画素それぞれについての微分値を算出する。
次のステップS1104では、CPU21は、エッジの抽出を行う。例えばCPU21は、画素それぞれの微分値を二値化する。そして、二値化された微分値(以下エッジ値という)が1となる画素をエッジ点として抽出する。
次のステップS1105では、CPU21は、エッジ点を中心に水平方向に並ぶ画素の微分値のヒストグラムと、エッジ点を中心に垂直方向に並ぶ画素の微分値のヒストグラムとを算出する。
ナンバープレートは、規定によりその大きさ及び形状が決まっており、縦横比は一定の値になる。そこで、次のステップS1106では、CPU21は、算出したヒストグラムのピークに対応したエッジ点を抽出し、微分値の符合が相互に異なるエッジ点同士を1組となったエッジ点として順次抽出する。そして、1組のエッジ点によって形成されるエッジのうち、縦横比率がナンバープレートの縦横比率とほぼ等価なエッジを、画像PHからナンバープレートのエッジとして抽出する。これにより、長方形枠状のエッジが抽出される。ここで、車両の輪郭を示すエッジが検出されている場合には、長方形枠状のエッジと、車両の輪郭との大きさを比較して、信頼性の高いエッジのみを抽出することとしてもよい。
次のステップS1107では、CPU21は、ステップS1106で抽出されたエッジによって包囲される領域(包囲領域)の画素それぞれについて、色相値を算出する。そして、ナンバープレートの背景色と色相が等価な白の画素と、ナンバープレートの文字の色と色相が等価の緑の画素とを抽出する。そして、白の画素が占める面積に対する、緑の画素が占める面積の面積比率を算出する。
次のステップS1108では、ステップS1107で算出した面積比率が一定以上の包囲領域を、ナンバープレートの部分画像の候補となる領域として抽出する。
次のステップS1109では、CPU21は、包囲領域の高さ、幅、縦横比、面積比率を、実際のナンバープレートが写る基準画像から抽出した特徴量と比較して、候補としての包囲領域が、車両101のナンバープレートの部分画像である確度と等価な信頼度を算出する。
次のステップS1110では、CPU21は、ステップS1109で算出した信頼度が、閾値より大きいか否かを判断する。CPU21は、信頼度が閾値より大きいと判断した場合には(ステップS1110:Yes)、ステップS1111に移行する。また、信頼度が閾値以下であると判断した場合には(ステップS1110:No)、サブルーチンSR9を終了する。
ステップS1111では、CPU21は、画像PHに設定された検出領域に、車両のタイヤの候補が存在すると認識する。これにより、次回のステップS1101での判断が、肯定されることになる。そして、次のステップS1112で、画像PH上での包囲領域の幅、高さ及び位置を記憶する。CPU21は、ステップS1112の処理が終了すると、サブルーチンSR9を終了する。
CPU21は、サブルーチンSR2のステップS402の処理で、上述した車両の輪郭、テールランプ、ヘッドランプ、影、タイヤ、ナンバープレートのうちのいずれかを、ステップS401で規定された順番に基づいて選択して特徴量を算出する。例えば、ステップS401で規定された順番が、車両の輪郭、テールランプ、ヘッドランプ、影、タイヤ、ナンバープレートの順である場合には、CPU21は、ステップS405の処理の後ステップS402の処理が繰り返されるたびに、まず1回目のステップS402の処理で、車両の輪郭候補の特徴量を算出し、2回目のステップS402の処理で、テールランプ候補の特徴量を算出し、移行順次ステップS401で規定された順番に基づいて特徴量を算出する。ステップS402の処理が終了すると、CPU21は、ステップS403へ移行する。
ステップS403では、CPU21は、認識信頼度を算出する。具体的には、CPU21は、サブルーチンSR4〜SR9の処理を実行することにより算出した信頼度の確率和を、認識信頼度として算出する。例えば、N回目のステップS402で実行されたサブルーチンによって算出された信頼度をrNとすると、認識信頼度Rは次式(1)で示される。
R=1−(1−r1)・(1−r2)・…・(1−rN) …(1)
次のステップS404では、CPU21は、ステップS403で算出された認識信頼度が、閾値よりも大きいか否かを判断する。認識信頼度が閾値以下であると判断された場合には(ステップS404:No)、CPU21は、次のステップS405へ移行する。
ステップS405では、CPU21は、すべての車両パターンについての特徴量を算出したか否かを判断する。例えば、上述した車両の輪郭、テールランプ、ヘッドランプ、影、タイヤ、ナンバープレートすべてについての特徴量が算出されている場合には、CPU21は、サブルーチンSR2の処理を終了して、次のステップS204へ移行する。一方、特徴量が算出されていない車両パターンがある場合には(ステップS405:No)、ステップS401へ戻り、ステップS401以降の処理を実行する。
また、ステップS404で、認識信頼度が閾値よりも大きいと判断された場合には(ステップS404:Yes)、CPU21は、ステップS406へ移行する。
ステップS406では、CPU21は、認識信頼度を補助記憶部23へ記憶する。ステップS406の処理を終了すると、CPU21は、サブルーチンSR2の処理を終了して、ステップS204へ移行する。
ステップS204では、ステップS203の処理を行うことで、信頼性の高い認識信頼度を、連続して算出することができたか否かを判断する。信頼性が高いか否かの判断は、認識信頼度がステップS404での閾値以上であるか否かによって行う。そして、ステップS203が繰り返し実行されることで、信頼性の高い認識信頼度が連続して算出された場合には、ステップS204での判断が肯定される。一方、信頼性の高い認識信頼度が連続して算出されなかった場合には、ステップS204での判断が否定される。
図9に示されるステップS202〜S214までの処理は繰り返し実行されるが、ステップS204での処理が初めて実行される場合には、ここでの判断は否定され(ステップS204:No)、CPU21は、ステップS205へ移行する。
ステップS205では、CPU21は、図19に示されるサブルーチンSR10を実行する。サブルーチンSR10の最初のステップS1201では、CPU21は、補助記憶部23に記憶された画像PH1,PH2を構成する画素それぞれについての特徴量を算出し、この特徴量に基づいて画像に含まれる特徴点を抽出する。図4に示されるように、ここでは画像PH1について、特徴点P1,P2,P3,P4が抽出される。また、図5に示されるように、画像PH2について、特徴点Q1,Q2,Q3,Q4が抽出される。
次のステップS1202では、CPU21は、画像PH1の特徴点P1〜P4を順次選択する。そして、この選択した特徴点と、画像PH2の特徴点Q1〜Q4の相関値を算出する。例えば、CPU21は、まず画像PH1の特徴点P1を中心とするテンプレートTF1を、画像PH2の特徴点Q1〜Q4の近傍で移動させながら、画像PH2に対するテンプレートTF1の相関値Rを順次算出する。CPU21は、上述の処理を、特徴点P2〜P4についても行う。
次のステップS1203では、CPU21は、図7を参照するとわかるように、算出した相関値Rに基づいて、画像PH1の特徴点P1〜P4を始点とし、画像PH2の特徴点Q1〜Q4を終点とするオプティカルフローOP1〜OP4を規定する。
次のステップS1204では、CPU21は、規定された1群のオプティカルフローのグルーピングを行う。図7に示されるように、本実施形態では説明の便宜上、車両101に関するオプティカルフローが4本である場合について説明している。しかしながら、実際は、車両101を撮影した画像からは、数十或いは数百の特徴点を抽出することができる。そして、数十或いは数百本のオプティカルフローを規定することができる。
CPU21は、数十或いは数百本のオプティカルフローのうちから、ノイズ成分を多く含むオプティカルフローを除外し、残りのオプティカルフローをグルーピングする。例えば、車両101が完全な直線運動をしている場合には、各オプティカルフローと一致する直線は消失点VPで交わるはずである。そこで、CPU21は、オプティカルフローと一致する直線が、消失点VPから著しく離れている場合には、このオプティカルフローを除外し、残りのオプティカルフローを同一の移動体に関連するオプティカルフローとみなしてグルーピングする。ここでは車両101に関するオプティカルフローOP1〜OP4が、車両101のオプティカルフローとしてグルーピングされる。ステップS1204の処理が終了すると、CPU21は、ステップS206へ移行する。
ステップS206では、CPU21は、グルーピングされたオプティカルフローに基づいて、自車両100に接近する物体があるか否かを判断する。例えば、図7に示されるように、グルーピングされたオプティカルフローが、消失点VPから離れる方向を向いている場合は、CPU21は、自車両100に接近する物体があると判断する。一方、グルーピングされたオプティカルフローが、消失点VPに近づく方向を向いている場合は、CPU21は、自車両100に接近する物体がないと判断する。
CPU21は、自車両100に接近する物体がないと判断した場合には(ステップS206:No)、ステップS202へ戻り、ステップS202以降の処理を実行する。また、CPU21は、自車両100に接近する物体があると判断した場合には(ステップS206:Yes)、ステップS207へ移行する。
ステップS207では、CPU21は、オプティカルフローOP1〜OP4を用いて、車両101が自車両100に衝突するまでの衝突予測時間TTCを算出する。
画像PH1が撮影されたときに、例えば図3における矢印a1に示される位置にある車両101は、画像PH2が撮影されたときには、図3における矢印a2に示される位置に相対的に移動している。この場合、図8に示されるように、特徴点P1を始点とし、特徴点Q1を終点とするオプティカルフローOP1に対応するXYZ座標系でのベクトルは、始点を対応点RP1とし、終点を対応点RQ1とするベクトルMV0となる。
オプティカルフローOP1は、撮影装置31の画像面IM(図3参照)内における特徴点の移動軌跡を示している。そして、ベクトルMV0は、XYZ座標系における対応点の移動軌跡を示している。本実施形態では、車両101は、Z軸に平行に相対移動するため、ベクトルMV0はZ軸に平行となる。また、特徴点P1及び対応点RP1は、XYZ座標系において原点Oを通る直線LN3上に配置されている。そして、特徴点Q1及び対応点RQ1は、XYZ座標系において原点Oを通る直線LN4上に配置されている。
したがって、対応点RQ1と一致している車両101の指標点が、X座標をX1とするX軸上の点CP1に到達するまでの軌跡を示すベクトルMV2の大きさ|MV2|と、特徴点P1のX座標x2と、特徴点Q1のX座標x1と、ベクトルMV0の大きさ|MV0|との幾何学的な関係は、次式(2)で示される。
ここで、ベクトルMV0の大きさ|MV0|は、画像PH1が撮像された時刻から画像PH2が撮像された時刻までの時間Δtと、自車両100に対する車両101の相対速度Vとの積(=V・Δt)である。また、ベクトルMV2の大きさ|MV2|は、指標点が対応点RQ1からX軸上の点CP1まで移動するのに要する時間TTCcと、相対速度Vとの積(=V・TTCc)である。
そこで、上記式(2)の|MV2|に(V・TTCc)を代入し、|MV0|に(V・Δt)を代入して、両辺を相対速度Vで除することで、次式(3)が得られる。
また、車両101の指標点が、対応点RQ1から直線LN2で示される衝突面上の点CP2に到達するまでの軌跡を示すベクトルMV1は、Z軸と平行である。そして、ベクトルMV1の大きさ|MV1|とベクトルMV2の大きさ|MV2|との関係は、X軸から対応点RQ1までの距離Z1と、X軸と点CP2までの距離Lを用いると、次式(4)で示される。そして、次式(4)の|MV2|に(V・TTCc)を代入し、|MV1|に(V・TTC)を代入して、両辺を相対速度Vで除することで、相対速度Vを含む項を含まない次式(5)が得られる。
上記式(5)のLは、X軸と直線LN2で示される衝突面との距離であり、撮影装置31の取り付け位置と自車両100の前端との距離にほぼ等しい既知の値である。このため、CPU21は、X軸と対応点RQ1との距離Z1の値がわかれば、上記式(5)を用いて、車両101が自車両100に衝突するまでの衝突予測時間TTCを算出することが可能となる。
そこで、CPU21は、次式(6)を用いて距離Z1を算出する。そして、算出した距離Z1を、上記式(5)に代入して、衝突予測時間TTCを算出する。なお、fは撮影装置31の焦点距離である。また、δは、画像PH1,PH2を構成する画素のy軸方向の配列間隔である。また、hは、自車両100が走行する路面と撮影装置31との距離である。また、ybは、図5に示されるように、画像PH2における、特徴点Q1と自車両100が走行する路面との距離である。
次のステップS213では、CPU21は、衝突予測時間TTCが閾値より小さいか否かを判断する。CPU21は、衝突予測時間TTCが閾値以上であると判断した場合には(ステップS213:No)、ステップS202へ戻り、ステップS202以降の処理を実行する。一方、CPU21は、衝突予測時間TTCが閾値よりも小さいと判断した場合には(ステップS213:Yes)、ステップS214へ移行する。
ステップS214では、警報装置へ、警報の発令を指示する。これにより、自車両100のドライバに対して警報が発令される。
また、ステップS204での判断が肯定された場合には(ステップS204:Yes)、CPU21は、ステップS208へ移行する。
ステップS208では、CPU21は、後述するステップS210で接近車両の判断を行うにあたり、当該ステップS210で用いられる車両パターンについての特徴量が、信頼できるものであるか否かを判断する。例えば、この信頼性の有無の判断は、ある時刻tiに撮影された画像PH1についての車両パターンの信頼度riと、画像PH1の次の時刻ti+1に撮影された画像PH2についての車両パターンの信頼度ri+1の双方が、所定の閾値を超えているか否かにより判断する。
なお、信頼度についての信頼性の判断は、画像PH1,PH2相互間で、同一の車両パターンについて行われる。例えば、画像PH1のテールランプの部分画像について特徴量と、画像PH2のテールランプの部分画像について特徴量の双方が、閾値を超えているか否かについての判断は行われる。しかしながら、例えば画像PH1のテールランプの部分画像について特徴量と、画像PH2のヘッドランプの部分画像等について特徴量の双方が、閾値を超えているか否かについての判断は行われない。
そして、ある車両パターンについての信頼度riと信頼度ri+1の双方の信頼度について、信頼性があると判断された場合には、ステップS208での判断が肯定される。一方、すべての車両パターンについて、信頼度riと信頼度ri+1のいずれか一方、或いは双方の信頼度について信頼性がないと判断された場合には、ステップS208での判断が否定される。
CPU21は、ステップS208で信頼性がないと判断した場合には(ステップS208:No)、ステップS209に移行する。
ステップS209では、CPU21は、画像PHから抽出された車両パターンに基づいて、車両101を含む検出領域を設定する。これにより、例えば図6に示されるように、画像PHに、車両101の画像が現れると予測される領域A2が設定される。CPU21は、ステップS209での処理が終了すると、領域A2について、ステップS205以降の処理を行う。
また、CPU21は、ステップS208で信頼性があると判断した場合には(ステップS208:Yes)、ステップS210に移行する。
ステップS210では、CPU21は、接近車両の判断を行うために、図20に示されるサブルーチンSR11を実行する。サブルーチンSR11の最初のステップS1301では、上述した車両の輪郭、テールランプ、ヘッドランプ、影、タイヤ、ナンバープレートの部分画像(車両パターン)のうち、ステップS208での条件を満たし、信頼度が最大となる部分画像を特定する。具体的には、ステップS208での判断が肯定された車両パターンのうち、最大の信頼度を持つ車両パターンの部分画像を特定する。
この部分画像の特定における最大の信頼度としては、各車両パターンにおける最新の撮影画像である画像PH2に関しての信頼度を用いてもよい。また、各車両パターンにおける画像PH1についての信頼度と画像PH2についての信頼度のうちの、小さい方の信頼度を用いてもよい。
次のステップS1302では、CPU21は、ステップS1301で特定した部分画像の幅又は高さの変動比を算出する。例えば、画像PH1での部分画像の幅がW1であり画像PH2での部分画像の幅がW2である場合には、W2をW1で除して変動比(=W2/W1)を算出する。また、画像PH1での部分画像の高さがH1であり画像PH2での部分画像の高さがH2である場合には、H2をH1で除して変動比(=H2/H1)を算出する。CPU21は、ステップS1302での処理が終了すると、サブルーチンSR11を終了し、次のステップS211へ移行する。
ステップS211では、CPU21は、接近車両があるか否かを判断する。具体的には、ステップS210で算出した変動比が1より大きい場合は、CPU21は、自車両100に接近する車両があると判断する。一方、ステップS210で算出した変動比が1以下である場合は、CPU21は、自車両100に接近する車両がないと判断する。
CPU21は、自車両100に接近する車両がないと判断した場合には(ステップS211:No)、ステップS202へ戻り、ステップS202以降の処理を実行する。また、CPU21は、自車両100に接近する車両があると判断した場合には(ステップS211:Yes)、ステップS212へ移行する。
ステップS212では、CPU21は、部分画像(車両パターン)の大きさの変化に基づいて、衝突予測時間を算出する。
例えば、車両101の車幅をWV、画像PHにおける部分画像の幅をwv、画像PHの水平方向の幅をwc、画像PH2に対応する撮影装置31の視野角をFOVとすると、自車両100と車両101との距離は、次式(7)で示される。
そこで、CPU21は、画像PH1に基づいて距離Z1を算出し、画像PH2に基づいて距離Z2を算出する。次に、次式(8)に基づいて、自車両100と車両101との相対速度を求め、距離Z2を相対速度Vで除することで、衝突予測時間TTCを算出する。
V=(Z1−Z2)/TF …(8)
ステップS212の処理が終了すると、CPU21は、ステップS213へ移行し、ステップS213以降の処理を実行する。
以上説明したように、本実施形態では、例えば画像PHに写る車両101の画像が鮮明で、一組の画像PH1,PH2から車両パターンが検出された場合は(ステップS204:Yes)、当該車両パターンとしての部分画像に基づいて、車両101が自車両100に衝突するまでの衝突時間が算出される。一方、自車両100の周囲環境が、例えば夜間や、悪天候などであって、一組の画像PH1,PH2から車両パターンが検出されなかった場合は(ステップS204:No)、一組の画像PH1,PH2それぞれの特徴点によって規定されるオプティカルフローが算出される。そして、これらのオプティカルフローに基づいて、車両101が自車両100に衝突するまでの衝突時間が算出される。
このため、車両101の画像を構成する車両パターンを検出することができたときは、当該検出パターンを用いた比較的演算量の少ない簡単な演算を行って、衝突時間を算出することできる。また、車両パターンを検出することができないときは、演算量は比較的多くなるが、オプティカルフローを用いた比較的複雑な演算を行って、精度よく衝突時間を算出することができる。これにより、自車両の周囲環境にかかわらず、正確に衝突時間を算出することができる。
また、車両101の画像を構成する車両パターンが検出できたときは、当該検出パターンを用いた比較的演算量の少ない簡単な演算により、衝突時間を算出することができる。これにより、周囲の環境に応じて、短時間に効率よく衝突時間を算出することができる。
本実施形態では、車両パターンの特徴量を算出する際に、自車両100の周囲環境に応じて(ステップS505,S506)、或いは車両パターンの算出履歴に応じて(ステップS503)、車両パターンに順位が付与され、この順位に従って車両パターンの特徴量が順次算出される。そして、車両パターンの信頼度が算出されるたびに、信頼度の確率和を認識信頼度として算出し、当該信頼度が信頼性の判断に十分な値となった場合には、信頼度の更新が停止される。これにより、信頼性の判断が可能になったときには、残りの車両パターンについての信頼度の算出を行うことなく、以降の処理が続行される。したがって、迅速に衝突時間を算出することが可能となる。
本実施形態では、一組の画像PH1,PH2から車両パターンが検出された場合は(ステップS204:Yes)、当該車両パターンとしての部分画像に基づいて、車両101が自車両100に衝突するまでの衝突時間が算出される。しかしながら、車両パターンが車両101の画像を構成する信頼性が低いと考えられる場合には(ステップS208:No)、例外的に、オプティカルフローを用いた比較的複雑な演算によって、衝突時間が算出される。したがって、不用意に簡単な演算で衝突時間が算出されることがなく、精度よく衝突時間を算出することができる。
以上、本発明の実施形態について説明したが、本発明は上記実施形態によって限定されるものではない。例えば、上記実施形態では、車両パターンの一例として、車両の輪郭、テールランプ、ヘッドランプ、影、タイヤ、ナンバープレートに対応する車両パターンについて説明しが、車両パターンはこれに限られるものではない。
上記実施形態では、衝突予測時間が閾値以下になったら、ドライバに警報を発することとした(ステップS214)。これに限らず、衝突予測時間が閾値以下になったら、車両のブレーキを動作させることとしてもよい。
上記実施形態では、自車両100の前方を走行する車両101が、自車両100に衝突するまでの時間を算出することとした。これに限らず、本発明は、自車両の後方等、自車両の周囲を走行する車両が、自車両に衝突するまでの衝突時間の算出にも適している。
上記実施形態では、CPU21によって、補助記憶部に記憶されたプログラムが実行されることにより、推定距離が算出された。これに限らず、演算装置20を、ハードウェアによって構成してもよい。
また、演算装置20の補助記憶部23に記憶されているプログラムは、フレキシブルディスク、CD−ROM(Compact Disk Read-Only Memory)、DVD(Digital Versatile Disk)、MO(Magneto-Optical disk)等のコンピュータで読み取り可能な記録媒体に格納して配布し、そのプログラムをコンピュータにインストールすることにより、上述の処理を実行する装置を構成することとしてもよい。
また、プログラムをインターネット等の通信ネットワーク上の所定のサーバ装置が有するディスク装置等に格納しておき、例えば、搬送波に重畳させて、コンピュータにダウンロード等するようにしても良い。
なお、本発明は、本発明の広義の精神と範囲を逸脱することなく、様々な実施形態及び変形が可能とされるものである。また、上述した実施形態は、本発明を説明するためのものであり、本発明の範囲を限定するものではない。