以下、本発明に係る立体物検出装置を有する移動体機器制御システムの実施形態について説明する。
〈車載機器制御システムの概略構成〉
図1は、本発明の実施形態に係る移動体機器制御システムとしての車載機器制御システムの概略構成を示す模式図である。
この車載機器制御システムは、移動体である自動車などの自車両100に搭載されており、撮像ユニット101、画像解析ユニット102、表示モニタ103、及び車両走行制御ユニット104からなる。そして、撮像ユニット101で撮像した自車両進行方向前方領域(撮像領域)の撮像画像データから、自車両前方の路面(移動面)の相対的な高さ情報(相対的な傾斜状況を示す情報)を検知し、その検知結果から、自車両前方の走行路面の3次元形状を検出し、その検出結果を利用して各種車載機器の制御を行う。
撮像ユニット101は、例えば、自車両100のフロントガラス105のルームミラー(図示せず)付近に設置される。撮像ユニット101の撮像によって得られる撮像画像データ等の各種データは、画像処理手段としての画像解析ユニット102に入力される。画像解析ユニット102は、撮像ユニット101から送信されてくるデータを解析して、自車両100が走行している路面部分(自車両の真下に位置する路面部分)に対する自車両前方の走行路面上の各地点における相対的な高さ(位置情報)を検出し、自車両前方の走行路面の3次元形状を把握する。
画像解析ユニット102の解析結果は、表示モニタ103及び車両走行制御ユニット104に送られる。表示モニタ103は、撮像ユニット101で得られた撮像画像データ及び解析結果を表示する。車両走行制御ユニット104は、画像解析ユニット102による走行路面の相対傾斜状況の認識結果に基づいて自車両前方の他車両、歩行者、各種障害物などの認識対象物を認識し、その認識結果に基づいて、自車両100の運転者へ警告を報知したり、自車両のハンドルやブレーキを制御するなどの走行支援制御を行ったりする。
〈撮像ユニット101及び画像解析ユニット102の概略構成〉
図2は、図1における撮像ユニット101及び画像解析ユニット102の概略構成を示す模式図である。
撮像ユニット101は、撮像手段としての2つの撮像部110a,110bを備えたステレオカメラで構成されており、2つの撮像部110a,110bは同一のものである。各撮像部110a,110bは、それぞれ、撮像レンズ111a,111bと、受光素子が2次元配置された画像センサ113a,113bを含んだセンサ基板114a,114bと、センサ基板114a,114bから出力されるアナログ電気信号(画像センサ113a,113b上の各受光素子が受光した受光量に対応する電気信号)をデジタル電気信号に変換した撮像画像データを生成して出力する信号処理部115a,115bとから構成されている。撮像ユニット101からは、輝度画像データと視差画像データが出力される。
また、撮像ユニット101は、FPGA(Field-Programmable Gate Array)等からなる処理ハードウェア部120を備えている。この処理ハードウェア部120は、各撮像部110a,110bから出力される輝度画像データから視差画像を得るために、各撮像部110a,110bでそれぞれ撮像した撮像画像間の対応画像部分の視差値を演算する視差画像情報生成手段としての視差演算部121を備えている。
ここでいう視差値とは、各撮像部110a,110bでそれぞれ撮像した撮像画像の一方を基準画像、他方を比較画像とし、撮像領域内の同一地点に対応した基準画像上の画像部分に対する比較画像上の画像部分の位置ズレ量を、当該画像部分の視差値として算出したものである。三角測量の原理を利用することで、この視差値から当該画像部分に対応した撮像領域内の当該同一地点までの距離を算出することができる。
図3は、三角測量の原理を利用することで視差値から距離を算出する原理を説明するための図である。図において、fは撮像レンズ111a,111bのそれぞれの焦点距離であり、Dは光軸間の距離である。また、Zは撮像レンズ111a,111bから被写体301までの距離(光軸に平行な方向の距離)である。この図において、被写体301上にある点Oに対する左右画像での結像位置は、結像中心からの距離がそれぞれΔ1とΔ2となる。このときの視差値dは、d=Δ1+Δ2と規定することができる。
図2の説明に戻る。画像解析ユニット102は、画像処理基板等から構成され、撮像ユニット101から出力される輝度画像データ及び視差画像データを記憶するRAMやROM等で構成される記憶手段122と、識別対象の認識処理や視差計算制御などを行うためのコンピュータプログラムを実行するCPU(Central Processing Unit)123と、データI/F(インタフェース)124と、シリアルI/F125を備えている。
処理ハードウェア部120を構成するFPGAは、画像データに対してリアルタイム性が要求される処理、例えばガンマ補正、ゆがみ補正(左右の撮像画像の平行化)、ブロックマッチングによる視差演算を行って視差画像の情報を生成し、画像解析ユニット102のRAMに書き出す処理などを行う。画像解析ユニット102のCPUは、各撮像部110A,110Bの画像センサコントローラの制御および画像処理基板の全体的な制御を担うとともに、路面の3次元形状の検出処理、ガードレールその他の各種オブジェクト(識別対象物)の検出処理などを実行するプログラムをROMからロードして、RAMに蓄えられた輝度画像データや視差画像データを入力として各種処理を実行し、その処理結果をデータI/F124やシリアルI/F125から外部へと出力する。このような処理の実行に際し、データI/F124を利用して、自車両100の車速、加速度(主に自車両前後方向に生じる加速度)、操舵角、ヨーレートなどの車両動作情報を入力し、各種処理のパラメータとして使用することもできる。外部に出力されるデータは、自車両100の各種機器の制御(ブレーキ制御、車速制御、警告制御など)を行うための入力データとして使用される。
〈物体検出処理の概要〉
図4は、図2における処理ハードウェア部120及び画像解析ユニット102で実現される物体検出処理について説明するための処理ブロック図である。以下、本実施形態における物体検出処理について説明する。
ステレオカメラを構成する2つの撮像部110a,110bからは輝度画像データが出力される。このとき、撮像部110a,110bがカラーの場合には、そのRGB信号から輝度信号(Y)を得るカラー輝度変換を、例えば下記の式〔1〕を用いて行う。
Y=0.3R+0.59G+0.11B …式〔1〕
《平行化画像生成処理》
輝度画像データに対して、まず、平行化画像生成部131で平行化画像生成処理が実行される。この平行化画像生成処理は、撮像部110a,110bにおける光学系の歪みや左右の撮像部110a,110bの相対的な位置関係から、各撮像部110a,110bから出力される輝度画像データ(基準画像と比較画像)を、2つのピンホールカメラが平行に取り付けられたときに得られる理想的な平行化ステレオ画像となるように変換する。これは、各画素での歪み量を、Δx=f(x,y)、Δy=g(x,y)という多項式を用いて計算し、その計算結果を用いて、各撮像部110a,110bから出力される輝度画像データ(基準画像と比較画像)の各画素を変換する。多項式は、例えば、x(画像の横方向位置)、y(画像の縦方向位置)に関する5次多項式に基づく。
《視差画像生成処理》
このようにして平行化画像処理を行った後、次に、視差演算部121(図2)によって構成される視差画像生成部132において、視差画像データ(視差画像情報)を生成する視差画像生成処理を行う。視差画像生成処理では、まず、2つの撮像部110a,110bのうちの一方の撮像部110aの輝度画像データを基準画像データとし、他方の撮像部110bの輝度画像データを比較画像データとし、これらを用いて両者の視差を演算して、視差画像データを生成して出力する。この視差画像データは、基準画像データ上の各画像部分について算出される視差値dに応じた画素値をそれぞれの画像部分の画素値として表した視差画像を示すものである。
具体的には、視差画像生成部132は、基準画像データのある行について、一つの注目画素を中心とした複数画素(例えば16画素×1画素)からなるブロックを定義する。一方、比較画像データにおける同じ行において、定義した基準画像データのブロックと同じサイズのブロックを1画素ずつ横ライン方向(X方向)へずらし、基準画像データにおいて定義したブロックの画素値の特徴を示す特徴量と比較画像データにおける各ブロックの画素値の特徴を示す特徴量との相関を示す相関値を、それぞれ算出する。そして、算出した相関値に基づき、比較画像データにおける各ブロックの中で最も基準画像データのブロックと相関があった比較画像データのブロックを選定するマッチング処理を行う。その後、基準画像データのブロックの注目画素と、マッチング処理で選定された比較画像データのブロックの対応画素との位置ズレ量を視差値dとして算出する。このような視差値dを算出する処理を基準画像データの全域又は特定の一領域について行うことで、視差画像データを得ることができる。
マッチング処理に用いるブロックの特徴量としては、例えば、ブロック内の各画素の値(輝度値)を用いることができ、相関値としては、例えば、基準画像データのブロック内の各画素の値(輝度値)と、これらの画素にそれぞれ対応する比較画像データのブロック内の各画素の値(輝度値)との差分の絶対値の総和を用いることができる。この場合、当該総和が最も小さくなるブロックが最も相関があると言える。
視差画像生成部132でのマッチング処理をハードウェア処理によって実現する場合には、例えばSSD(Sum of Squared Difference)、ZSSD(Zero-mean Sum of Squared Difference)、SAD(Sum of Absolute Difference)、ZSAD(Zero-mean Sum of Absolute Difference)などの方法を用いることができる。なお、マッチング処理では画素単位での視差値しか算出できないので、1画素未満のサブピクセルレベルの視差値が必要な場合には推定値を用いる必要がある。その推定方法としては、例えば、等角直線方式、二次曲線方式等を利用することができる。ただし、このサブピクセルレベルの推定視差値には誤差が発生するので、この推定誤差を減少させるEEC(推定誤差補正)などを用いてもよい。
《視差画像補間処理の概要》
視差画像生成処理を行ったら、次に画像解析ユニット102によって構成される視差補間部133において、視差画像補間処理を行い、補間視差画像を生成する。図5は、視差画像補間処理の概要について説明するための図である。ここで、図5Aは撮像画像、図5Bは視差画像である。また、図5C〜Eは、視差画像補間処理を実行する条件を説明するための図である。
図5Aに示す車両の撮像画像(輝度画像)310から、視差画像生成部132により図5Bに示す視差画像320が生成される。視差値ddは水平方向の位置ズレの度合いなので、撮像画像310の水平エッジ部分や輝度変化の少ない部分では視差が計算できないため、車両を一つのオブジェクトとして認識できなくなる。
そこで、視差補間部133では、下記a〜eの5つの判定条件に基づいて、視差画像の同一ライン上の2点、即ち図5Bに示す同一Y座標(画像の垂直方向)の2点の画素P1(視差値D1)、P2(視差値D2)を補間する。
a:2点間の実距離が所定の長さより短い(第1判定条件)。
視差値D1に対応する距離をZ1、画素P1、P2間の画像上の距離をPXとすると、2点間の近似的な実距離RZは、ステレオカメラの焦点距離をfとすると、「RZ=Z1/f*PX」で算出することができる。RZが所定の値(乗用車1台に相当する幅:1900mm)以内であれば、この条件は満たされる。
b:2点間に他の視差値が存在しない(第2判定条件)。
即ち、図5Cにおける画素P1と画像P2を結ぶライン321上の画素に視差値が存在しない。
c:2点の奥行の差(自車両100の前方方向の距離の差)がどちらか一方の距離に応じて設定する閾値より小さい、又は2点の奥行の差がどちらか一方の距離における測距精度に応じて設定する閾値より小さい(第3判定条件)。
ここで、左側の画素P1の視差値D1より距離Z1を計算する。ステレオ方式の測距精度、特にブロックマッチングによる測距精度は距離に依存する。つまり、その精度は例えば距離±10%のという具合である。そこで、測距精度が10%であるならば、奥行の差の閾値をZ1の20%(=Z1*0.2)とする。
d:2点より高く、かつ所定の高さ(例えば1.5m:車高に対応)以下の位置に水平エッジが存在する(第4判定条件)。
即ち、図5Dに示すように、例えば2点から1.5m以内の高さの領域322に水平エッジが所定数以上存在するか否かを判定する。高さ1.5mに相当する画素数PZは、画素P1の視差値D1から算出される距離Z1とステレオカメラの焦点距離fから、「PZ=1.5m*f/Z1」の式により算出することができる。
ここで、水平エッジが存在する場合とは、画素P1、P2間のある画素(注目画素)において、その上方の領域322内に水平エッジがあることを意味する。つまり、後述するエッジ位置カウントのラインバッファの前記画素位置における値が1以上PZ以下である。
そして、後述する水平エッジ検出処理(図6のステップS2、図7A)を1ライン実行した後、次ラインの視差補間において画素P1、P2間を補間しようとするとき、画素P1、P2間に水平エッジが存在する場合が画素P1、P2間の画素数の1/2より大きいとき、第4判定条件は真となる。
想定するシーンは車両の屋根323である。水平エッジが連続している場合、画素P1、P2の視差値D1、D2の差が所定値以下であれば補間する。
e:2点間の上下近傍にその2点より遠方の視差情報(遠方視差値)が存在しない(第5判定条件)。
遠方の視差情報とは、視差値D1、D2から得られる距離Z1、Z2の大きい方の値の20%以上遠方の距離に対応する視差値である。
即ち、例えば図5Eに示すように、画素P1、P2より高い位置(上側1.5m以内。画素数でいえばPZ以内)の領域322、或いは領域322の下側10ライン以内の領域324で、画素P1、P2間の各画素の上下方向に遠方視差を持つ場合を画素P1、P2間の全画素について数える。そして、その総和が所定の値(例えば2)以上のとき、第5判定条件は真となる。
ここで、P1、P2間のある画素が遠方視差を持つ場合とは、後述する上側視差位置カウントに1以上PZ以下の値があるか、又は後述する下側視差位置ビットフラグの各ビットのいずれかに1が立っている場合である。
第5判定条件が偽となる場合とは、補間しようとするラインの近傍に遠方視差が存在する場合、即ち、遠方の物体が見えている場合である。その場合は、視差補間をしないことになる。
《視差画像補間処理のフロー》
次に視差補間処理について詳細に説明する。
図6は、視差画像補間処理の全体の流れを示すフローチャートである。
まず、第4判定条件用ラインバッファ(エッジ位置カウント)、及び第5判定条件用ラインバッファ(上側視差位置カウント、下側視差位置ビットフラグ)を初期化する(ステップS1)。
ここで、エッジ位置カウントは、視差補間するラインより何ライン上に水平エッジがあるかを表す情報を画素単位で保持するためにラインバッファに設定されたカウンタである。また、上側視差位置カウントは、視差補間するラインより何ライン上の領域322内に遠方視差値があるかを示す情報を保持するためにラインバッファに設定されたカウンタである。また、下側視差位置ビットフラグは、視差補間するラインの下側10ライン以内(領域324内)に遠方視差値があることを表す情報を保持するためにラインバッファに設定されたカウンタである。下側視差位置ビットフラグは、11ビットフラグが1ラインの画素数分用意される。
次に、第4判定条件のために、ある1ラインの水平エッジを検出する(ステップS2)。図7は、ステップS2(水平エッジ検出処理)の詳細について説明するための図である。ここで、図7Aは、水平エッジ検出処理のアルゴリズムを示すフローチャートであり、図7Bは、エッジ位置カウント及びその値の変化の例を示す図である。
まず輝度画像をSobel(ソーベル)フィルタで処理することで、垂直エッジ及び水平エッジの強度を求め(ステップS11)、水平エッジ強度が垂直エッジ強度の2倍を超えているか否かを判断する(ステップS12)。
そして、水平エッジ強度が垂直エッジ強度の2倍を超えているときは(ステップS12:YES)、水平エッジありと判断してエッジ位置カウントを1に設定する(ステップS13)。一方、水平エッジ強度が垂直エッジ強度の2倍以下のときは(ステップS12:NO)、水平エッジなしと判断して、エッジ位置カウントが0より大きいか否かを判断する(ステップS14)。そして、0より大きいときは(ステップS14:YES)、エッジ位置カウントを1つインクリメントする(ステップS15)。ステップS14でエッジ位置カウントが0であると判断したときは(ステップS14:NO)、エッジ位置カウントを更新しない。
水平エッジの有無とエッジ位置カウントの値によりステップS13、S15でエッジ位置カウントの値を更新した後、又はステップS14でエッジ位置カウントが0であると判断した後(ステップS14:NO)、ステップS16に進み、ライン内の次の画素の有無を判断する。
次の画素があるときは(ステップS16:YES)、ステップS11に移行し、ステップS11〜S15を繰り返す。次の画素がないときは(ステップS16:NO)、この図に示す1ライン分の水平エッジ検出処理が終了する。
図7Aに示すように、各画素に対応するエッジ位置カウントの初期値はステップS1で初期化された0になっている。あるラインで水平エッジが見つかり始めると、ステップS13でエッジ位置カウントが1に設定される。図7Bでは、全12画素のうち、中央の2画素及び両端の4画素を除く6画素について、水平エッジが検出されたことを示している。次のラインでは、両端の4画素を除く8画素について、水平エッジが検出されたことを示している。その次のラインでは、水平エッジが検出されないため、ステップS15でエッジカウントがインクリメントされ、2になっている。
以後の各ラインで水平エッジが検出された場合は、エッジカウントの値が1となり、水平エッジが検出されない限り、エッジカウントが1ずつインクリメントされる。従って、各画素に対応するエッジカウントの値により、視差補間をしようとする何ライン上に水平エッジがあるかが判る。
1ライン分の水平エッジ検出処理が終了したら、次に第5判定条件のために遠方視差値を検出する(ステップS3)。図8は、ステップS3(遠方視差値検出処理)のアルゴリズムを示すフローチャートである。
図5Eにおける上側の領域322に対する処理、下側の領域324に対する処理が並行して行われるが、便宜上、上側の領域322に対する処理、下側の領域324に対する処理の順で個別に説明する。
上側については、まず遠方視差値の有無を判断する(ステップS21)。判断の結果、あるときは(ステップS21:YES)、上側視差位置カウントを1に設定し(ステップS22)、ないときは(ステップS21:NO)、上側視差位置カウントが0より大きいか否かを判断する(ステップS23)。そして、0より大きいときは(ステップS23:YES)、上側視差位置カウントを1つインクリメントする(ステップS24)。
遠方視差値の有無とそのときの上側視差位置カウントの値によりステップS22或いはS24で上側視差位置カウントの値を更新した後、又はステップS23で上側視差位置カウントが0であると判断した後(ステップS23:NO)、ステップS25に進み、ライン内の次の画素の有無を判断する。
次の画素があるときは(ステップS25:YES)、ステップS21に移行し、ステップS21〜S24を繰り返す。次の画素がないときは(ステップS25:NO)、この図に示す1ライン分の上側遠方視差値の検出処理が終了する。
つまり、上側遠方視差の検出処理は、図7Aに示す処理における水平エッジを遠方視差値に変えたものである。
下側については、まず下側11ライン目に遠方視差値があるか否かを判断する(ステップS26)。判断の結果、あるときは(ステップS26:YES)、下側視差位置ビットフラグの11ビット目を1に設定した後(ステップS27)、下側視差位置ビットフラグを1ビット右へシフトする(ステップS28)。判断の結果、ないときは(ステップS26:NO)、そのまま下側視差位置ビットフラグを1ビット右へシフトする。これにより、2つの画素(P1、P2)間の画素の下側10ライン内で最も近いラインにある視差の位置が判る。
ライン内に次の画素がある間は(ステップS29:YES)、ステップS26〜S28を繰り返し、なくなったら(ステップS29:NO)、この図に示す1ライン分の下側遠方視差値の検出処理が終了する。
1ライン分の遠方視差検出処理が終了したら、次のラインに進み(ステップS4)、第1〜第3判定条件を満たす2点を設定する(ステップS5)。次に、ステップS5で設定した2点に対して、第4、第5判定条件を満たすか否かを調べ(ステップS6)、満たしている場合は、視差値を補間する(ステップS7)。このとき、2点の視差値の平均値を2点間の視差値とする。
視差値を補間しようとする画素がある間は(ステップS8:YES)、ステップS5〜S7を繰り返し、なくなったら(ステップS8:NO)、ステップS9に進んで、次のラインの有無を判断する。そして、次のラインがある間は(ステップS9:YES)、ステップS2〜S8を繰り返し、なくなったら(ステップS9:NO)、この図に示す視差補間処理が終了する。
《Vマップ生成処理》
このようにして視差画像補間処理を行ったら、次にVマップ生成部134において、Vマップを生成するVマップ生成処理を実行する。視差画像データに含まれる各視差画素データは、x方向位置とy方向位置と視差値dとの組(x,y,d)で示される。これを、X軸にd、Y軸にy、Z軸に頻度fを設定した三次元座標情報(d,y,f)に変換したもの、又はこの三次元座標情報(d,y,f)から所定の頻度閾値を超える情報に限定した二次元座標情報(d,y,f)を、視差ヒストグラム情報として生成する。本実施形態の視差ヒストグラム情報は、三次元座標情報(d,y,f)からなり、この三次元ヒストグラム情報をX−Yの2次元座標系に分布させたものを、Vマップ(視差ヒストグラムマップ)と呼ぶ。
具体的に説明すると、Vマップ生成部134は、画像を上下方向に複数分割して得られる視差画像データの各行領域について、視差値頻度分布を計算する。この視差値頻度分布を示す情報が視差ヒストグラム情報である。
図9は視差画像データ、及びその視差画像データから生成されるVマップについて説明するための図である。ここで、図9Aは視差画像の視差値分布の一例を示す図であり、図9Bは、図9Aの視差画像の行毎の視差値頻度分布を示すVマップを示す図である。
図9Aに示すような視差値分布をもった視差画像データが入力されたとき、Vマップ生成部134は、行毎の各視差値のデータの個数の分布である視差値頻度分布を計算し、これを視差ヒストグラム情報として出力する。このようにして得られる各行の視差値頻度分布の情報を、Y軸に視差画像上のy方向位置(撮像画像の上下方向位置)をとりX軸に視差値をとった二次元直交座標系上に表すことで、図9Bに示すようなVマップを得ることができる。このVマップは、頻度fに応じた画素値をもつ画素が前記二次元直交座標系上に分布した画像として表現することもできる。
図10は、一方の撮像部で撮像された基準画像としての撮影画像の画像例と、その撮影画像に対応するVマップを示す図である。ここで、図10Aが撮影画像であり、図10BがVマップである。即ち、図10Aに示すような撮影画像から図10Bに示すVマップが生成される。Vマップでは、路面より下の領域には視差は検出されないので、斜線で示した領域Aで視差がカウントされることはない。
図10Aに示す画像例では、自車両が走行している路面401と、自車両の前方に存在する先行車両402と、路外に存在する電柱403が映し出されている。また、図10Bに示すVマップには、画像例に対応して、路面501、先行車両502、及び電柱503がある。
この画像例は、自車両の前方路面が相対的に平坦な路面、即ち、自車両の前方路面が自車両の真下の路面部分と平行な面を自車両前方へ延長して得られる仮想の基準路面(仮想基準移動面)に一致している場合のものである。この場合、画像の下部に対応するVマップの下部において、高頻度の点は、画像上方へ向かうほど視差値dが小さくなるような傾きをもった略直線状に分布する。このような分布を示す画素は、視差画像上の各行においてほぼ同一距離に存在していてかつ最も占有率が高く、しかも画像上方へ向かうほど距離が連続的に遠くなる識別対象物を映し出した画素であると言える。
撮像部110aでは自車両前方領域を撮像するため、その撮像画像の内容は、図10Aに示すように、画像上方へ向かうほど路面の視差値dは小さくなる。また、同じ行(横ライン)内において、路面を映し出す画素はほぼ同じ視差値dを持つことになる。従って、Vマップ上において上述した略直線状に分布する高頻度の点は、路面(移動面)を映し出す画素が持つ特徴に対応したものである。よって、Vマップ上における高頻度の点を直線近似して得られる近似直線上又はその近傍に分布する点の画素は、高い精度で、路面を映し出している画素であると推定することができる。また、各画素に映し出されている路面部分までの距離は、当該近似直線上の対応点の視差値dから高精度に求めることができる。
ここで、Vマップ上における高頻度の点を直線近似する際、その直線近似処理に含める点をどの範囲まで含めるかは、その処理結果の精度を大きく左右する。即ち、直線近似処理に含める範囲が広いほど、路面に対応しない点が多く含まれ、処理精度を落とすことになり、また、直線近似処理に含める範囲が狭いほど、路面に対応する点の数が少なく、やはり処理精度を落とす結果となる。そこで、本実施形態では、後述する直線近似処理の対象とする視差ヒストグラム情報部分を、以下のようにして抽出している。
図11は、抽出範囲を説明するためのVマップを示す図である。
本実施形態における抽出条件は、自車両の前方路面が自車両の真下の路面部分510と平行な面を自車両前方へ延長して得られる仮想の基準路面(仮想基準移動面)に対応する視差値dと画像上下方向位置yとの関係を基準として定まる所定の抽出範囲2δn内に属するという条件である。この基準路面に対応する視差値dと画像上下方向位置yとの関係は、図11に示すように、Vマップ上において直線(以下「基準直線」という。)511で示される。本実施形態では、この基準直線511を中心に画像上下方向へ±δの範囲を、抽出範囲512として規定している。この抽出範囲512は、状況に応じて刻々と変化する実際の路面のVマップ要素(d,y,f)の変動範囲を含むように設定される。
具体的には、例えば、自車両前方の路面が相対的に上り傾斜である場合、当該路面が相対的に平坦である場合よりも、撮像画像中に映し出される路面画像部分(移動面画像領域)は画像上側へ広がる。しかも、同じ画像上下方向位置yに映し出される路面画像部分を比較すると、相対的に上り傾斜である場合には、相対的に平坦である場合よりも、視差値dが大きくなる。この場合のVマップ要素(d,y,f)は、Vマップ上において、図12に示すように、おおよそ、基準直線511に対し、上側に位置し、かつ、傾き(絶対値)が大きい直線を示すものとなる。本実施形態では、前方の路面510aにおける相対的な上り傾斜が想定され得る範囲内であれば、その路面のVマップ要素(d,y,f)が抽出範囲512内に収まる。
また、例えば、自車両前方の路面が相対的に下り傾斜である場合、そのVマップ要素(d,y,f)は、Vマップ上において、基準直線に対し、下側に位置し、かつ、傾き(絶対値)が小さい直線を示すものとなる。本実施形態では、前方の路面における相対的な下り傾斜が想定され得る範囲内であれば、その路面のVマップ要素(d,y,f)が抽出範囲内に収まる。
また、例えば、自車両100が速度を加速している加速時においては、自車両100の後方に加重がかかり、自車両の姿勢は、自車両前方が鉛直方向上側を向くような姿勢となる。この場合、自車両100の速度が一定である場合と比べて、撮像画像中に映し出される路面画像部分(移動面画像領域)は画像下側へシフトする。この場合のVマップ要素(d,y,f)は、Vマップ上において、図13に示すように、おおよそ、基準直線511に対し、下側に位置し、かつ、基準直線とほぼ平行な直線を示すものとなる。本実施形態では、自車両100の加速が想定され得る範囲内であれば、その路面510bのVマップ要素(d,y,f)が抽出範囲512内に収まる。
また、例えば、自車両100が速度を減速している減速時においては、自車両100の前方に加重がかかり、自車両の姿勢は、自車両前方が鉛直方向下側を向くような姿勢となる。この場合、自車両100の速度が一定である場合と比べて、撮像画像中に映し出される路面画像部分(移動面画像領域)は画像上側へシフトする。この場合のVマップ要素(d,y,f)は、Vマップ上において、おおよそ、基準直線に対し、上側に位置し、かつ、基準直線とほぼ平行な直線を示すものとなる。本実施形態では、自車両100の減速が想定され得る範囲内であれば、その路面のVマップ要素(d,y,f)が抽出範囲512内に収まる。
本実施形態では、路面を検出するための抽出範囲512は、この路面の上下、つまり加速減速に応じて仮想路面直線511を上下させることで、路面の視差データをVマップの抽出範囲512の中心にすえることができ、常に最適な状態で路面データの抽出と近似を行うことが可能になる。これにより、δnを小さくすることができ、Vマップの抽出範囲512を狭めることができるので、処理時間の短縮につながる。
車両の加速減速度に応じて基準直線511を上下させる度合いは、実験によって,車両の加速度センサの出力とそのときの基準直線511の変動との対応テーブルを作ったり、その関係を近似する関係式を作ったりして、車両毎に決定することができる。
ただし、加速時には基準直線511を下げ(切片を大きくする)、減速時には基準直線511を上げる(切片を小さくする)ことには各車種共通であり、実際には加速度の値に応じてどれだけ基準直線511の切片を変更するか、小さな変換テーブルをもつことで対応する。
この切片の変動に伴い,消失点のy座標Vyが変動する。消失点の変動に応じて後述する多重Vマップを作成する際の領域が変動し、より正確に路面の視差データをVマップに反映させることが可能になる。なお、消失点の詳細については後述する。
《Vマップ生成部の内部構成》
図14は、図4におけるVマップ生成部の内部構成の一例を示す処理ブロック図である。このVマップ生成部134−1は、車両動作情報入力部134a、視差画像路面領設定部134b、処理範囲抽出部134c、及びVマップ情報生成部134dからなる。
Vマップ生成部134−1は、視差補間部133から出力される視差画像データを受け取ると、まず、車両動作情報入力部134aにおいて、自車両100の加速度情報を含む車両動作情報を取得する。車両動作情報入力部134aに入力される車両動作情報は、自車両100に搭載されている機器から取得してもよいし、撮像ユニット101に加速度センサ等の車両動作情報取得手段を搭載し、その車両動作情報取得手段から取得してもよい。
このようにして車両動作情報を取得したら、次に、視差画像路面領域設定部134bにおいて、視差補間部133から取得した視差画像データに対し、撮像画像の一部である所定の路面画像候補領域(移動面画像候補領域)を設定する。この設定では、想定される状況の範囲内では路面が映し出されることがない領域を除外した画像領域を路面画像候補領域として設定する。具体的な設定方法としては、予め決められた固定の画像領域を路面画像候補領域として設定してもよいが、本実施形態では、撮像画像内における路面の消失点を示す消失点情報に基づいて路面画像候補領域を設定する。
このようにして路面画像候補領域を設定したら、次に、処理範囲抽出部134cにおいて、視差画像路面領域設定部134bが設定した路面画像候補領域内の視差画像データの中から、上述した抽出条件を満たす視差画素データ(視差画像情報構成要素)を抽出する処理を行う。即ち、Vマップ上において基準直線511を中心にした画像上下方向へ±δnの範囲に属する視差値dと画像上下方向位置yとをもつ視差画素データを抽出する。このようにして抽出条件を満たす視差画素データを抽出した後、Vマップ情報生成部134dにおいて、処理範囲抽出部134cが抽出した視差画素データ(x,y,d)をVマップ要素(d,y,f)に変換して、Vマップ情報を生成する。
以上の説明では、Vマップ情報生成部134dでVマップ情報を生成する前段階の処理範囲抽出部134cにおいて、路面画像部分に対応しない視差画像データ部分と区別して路面画像部分に対応する視差画像データ部分を抽出する例について説明したが、次のように、Vマップ情報を生成した後の段階で、同様の抽出処理を行ってもよい。
図15は、Vマップ情報を生成した後の段階で抽出処理を行う例におけるVマップ生成部134内の処理ブロック図である。このVマップ生成部134−2は、車両動作情報入力部134a、視差画像路面領設定部134b、Vマップ情報生成部134e、及び処理範囲抽出部134fからなる。
Vマップ生成部134−2では、視差画像路面領域設定部134bにおいて路面画像候補領域を設定した後、Vマップ情報生成部134eにおいて、視差画像路面領域設定部134bが設定した路面画像候補領域内の視差画素データ(x,y,d)をVマップ要素(d,y,f)に変換して、Vマップ情報を生成する。このようにしてVマップ情報を生成した後、処理範囲抽出部134fにおいて、Vマップ情報生成部134eが生成したVマップ情報の中から、上述した抽出条件を満たすVマップ要素を抽出する処理を行う。即ち、Vマップ上において基準直線511を中心にとした画像上下方向へ±δnの範囲に属する視差値dと画像上下方向位置yとをもつVマップ要素を抽出する。そして、抽出したVマップ要素で構成されるVマップ情報を出力する。
《Vマップ生成処理のフロー》
〔第1の処理例〕
図16は、本実施形態におけるVマップ情報生成処理の第1の処理例の流れを示すフローチャートである。また、図17は、視差画像に設定される路面画像候補領域について説明するための図である。
本処理例においては、車両動作情報(自車両前後方向の加速度情報)を用いずにVマップ情報を作成する例である。本処理例においては、自車両100の加速度情報を用いないため、基準路面に対応する基準直線を中心にとした抽出範囲すなわち値δの大きさは、比較的大きなものを用いる。
本処理例においては、まず、路面の消失点情報に基づいて路面画像候補領域を設定する(ステップS41)。路面の消失点情報を求める方法には特に制限はなく、公知の方法を広く利用することができる。
本処理例では、この路面の消失点情報(Vx,Vy)が示す消失点の画像上下方向位置Vyから所定のoffset値を引いた画像上下方向位置(Vy−offset値)から、当該視差画像データの画像上下方向位置yの最大値ysize(視差画像の最下部)までの範囲を、路面画像候補領域に設定する。また、画像上下方向位置が消失点に近い画像部分においては、その画像左右方向両端部分の画像領域に路面が映し出されることはあまり無い。そこで、この画像領域も除外して路面画像候補領域に設定してもよい。この場合、視差画像上に設定される路面画像候補領域は、図17に示すWABCDの各点で囲まれた領域となる。
このようにして路面画像候補領域を設定した後、この第1の処理例では、設定された路面画像候補領域内の視差画像データの中から、上述した抽出条件を満たす視差画素データ(視差画像情報構成要素)を抽出する処理を行う(ステップS42)。この処理では、予め設定されている固定の基準直線の情報と、その基準直線を基準とした抽出範囲を規定するための±δの情報とを用いて、当該抽出範囲に属する視差画素データを抽出する。その後、抽出した視差画素データ(x,y,d)をVマップ要素(d,y,f)に変換して、Vマップ情報を生成する(ステップS43)。
〔第2の処理例〕
図18は、本実施形態におけるVマップ情報生成処理の第2の処理例の流れを示すフローチャートである。
この第2の処理例においては、車両動作情報(自車両前後方向の加速度情報)を用いてVマップ情報を作成する例である。まず、車両動作情報を入力したら(ステップS51)、この車両動作情報に含まれる自車両前後方向の加速度情報に基づき、消失点情報と基準直線の情報を補正する(ステップS52)。以後のステップS54、S55は、それぞれ第1の処理例におけるステップS42、S43と同じである。
ステップS52における消失点情報の補正は、次のようにして行う。例えば自車両100の加速時には、自車両後方部分が加重され、自車両100の姿勢は、自車両前方が鉛直方向上側を向くような姿勢となる。この姿勢変化により、路面の消失点は、画像下側へ変位することになるので、これ合わせて、路面の消失点情報の画像上下方向位置Vyを加速度情報に基づいて補正する。例えば自車両100の減速時にも、同様に、その加速度情報に基づいて路面の消失点情報の画像上下方向位置Vyを補正する。このような補正を行うことで、後述する消失点情報を用いた路面画像候補領域の設定処理において、路面を映し出している画像部分を適切に路面画像候補領域として設定することができる。
また、基準直線情報の補正は、次のようにして行う。基準直線情報は、基準直線の傾きαと、切片(画像左端と基準直線とが交わる点の画像上下方向位置)βとを含む情報である。例えば自車両100の加速時には、自車両後方部分が加重され、自車両100の姿勢は、自車両前方が鉛直方向上側を向くような姿勢となる。この姿勢変化により、路面を映し出す路面画像部分は、全体的に画像下側へ変位することになる。
そこで、これに合わせて、抽出範囲を画像下側へシフトさせるために、その抽出範囲の基準となる基準直線の切片βを加速度情報に基づいて補正する。例えば自車両100の減速時にも、同様に、基準直線の切片βを加速度情報に基づいて補正する。このような補正を行うことで、抽出範囲内の視差画素データを抽出する処理において、路面を映し出している画像部分を適切に路面画像候補領域として設定することができる。このように加速度情報を用いて基準直線の情報を補正するので、抽出範囲を規定するδn値は、自車両の加速や減速を考慮しないでもよくなる。そのため、第2の処理例の抽出範囲は、固定された基準直線を基準に抽出範囲を設定する上述の処理例1よりも、狭くすることができ、処理時間の短縮や路面検出精度の向上を図ることができる。
以上説明した第1の処理例及び第2の処理例は、いずれも、Vマップ情報を生成する前段階で、路面画像部分に対応する視差画像データ部分を抽出する処理、即ち図14に示すVマップ生成部134−1により実行される処理である。Vマップ情報を生成した後の段階で、路面画像部分に対応するVマップ要素を抽出する処理、即ち図15に示すVマップ生成部134−2により実行される処理でも同様である。
《路面形状検出》
次に、路面形状検出部135で行う処理について説明する。
路面形状検出部135では、Vマップ生成部134においてVマップ情報が生成されたら、路面に対応する視差値及びy方向位置の組(Vマップ要素)が示す特徴、すなわち、撮像画像の上方に向かうほど視差値が低くなるという特徴を示すVマップ上の高頻度の点を直線近似する処理を行う。なお、路面が平坦な場合には一本の直線で十分な精度で近似可能であるが、車両進行方向において路面の傾斜状況が変化するような路面については、一本の直線で十分な精度の近似は難しい。したがって、本実施形態においては、Vマップの情報(Vマップ情報)を視差値に応じて2以上の視差値区画に区分けし、各視差値区画についてそれぞれ個別に直線近似を行う。
図19は、路面形状検出部135内の処理ブロック図である。
本実施形態の路面形状検出部135は、Vマップ生成部134から出力されるVマップ情報(Vマップ情報)を受け取ると、まず、路面候補点検出部135aにおいて、路面に対応するVマップ要素が示す特徴、即ち、撮像画像の上方に向かうほど視差値が低くなるという特徴を示すVマップ上の高頻度の点を、路面候補点として検出する。
このとき、本実施形態では、路面候補点検出部135aでの路面候補点検出処理は、Vマップの情報(Vマップ情報)を視差値に応じて2以上の視差値区画に区分けし、各視差値区画にそれぞれ対応した決定アルゴリズムに従って各視差値区画における路面候補点を決定する。具体的には、例えば、所定の基準距離に対応する視差値を境に、VマップをX軸方向(横軸方向)に2つの領域、すなわち視差値の大きい領域と小さい領域に区分けし、その領域ごとに異なる路面候補点検出アルゴリズムを用いて路面候補点を検出する。なお、視差値の大きい近距離領域については、後述する第1路面候補点検出処理を行い、視差の小さい遠距離領域については、後述する第2路面候補点検出処理を行う。
ここで、前記のように視差の大きい近距離領域と視差の小さい遠距離領域とで、路面候補点検出処理の方法を変える理由について説明する。
図10Aに示したように、自車両100の前方を撮像した撮像画像で、近距離の路面部分についてはその路面画像領域の占有面積が大きく、路面に対応する画素数が多いので、Vマップ上の頻度が大きい。これに対し、遠距離の路面部分については、その路面画像領域の撮像画像内における占有面積が小さく、路面に対応する画素数が少ないので、Vマップ上の頻度が小さい。すなわち、Vマップにおいて、路面に対応する点の頻度値は、遠距離では小さく、近距離では大きい。そのため、例えば同じ頻度閾値を用いるなど、両領域について同じ基準で路面候補点を検出しようとすると、近距離領域については路面候補点を適切に検出できるが、遠距離領域については路面候補点が適切に検出できないおそれがあり、遠距離領域の路面検出精度が劣化する。逆に、遠距離領域の路面候補点を十分に検出できるような基準で近距離領域の検出を行うと、近距離領域のノイズ成分が多く検出され、近距離領域の路面検出精度が劣化する。そこで、本実施形態では、Vマップを近距離領域と遠距離領域とに区分し、各領域についてそれぞれ適した基準や検出方法を用いて路面候補点を検出することにより、両領域の路面検出精度を高く維持している。
図20は、第1路面候補点検出処理及び第2路面候補点検出処理の検出方法を説明するための図である。
第1路面候補点検出処理では、各視差値dについて、所定の検索範囲内でy方向位置を変えながら、Vマップ情報に含まれる各Vマップ要素(d,y,f)の頻度値fが第1頻度閾値よりも大きく、かつ、最も頻度値fが大きいVマップ要素を探索し、そのVマップ要素を当該視差値dについての路面候補点として決定する。このときの第1頻度閾値は、低めに設定し、路面に対応するVマップ要素が抜け落ちないようにするのが好ましい。本実施形態においては、上述したとおり、Vマップ生成部134において路面に対応するVマップ要素を抽出していることから、第1頻度閾値を低めに設定しても、路面分に対応しないVマップ要素が路面候補点として決定される事態は軽減されるからである。
ここで、各視差値dについてy値を変化させる検索範囲は、上述したVマップ生成部134における抽出範囲、すなわち、基準直線の画像上下方向位置ypを中心にとした画像上下方向へ±δの範囲である。具体的には、「yp−δn」から「yp+δn」の範囲を探索範囲とする。これにより、探索すべきy値の範囲が限定され、高速な路面候補点検出処理を実現できる。
一方、第2路面候補点検出処理は、第1頻度閾値の変わりにこれとは別の第2頻度閾値を用いる点を除いて、前記第1路面候補点検出処理と同じである。すなわち、第2路面候補点検出処理では、各視差値dについて、所定の検索範囲内でy方向位置を変えながら、Vマップ情報に含まれる各Vマップ要素(d,y,f)の頻度値fが第2頻度閾値よりも大きく、かつ、最も頻度値fが大きいVマップ要素を探索し、そのVマップ要素を当該視差値dについての路面候補点として決定する。
図21は、路面候補点検出部135aで行う路面候補点検出処理の流れを示すフローチャートである。
入力されるVマップの情報について、例えば視差値dの大きい順に路面候補点の検出を行い、各視差値dについての路面候補点(y,d)を検出する。視差値dが所定の基準距離に対応する基準視差値よりも大きい場合(ステップS81:YES)、上述した第1路面候補点検出処理を行う。すなわち、当該視差値dに応じたyの探索範囲(「yp−δn」〜「yp+δn」)を設定し(ステップS82)、この探索範囲内における頻度値fが第1頻度閾値よりも大きいVマップ要素(d,y,f)を抽出する(ステップS83)。そして、抽出したVマップ要素のうち、最大の頻度値fを持つVマップ要素(d,y,f)を、当該視差値dの路面候補点として検出する(ステップS84)。
そして、視差値dが基準視差値以下になるまで第1路面候補点検出処理を繰り返し行い(ステップS85)、視差値dが基準視差値以下になったら(ステップS81:NO)、今度は、上述した第2路面候補点検出処理で路面候補点検出を行う。すなわち、第2路面候補点検出処理でも当該視差値dに応じたyの探索範囲(「yp−δn」〜「yp+δn」)を設定し(ステップS86)、この探索範囲内における頻度値fが第1頻度閾値よりも大きいVマップ要素(d,y,f)を抽出する(ステップS87)。そして、抽出したVマップ要素のうち、最大の頻度値fを持つVマップ要素(d,y,f)を、当該視差値dの路面候補点として検出する(ステップS88)。この第2路面候補点検出処理を、視差値dがなくなるまで繰り返し行う(ステップS89)。
このようにして路面候補点検出部135aにより各視差値dについての路面候補点(抽出処理対象)を検出したら、次に、区分直線近似部135bにより、これらの路面候補点についてVマップ上の近似直線を求める直線近似処理を行う。このとき、路面が平坦な場合であれば、Vマップの視差値範囲全域にわたって一本の直線で十分な精度の近似が可能であるが、車両進行方向において路面の傾斜状況が変化している場合には、一本の直線で十分な精度の近似が難しい。したがって、本実施形態においては、Vマップの情報(Vマップ情報)を視差値に応じて2以上の視差値区画に区分けし、各視差値区画についてそれぞれ個別に直線近似処理を行う。
直線近似処理は、最小二乗近似を利用することができるが、より正確に行うにはRMA(Reduced Major Axis)などの他の近似を用いるのがよい。その理由は、最小二乗近似は、X軸のデータに誤差がなく、Y軸のデータに誤差が存在するという前提があるときに、正確に計算されるものである。しかしながら、Vマップ情報から検出される路面候補点の性質を考えると、Vマップ情報に含まれる各Vマップ要素のデータは、Y軸のデータyについては画像上の正確な位置を示していると言えるが、X軸のデータである視差値dについては、誤差を含んでいるものである。また、路面候補点検出処理では、Y軸方向に沿って路面候補点の探索を行い、その最大のy値をもつVマップ要素を路面候補点として検出するものであるため、路面候補点はY軸方向の誤差も含んでいる。従って、路面候補点となっているVマップ要素は、X軸方向にもY軸方向にも誤差を含んでいることになり、最小二乗近似の前提が崩れている。したがって、二変数(dとy)に互換性のある回帰直線(RMA)が有効である。
図22は、Vマップを3つの区間(視差値区画)に区分けした例を示す説明図である。
本実施形態においては、Vマップ情報を視差値に応じて3つの視差値区画に区分けする。具体的には、視差値が大きい順に、第1区間、第2区間、第3区間に区分けする。このとき、距離を基準にして区間を等しく区分けする場合、Vマップ上では遠距離の区間ほど区間(視差値範囲)が狭くなり、直線近似の精度が悪化する。また、視差値を基準にして区間を等しく区分けする場合、今度は、Vマップ上において近距離の区間の幅が狭くなる。この場合、第1区間が非常に狭いものとなって、その第1区間はほとんど意味を成さなくなる。
そこで、本実施形態においては、第1区間については予め決められた固定距離に対応する幅をもつように設定とし、第2区間及び第3区間については、一つ前の区間の幅に対応する距離の定数倍(たとえば2倍)の距離に対応する幅をもつように設定するという区分けルールを採用している。このような区分けルールにより、どの区間についても、適度な幅(視差値範囲)を持たせることができる。すなわち、このような区分けルールによって各区間にそれぞれ対応する距離範囲が異なることになるが、各区間の直線近似処理に使用する路面候補点の数が各区間で均一化でき、どの区間でも適切な直線近似処理を行うことができるようになる。
なお、図22に示した例では、第1区間及び第2区間が重複(オーバーラップ)することなく連続し、第2区間及び第3区間も重複することなく連続するように各区間を区分けしているが、各区間が重複するように区分けしてもよい。例えば、図23に示すように、第2区間の始点S2Lを第1区間の3:1内分点とし(第2区間の終点E2は図22の例と同じ。)、第3区間の始点S3Lを第1区間の終点E1と第2区間の終点E2との間の3:1内分点としてもよい(第3区間の終点E3は図22の例と同じ。)。
区間に応じて距離範囲を変更したり、区間をオーバーラップさせたりすることで、各区間の直線近似処理に使用する候補点数を均一化して、各区間の直線近似処理の精度を高めることができる。また、区間をオーバーラップさせることにより、各区間の直線近似処理の相関を高めることもできる。
また、上述した区分けルールに従って視差値が大きい順に区間を設定していくと、図24Aに示すように、例えば、最終の第4区間が本来の区間幅(視差値範囲)より狭い幅しか設定できない場合がある。このような場合には、図24Bに示すように、最終の第4区間をひとつ前の第3区間と結合して、ひとつの区間(第3区間)として設定してもよい。
図25は、区分直線近似部135bで行う区分直線近似処理の流れを示すフローチャートであり、図26は、当初の区間を示す説明図(図26A)、及び当初の第1区間を延長した後の区間を示す説明図(図26B)である。また、図27は、当初の区間を示す説明図(図27A)、及び当初の第2区間を延長した後の区間を示す説明図(図27B)である。また、図28は、得られた各区間の近似直線が区間境界で連続にならない状態を示す説明図(図28A)、及び各区間の近似直線が区間境界において連続になる修正した例を示す説明図(図28B)である。
区分直線近似部135bは、路面候補点検出部135aから出力される各視差値dの路面候補点のデータを受け取ったら、まず、最近距離の第1区間(最も視差値が大きい区間)を設定する(ステップS91)。そして、この第1区間内の各視差値dに対応した路面候補点を抽出する(ステップS92)。このとき、抽出された路面候補点の数が所定の値以下である場合(ステップS93:NO)、当該第1区間を所定の視差値分だけ延長する(ステップS94)。具体的には、図26Aに示す当初の第1区間と第2区間とを結合して、図26Bに示すように、新たにひとつの第1区間(延長された第1区間)とする。このとき、当初の第3区間は新たな第2区間となる。そして、延長された第1区間内の各視差値dに対応した路面候補点を再び抽出し(ステップS92)、抽出された路面候補点の数が所定の値よりも多くなった場合には(ステップS93:YES)、抽出した路面候補点について直線近似処理を行う(ステップS95)。
なお、第1区間ではない区間、例えば第2区間を延長する場合には、図27Aに示す当初の第2区間と第3区間とを結合して、図27Bに示すように、新たに一つの第2区間(延長された第2区間)とする。
このようにして直線近似処理を行ったら(ステップS96:NO)、次に、その直線近似処理により得られる近似直線の信頼性判定を行う。この信頼性判定では、最初に、得られた近似直線の傾きと切片が所定の範囲内にあるかどうかを判定する(ステップS97)。この判定で所定の範囲内ではない場合には(ステップS97:NO)、当該第1区間を所定の視差値分だけ延長し(ステップS94)、延長された第1区間について再び直線近似処理を行う(ステップS92〜95)。そして、所定の範囲内ではあると判定されたら(ステップS97:YES)、その直線近似処理を行った区間が第1区間か否かを判断する(ステップS98)。
このとき、第1区間であると判断された場合には(ステップS98:YES)、その近似直線の相関値が所定の値よりも大きいかどうかを判定する(ステップS99)。この判定において、近似直線の相関値が所定の値よりも大きければ、その近似直線を当該第1区間の近似直線として決定する。近似直線の相関値が所定の値以下であれば、当該第1区間を所定の視差値分だけ延長し(ステップS94)、延長された第1区間について再び直線近似処理を行い(ステップS92〜95)、再び信頼性判定を行う(ステップS97〜S99)。なお、第1区間でない区間については(ステップS98:NO)、近似直線の相関値に関する判定処理(ステップS99)は実施しない。
その後、残りの区間があるか否かを確認し(ステップS100)、もし残りの区間が無ければ(ステップS100:NO)、区分直線近似部135bは区分直線近似処理を終了する。一方、残りの区間がある場合には(ステップS100:YES)、前区間の幅に対応する距離を定数倍した距離に対応する幅をもった次の区間(第2区間)を設定する(ステップS101)。そして、この設定後に残っている区間が更に次に設定される区間(第3区間)よりも小さいか否かを判断する(ステップS102)。この判断において小さくないと判断されたなら(ステップS102:NO)、当該第2区間内の各視差値dに対応した路面候補点を抽出して直線近似処理を行うとともに(ステップS92〜S95)、信頼性判定処理を行う(ステップS97〜S99)。
このようにして順次区間を設定し、その区間の直線近似処理及び信頼性判定処理を行うという処理を繰り返していくと、いずれ、前記ステップS102において、設定後に残っている区間が更に次に設定される区間よりも小さいと判断される(ステップS102:YES)。この場合、設定された区間を延長して当該残っている区間を含めるようにし、これを最後の区間として設定する(ステップS103)。この場合、この最後の区間内の各視差値dに対応した路面候補点を抽出し(ステップS92)、抽出した路面候補点について直線近似処理を行ったら(ステップS15)、ステップS96において最後の区間であると判断されるので(ステップS96:YES)、区分直線近似部135bは区分直線近似処理を終了する。
このようにして区分直線近似部135bが各区間の直線近似処理を実行して得た各区間の近似直線は、図28Aに示すように、通常、区間境界で連続したものにはならない。そのため、本実施形態では、各区間の近似直線が区間境界において連続になるように、区分直線近似部135bから出力される近似直線を図28Bに示すように修正する。具体的には、例えば、区間の境界上における両区間の近似直線の端点間の中点を通るように両近似直線を修正する。
《路面高さテーブル算出》
以上のようにして、路面形状検出部135においてVマップ上の近似直線の情報が得られたら、次に、路面高さテーブル算出部136において、路面高さ(自車両の真下の路面部分に対する相対的な高さ)を算出してテーブル化する路面高さテーブル算出処理を行う。路面形状検出部135により生成されたVマップ上の近似直線の情報から、撮像画像上の各行領域(画像上下方向の各位置)に映し出されている各路面部分までの距離を算出できる。一方、自車両の真下に位置する路面部分をその面に平行となるように自車両進行方向前方へ延長した仮想平面の自車両進行方向における各面部分が、撮像画像中のどの各行領域に映し出されるかは予め決まっており、この仮想平面(基準路面)はVマップ上で直線(基準直線)により表される。路面形状検出部135から出力される近似直線を基準直線と比較することで、自車両前方の各路面部分の高さを得ることができる。簡易的には、路面形状検出部135から出力される近似直線上のY軸位置から、これに対応する視差値から求められる距離だけ自車両前方に存在する路面部分の高さを算出できる。路面高さテーブル算出部136では、近似直線から得られる各路面部分の高さを、必要な視差範囲についてテーブル化する。
なお、ある視差値dにおいてY軸位置がy’である地点に対応する撮像画像部分に映し出されている物体の路面からの高さは、当該視差値dにおける近似直線上のY軸位置をy0としたとき、(y’−y0)から算出することができる。一般に、Vマップ上における座標(d,y’)に対応する物体についての路面からの高さHは、下記の式〔2〕より算出することができる。ただし、下記の式〔2〕において、「z」は、視差値dから計算される距離(z=BF/(d−offset))であり、「f」はカメラの焦点距離を(y’−y0)の単位と同じ単位に変換した値である。ここで、「BF」は、ステレオカメラの基線長と焦点距離を乗じた値であり、「offset」は無限遠の物体を撮影したときの視差値である。
H=z×(y’−y0)/f …式〔2〕
《Uマップ生成》
次に、Uマップ生成部137について説明する。
Uマップ生成部137では、Uマップを生成するUマップ生成処理として、頻度Uマップ生成処理及び高さUマップ生成処理を実行する。
頻度Uマップ生成処理では、視差画像データに含まれる各視差画素データにおけるx方向位置とy方向位置と視差値dとの組(x,y,d)を、X軸にx、Y軸にd、Z軸に頻度を設定して、X−Yの2次元ヒストグラム情報を作成する。これを頻度Uマップと呼ぶ。本実施形態のUマップ生成部137では、路面高さテーブル算出部134によってテーブル化された各路面部分の高さに基づいて、路面からの高さHが所定の高さ範囲(たとえば20cmから3m)にある視差画像の点(x,y,d)についてだけ頻度Uマップを作成する。この場合、路面から当該所定の高さ範囲に存在する物体を適切に抽出することができる。なお、例えば、撮像画像の下側5/6の画像領域に対応する視差画像の点(x,y,d)についてだけUマップを作成するようにしてもよい。この場合、撮像画像の上側1/6は、ほとんどの場合、空が映し出されていて認識対象とする必要のある物体が映し出されていないためである。
また、高さUマップ生成処理では、視差画像データに含まれる各視差画素データにおけるx方向位置とy方向位置と視差値dとの組(x,y,d)を、X軸にx、Y軸にd、Z軸に路面からの高さを設定して、X−Yの2次元ヒストグラム情報を作成する。これを高さUマップと呼ぶ。このときの高さの値は路面からの高さが最高のものである。
図29は、撮像部110aで撮像される基準画像の一例を模式的に表した画像例であり、図30は、図29の画像例に対応するUマップである。ここで、図30Aは頻度Uマップであり、図30Bは高Uマップである。
図29に示す画像例では、路面の左右両側にガードレール413,414が存在し、他車両としては、先行車両411と対向車両412がそれぞれ1台ずつ存在する。このとき、頻度Uマップにおいては、図30Aに示すように、左右のガードレール413,414に対応する高頻度の点は、左右両端側から中央に向かって上方へ延びるような略直線状603,604に分布する。一方、先行車両411と対向車両412に対応する高頻度の点は、左右のガードレールの間で、略X軸方向に平行に延びる線分の状態601,602で分布する。なお、先行車両411の背面部分又は対向車両412の前面部分以外に、これらの車両の側面部分が映し出されているような状況にあっては、同じ他車両を映し出している画像領域内において視差が生じる。このような場合、図30Aに示すように、他車両に対応する高頻度の点は、略X軸方向に平行に延びる線分と略X軸方向に対して傾斜した線分とが連結した状態の分布を示す。
また、高さUマップにおいては、左右のガードレール413,414、先行車両411、及び対向車両412における路面からの高さが最高の点が頻度Uマップと同様に分布する。ここで、先行車両に対応する点の分布701及び対向車両に対応する点の分布702の高さはガードレールに対応する点の分布703,704よりも高くなる。これにより、高さUマップにおける物体の高さ情報を物体検出に利用することができる。
《リアルUマップ生成》
以上のようにUマップを生成したら、次にリアルUマップ生成部138がリアルUマップを生成する。リアルUマップは、Uマップにおける横軸を画像の画素単位から実際の距離に変換し、縦軸の視差値を距離に応じた間引き率を有する間引き視差に変換したものである。
図31は、図30Aに示す頻度Uマップに対応するリアルUマップ(以下、リアル頻度Uマップ)を示す図である。図示のように、左右のガードレールは垂直の線状のパターン803,804で表され、先行車両、対向車両も実際の形に近いパターン801、802で表される。
縦軸の間引き視差は、遠距離(ここでは50m以上)については間引きなし、中距離(20m以上、50m未満)については1/2に間引き、近距離(10m以上、20m未満)については1/3に間引き、近距離(10m以上、20m未満)については1/8に間引いたものである。
つまり、遠方ほど、間引く量を少なくしている。その理由は、遠方では物体が小さく写るため、視差データが少なく、距離分解能も小さいので間引きを少なくし、逆に近距離では、物体が大きく写るため、視差データが多く、距離分解能も大きいので間引きを多くする。
横軸を画像の画素単位から実際の距離へ変換する方法、Uマップの(x,d)からリアルUマップの(X,d)を求める方法の一例について図32を用いて説明する。
カメラから見て左右10mずつ、即ち20mの幅をオブジェクト検出範囲として設定する。リアルUマップの横方向1画素の幅を10cmとすると、リアルUマップの横方向サイズは200画素となる。
カメラの焦点距離をf、カメラ中心からのセンサの横方向の位置をp、カメラから被写体までの距離をZ、カメラ中心から被写体までの横方向の位置をXとする。センサの画素サイズをsとすると、xとpの関係は「x=p/s」で表される。また、ステレオカメラの特性から、「Z=Bf/d」の関係がある。
また、図より、「x=p*Z/f」の関係があるから、「X=sxB/d」で表すことができる。Xは実距離であるが、リアルUマップ上での横方向1画素の幅が10cmあるので、容易にXのリアルUマップ上での位置を計算することができる。
図30Bに示す高さUマップに対応するリアルUマップ(以下、リアル高さUマップ)も同様の手順で作成することができる。
リアルUマップには、縦横の高さをUマップより小さくできるので処理が高速になるというメリットがある。また、横方向が距離に非依存になるため、遠方、近傍いずれでも同じ物体は同じ幅で検出することが可能になり、後段の周辺領域除去や、横分離、縦分離への処理分岐の判定(幅の閾値処理)が簡単になるというメリットもある。
Uマップの高さは,最短距離を何メートルにするかで決定される。つまり、「d=Bf/Z」であるから、dの最大値は決定される。視差値dはステレオ画像を扱うため、通常画素単位で計算されるが、少数を含むため、視差値に例えば32を乗じて小数部分を四捨五入して整数化した視差値を使用する。
例えば、4mを最短距離にして、画素単位の視差値が30であるステレオカメラの場合、Uマップの高さの最大値は30×32で960となる。また、2mを最短距離にして、画素単位の視差値が60であるステレオカメラの場合、60×32で1920となる。
Zが1/2になると、dは2倍になるので,それだけUマップの高さ方向のデータは巨大となる。そこで、リアルUマップを作成するときには、近距離ほど間引いてその高さを圧縮する。
上記のカメラの場合、50mでは視差値が2.4画素、20mで視差値が6画素、8mで視差値が15画素、2mで60画素となる。従って、50m以上では視差値は間引きなし、20m以上50m未満では1/2間引き、8m以上20m未満では1/3間引き、8m未満では1/15間引きというように近距離になるほど大きな間引きをする。
この場合、無限遠から50mまでは、高さが2.4×32=77、50mから20mまでは高さが(6−2.4)×32/2=58、20mから8mまでは高さが(15−6)×32/3=96、8m未満では高さが(60−15)×32/15=96となる。この結果、リアルUマップの総高さは77+58+96+96=327となり,Uマップの高さよりかなり小さくなるから、ラベリングによるオブジェクト検出を高速に行うことができる。
《孤立領域検出》
次に、孤立領域検出部139について説明する。
図33は、孤立領域検出部139で行う孤立領域検出処理の流れを示すフローチャートである。
孤立領域検出部139では、まずリアルUマップ生成部138で生成された頻度リアルUマップの情報の平滑化を行う(ステップS111)。
これは、頻度値を平均化することで、有効な孤立領域を検出しやすくするためである。即ち、視差値には計算誤差等もあって分散があり、かつ、視差値がすべての画素について計算されているわけではないので、リアルUマップは図31に示した模式図とは異なり、ノイズを含んでいる。そこで、ノイズを除去するためと、検出したいオブジェクトを分離しやすくするため、リアルUマップを平滑化する。これは画像の平滑化と同様に、平滑化フィルタ(例えば3×3画素の単純平均)をリアルUマップの頻度値(頻度リアルUマップ)に対して適用することで、ノイズと考えられるような頻度は減少し、オブジェクトの部分では頻度が周囲より高い、まとまったグループとなり,後段の孤立領域検出処理を容易にする効果がある。
次に、二値化の閾値を設定する(ステップS112)。最初は小さい値(=0)を用いて、平滑化されたリアルUマップの二値化を行う(ステップS113)。その後、値のある座標のラベリングを行って、孤立領域を検出する(ステップS114)。
この二つのステップでは、リアル頻度Uマップで頻度が周囲より高い孤立領域(島と呼ぶことにする)を検出する。検出には、リアル頻度Uマップをまず二値化する(ステップS113)。最初は閾値0で二値化を行う。これは、オブジェクトの高さや、その形状、路面視差との分離などがあるため、島は孤立しているものもあれば他の島と連結しているものもあることの対策である。即ち、小さい閾値からリアル頻度Uマップを二値化することで最初は孤立した適切な大きさの島を検出し、その後、閾値を増加させていくことで連結している島を分離し、孤立した適切な大きさの島として検出することを可能にしたものである。
二値化後の島を検出する方法はラベリングを用いる(ステップS114)。二値化後の黒である座標(頻度値が二値化閾値より高い座標)をその連結性に基づいてラベリングして、同一ラベルが付いた領域を島とする。
図34は、ラベリングの方法について説明するための図である。図34Aに示すように、○の位置が黒であってラベル付け対象座標(注目画素)であるとき、1,2,3,4の位置の座標にラベル付けされた座標があれば、その画素のラベルと同一ラベルを割り当てる。もし、図34Bに示すように複数のラベル(ここでは8と9)が存在すれば、図34Cに示すように、最も小さい値のラベル(ここでは8)を割り当て、その他のラベル(ここでは9)が付いた座標のラベルをそのラベルで置き換える。その島の幅は実のオブジェクトに近い幅Wとみなすことができる。この幅Wが所定の範囲内にあるものをオブジェクト候補領域とみなす。
図33の説明に戻る。検出された複数の孤立領域についてそれぞれ大きさの判定を行う(ステップS115)。これは、検出対象が歩行者から大型自動車であるため、孤立領域の幅がそのサイズの範囲であるか否かを判定するのである。もし、その大きさが大きければ(ステップS115:YES)、二値化閾値を1だけインクリメントして(ステップS112)、リアル頻度Uマップの当該孤立領域内だけ二値化を行う(ステップS113)。そしてラベリングを行い、より小さな孤立領域を検出して(ステップS114)、その大きさを判定する(ステップS115)。
上記の閾値設定からラベリングの処理を繰り返し行い、所望の大きさの孤立領域を検出するのである。所望の大きさの孤立領域が検出できたなら(ステップS115:NO)、次に周辺領域除去を行う(ステップS116)。これは、遠方にある物体で、路面検出の精度が悪く、路面の視差がリアルUマップ内に導入され、物体と路面の視差が一塊になって検出された場合のその左右、近傍の高さが路面に近い部分の領域(孤立領域内の周辺部分)を削除する処理である。除去領域が存在する場合は(ステップS117:YES)、もう一度ラベリングを行って孤立領域の再設定を行う(ステップS114)。
除去領域がなくなったら(ステップS117:NO)、周辺領域除去を行った孤立領域の大きさ(幅と高さ、距離)を判定し(ステップS118)、その結果に応じて、横方向分離(ステップS119)又は縦方向分離(ステップS120)又は何もしないでオブジェクト候補として登録する。横方向分離又は縦方向分離を行った場合は(ステップS121:YES、ステップS122:YES)、もう一度ラベリングを行って孤立領域の再設定を行う(ステップS114)。
物体同士が横に並んで近接している(自動車とバイク、自動車と歩行者、自動車同士など)場合、リアル頻度Uマップの平滑化が原因で一つの孤立領域として検出されることがある。或いは視差画像の視差補間の悪影響で異なる物体同士の視差がつながってしまうことがある。横方向分離はこのようなケースを検出して分離する処理である(詳細については後述)。
また、複数の先行車両が隣の車線を走行しているときに、それらが遠方にいる場合、ステレオ画像から得られる視差の分散が大きい場合、リアル頻度Uマップ上では物体それぞれの視差値が上下に伸び、連結してしまうことがある。このため、これを一つの孤立領域として検出してしまう場合がある。縦方向分離はこのようなケースを検出して、手前を走る先行車両とその向こうを走る先行車両とに分離する処理である(詳細については後述)。
以下、周辺領域除去、横方向分離、縦方向分離について詳細に説明する。
《周辺領域除去》
図35は、周辺領域除去について説明するためのリアルUマップであり、図36は、周辺領域除去処理の流れを示すフローチャートである。ここで、図35Aは、平滑化後のリアル頻度Uマップであり、図35Bは、リアル高さUマップであり、図35Cは、周辺領域が除去されたリアル高さUマップである。これらのマップは実データを模式的に示したものである(後記の図37、図39も同様)。また、このリアル頻度Uマップは、図31における車両(先行車両や対向車両)に対応する点の分布の付近を取り出したものである。また、リアル高さUマップは、不図示のリアル高さUマップにおける車両に対応する点の分布の付近を取り出したものである。
図35A、図35Bは、いずれも、遠方の路面(白線等)が実際の高さよりも低く検出され、路面と車両とが一緒に検出された塊の例を示している。図35Aと図35Bとを比較すると、図35Bにおける高さの高い領域、高さの低い領域と、図35Aにおける頻度の高い領域、頻度の高い領域とが合致していない。このようなケースでは、頻度情報ではなく、高さ情報を利用することで、オブジェクトと路面との境界を検出して周辺領域を除去する。高さ情報の方が物体の形をより正確に表しているからである。
周辺領域の除去処理は、図36に示すように、近傍領域除去処理(ステップS131)、左側領域除去処理(ステップS132)、右側領域除去処理(ステップS133)からなる。
近傍領域除去処理(ステップS131)における近傍領域除去の判定方法は、高さの閾値を下記のように設定し,下記(i)又は(ii)又は(iii)が孤立領域の最下端(ボトムライン)から成り立ち続ける場合に該当ラインの頻度を変更して除去する。
高さの閾値の設定:高さ閾値を塊内の最大高さに応じて設定する。即ち、例えば、最大高さが120cm以上であれば閾値を60cm、最大高さが120cm未満であれば閾値を40cmとする。
(i)ライン内に高さを持つ点が所定の点数(たとえば5)以下で閾値以上の高さを持つ点がない。
(ii)ライン内に閾値以上の高さを持つ点数が閾値未満の高さを持つ点数より少なく、閾値以上の高さを持つ点数が2未満である.
(iii)閾値以上の高さを持つ点数がライン全体の高さを持つ点数の10%未満である。
左側領域除去処理(ステップS132)及び右側領域除去処理(ステップS133)における左右領域除去の判定方法は、高さの閾値を下記のように設定し、下記(iv)又は(v)又は(vi)が孤立領域の左端又は右端の列から成り立ち続ける場合に該当列の頻度を変更して除去する。
高さの閾値の設定:高さ閾値を塊内の最大高さに応じて設定する。即ち、例えば、最大高さが120cm以上であれば閾値を60cm、最大高さが120cm未満であれば閾値を40cmとする。
(iv)列内に高さを持つ点が所定の点数(たとえば5)以下で閾値以上の高さを持つ点がない。
(v)列内に閾値以上の高さを持つ点数が閾値未満の高さを持つ点数より少なく,閾値以上の高さを持つ点数が2未満である。
(vi)閾値以上の高さを持つ点数が列全体の高さを持つ点数の10%未満である。
以上のようにして近傍、及び左右の高さが低い領域を除去すると、図35Cに示すように、中央の高さの高い領域が残り、近傍及び左右の高さの低い領域が除去される。なお、ここで提示した数値は一例に過ぎず、他の数値でもよいことは言うまでもない。
《横方向分離》
図37は、横方向分離について説明するための図であり、図38は、横方向分離処理の流れを示すフローチャートである。ここで、図37Aは、平滑化後のリアル頻度Uマップを示し、図37Bは、リアル高さUマップを示す。また、図37Cは、分離境界の検出方法を示す。
まず横方向分離の実行条件(ステップS118→ステップS119)について説明する。横方向分離が有効なケースでは、横方向にオブジェクトが連結しているので、例えば自動車1台の幅(約2m)に別の物体が近接している(例えば50cm離れている)ときには、リアルUマップら検出した孤立領域の幅が2.5mを越えていると推定される。そこで、孤立領域の幅が2.5mを越えている場合は、この横方向分離を実行する。
横方向分離処理は、図38に示すように、縦方向評価値算出処理(ステップS141)、最小評価値位置検出処理(ステップS142)、二値化閾値設定処理(ステップS143)、評価値二値化処理(ステップS144)、分離境界検出処理(ステップS145)からなる。
縦方向評価値算出処理(ステップS141)では、周辺領域が除去された孤立領域のリアル頻度Uマップとリアル高さUマップの各点における値の積を列方向に加算して、横方向の評価値を算出する。即ち、図37A、図37Bの各X座標の評価値を「Σ(頻度*高さ)」として算出する。ここで、ΣはY方向の総和をとることを意味する。
最小評価値位置検出処理(ステップS142)では、図37Cに示すように、算出した評価値から最小値とその位置を検出する。また、二値化閾値設定処理(ステップS143)では、図37Cに示すように、各評価値の平均に所定の係数(例えば0.5)を乗じて、評価値の二値化閾値を求める。
評価値二値化処理(ステップS144)では、その二値化閾値で評価値を二値化する。また、分離境界検出処理(ステップS145)では、図37Cに示すように、最小評価値を含み、二値化閾値より小さい評価値を含む領域を分離領域として設定する。そして、その分離領域の両端を分離境界とし、その分離境界の内側の頻度値を変更することで、孤立領域を横方向に分離する。
このような評価値を用いた理由として、下記(vii)、(viii)、(ix)の3点が挙げられる。
(vii)連結している部分の頻度値は、オブジェクトの頻度値よりも比較的小さくなる。
(viii)高さUマップで連結している部分は、オブジェクトの部分とは高さが異なったり、高さを持つデータが少なかったりする。
(ix)視差補間の影響で連結している部分は、高さUマップにおける視差の分散が小さい。
《縦方向分離》
図39は、縦方向分離について説明するための図であり、図40は、縦方向分離処理の流れを示すフローチャートである。また、図41は、縦方向分離における分離境界について説明するための図である。
まず縦方向分離の実行条件(ステップS118→ステップS120)について説明する。縦方向分離が有効なケースでは、リアルUマップ上で縦方向にオブジェクトが並んでいるので、二台以上の縦列状態を一つの孤立領域として検出した場合は二台以上の車が持つ視差の範囲と車間距離を合わせた範囲がその孤立領域の視差範囲となる。そのため、ガードレールや壁以外で視差(距離)が広い範囲を有するものということで、基本的には縦列走行の分離が難しくなるある程度遠方(たとえば20m以遠)で、距離に応じて孤立領域の視差(距離)範囲が大きい孤立領域が縦方向分離の対象となる。一方、ガードレールや建物の壁などは視差範囲が広くても幅が狭いので幅の狭い孤立領域は縦方向分離の対象とはならない。
具体的には孤立領域の最近傍距離をZmin、最遠方距離をZmax、幅をWとすると下記(x)、(xi)以下のいずれかの条件を満たすときに縦方向分離を実行する。
(x)W>1500mmかつZmin>100mのとき、Zmax−Zmin>50m
(xi)W>1500mmかつ100m≧Zmin>20mのとき、Zmax−Zmin>40m
縦方向分離処理は、図40に示すように、実幅算出領域設定処理(ステップS151)、横方向評価値算出処理(ステップS152)、実幅設定処理(ステップS153)、分離境界設定処理(ステップS154)、分離処理(ステップS155)からなる。
図39Aは左隣の車線を走行している2台の先行車が一つの孤立領域として検出された平滑化後のリアル頻度Uマップの例を示している。この場合、下側(手前)の頻度の大きい領域がすぐ前を走る先行車を表し、上側(奥側)の頻度の大きい領域がさらに前を走る先行車を表す。先行車の左右端に視差が集中し、その分散が大きいので、頻度の大きい領域の両側で左カーブを描くように視差が伸びている。この伸びが大きいため、手前の先行車の視差の伸びと奥側の先行車の視差の伸びとが連結して二台の先行車がひとつの孤立領域として検出されてしまっている。
このような場合、検出された孤立領域の幅は実際の先行車の幅より大きい事が常である。そこで、実幅を算出するための領域をまず設定する(実幅算出領域設定処理:ステップS151)。これは、孤立領域のZmaxからZminの大きさに応じて、所定の距離範囲Zrを下記の(xii)〜(xiv)に示すように設定して、その距離範囲に相当する視差範囲の領域内で手前の先行車の実幅を探索する処理である。
(xii)Zmin<50mならば、Zr=20m
(xii1)50m≦Zmin<100mならば、Zr=25m
(xiv)100m≦Zminならば、Zr=30m
図39Aにおいて、上端がZmax、下端がZmin、破線の枠で示された領域が実幅算出領域Zrである。このZrの値はステレオカメラから得られる視差の分散の大きさから設定することができる。
次に、上記実幅算出領域内で横方向評価値を算出する(横方向評価値算出処理:ステップS152)。即ち、図39Bに示すように、実幅算出領域の各ラインで頻度値の積算し、それを各ラインでの評価値とする。そしてその評価値が最大であるラインを実幅検出位置とする。
次いで、この実幅検出位置における、頻度値が連続して存在して最大の長さ(幅)を有する領域を実幅領域と検出する。また、その長さを実幅とする(実幅設定処理:ステップS153)。図39Cの場合は、実幅は5となる。
次に、その実幅の境界の外側を分離境界とし(分離境界設定処理:ステップS154)、その分離境界を基準として孤立領域の各視差における分離境界の位置を順次計算して設定する(分離処理:ステップS155)。
分離境界の計算方法について図41を用いて説明する。
カメラの原点(レンズの中心)をO、カメラの向いている方向をカメラ中心軸(リアルUマップの中心の縦軸)の方向とする。また、実幅領域の分離境界の位置が、距離Z0,横位置X0とする。このとき距離Zにおける分離境界の位置をXとすると下記の式〔3〕が成り立つ。
X=X0*(Z/Z0) …式〔3〕
また、BFをステレオカメラの基線長と焦点距離を掛け合わせたもの、d0をZ0に対応する視差、dをZに対応する視差、offsetを無限遠における視差とすると、「Z=BF/(d−offset)」、「Z0=BF/(d0−offset)」であるので、式〔3〕を下記の式〔4〕のように変形することができる。
X=X0*(d0−offset)/(d−offset) …式〔4〕
視差値dとリアルUマップの間引き視差との対応関係がわかっているので、式〔4〕から孤立領域内の分離境界の位置を全ての間引き視差の値で決定することができる。その結果が図39Dに「頻度値を更新、分離する位置」として示した箇所である。この箇所は、図33のステップS122経由でステップS114に移行したときに、頻度値が0に更新される。
このようにすると、手前にある先行車の領域と奥に見えるオブジェクトの領域とを分離することができる。また、孤立領域の左下に縦に長い領域が分離されるがこれは幅が細いのでノイズとして処理されることになる。
なお、図39に示す例は先行車が左隣の車線を走行している場合であったが、先行車が右隣の車線を走行している場合は、孤立領域のリアル頻度Uマップは、図39の例を左右反転した分布となる。
《視差画像の対応領域検出、及びオブジェクト領域抽出》
次に、視差画像の対応領域検出部140及びオブジェクト領域抽出部141について説明する。図42は、孤立領域検出部で検出された孤立領域が内接する矩形領域を設定したリアル頻度Uマップを示す図であり、図43は、図42における矩形領域に対応する走査範囲を設定した視差画像を示す図であり、図44は、図43における走査範囲を探索してオブジェクト領域を設定した視差画像を示す図である。
孤立領域検出部139によりオブジェクト候補領域として決定された孤立領域について、図42に示すように、当該孤立領域としての第1車両801、第2車両802が内接する矩形領域として第1検出島811及び第2検出島812を設定したとき、この矩形領域の幅(Uマップ上のX軸方向長さ)は、当該孤立領域に対応する識別対象物(オブジェクト)の幅に対応する。また、設定した矩形領域の高さは、当該孤立領域に対応する識別対象物(オブジェクト)の奥行き(自車両進行方向長さ)に対応している。一方で、各孤立領域に対応する識別対象物(オブジェクト)の高さについては、この段階では不明である。視差画像の対応領域検出部140は、オブジェクト候補領域に係る孤立領域に対応したオブジェクトの高さを得るために、当該孤立領域に対応する視差画像上の対応領域を検出する。
視差画像の対応領域検出部140は、孤立領域検出部139から出力される孤立領域の情報に基づき、リアルUマップから検出した第1検出島811及び第2検出島812島の位置、幅と最小視差から、図43に示す視差画像で検出すべき範囲である第1検出島対応領域走査範囲481及び第2検出島対応領域走査範囲482のx方向範囲(xmin,xmax)を決定できる。また、視差画像においてオブジェクトの高さと位置(ymin=”最大視差dmaxの時の路面からの最大高さに相当するy座標”からymax=”最大視差dmaxから得られる路面の高さを示すy”まで)を決定できる。
次に、オブジェクトの正確な位置を検出するため、設定した走査範囲を走査し、孤立領域検出部139で検出した矩形の奥行き(最小視差dmin,最大視差dmax)の範囲の値を視差にもつ画素を候補画素として抽出する。そして、抽出した候補画素群の中で検出幅に対して横方向に所定の割合以上あるラインを候補ラインとする。
次に、縦方向に走査して、ある注目しているオブジェクト候補ラインの周囲に他のオブジェクト候補ラインが所定の密度以上ある場合には,その注目しているオブジェクト候補ラインをオブジェクトラインとして判定する。
次に、オブジェクト領域抽出部141は、視差画像の探索領域でオブジェクトラインを探索して、オブジェクトラインの最下端、最上端を決定し、図44に示すように、オブジェクトライン群の外接矩形461,462を視差画像におけるオブジェクト(第1車両、第2車両)の領域451,452として決定する。
図45は、視差画像の対応領域検出部140及びオブジェクト領域抽出部141で行われる処理の流れを示すフローチャートである。
まずリアルUマップにおける島の位置、幅と最小視差から、視差画像に対するx軸方向の探索範囲を設定する(ステップS161)。
次に島の最大視差dmaxと路面高さの関係から、視差画像に対するy軸方向の最大探索値ymaxを設定する(ステップS162)。次にリアル高さUマップにおける島の最大高さ、及びステップS172で設定したymaxとdmaxとから、視差画像に対するy軸方向の最小探索値yminを求めて設定することで、視差画像に対するy軸方向の探索範囲を設定する(ステップS163)。
次いで設定した探索範囲で視差画像を探索して、島の最小視差dmin,最大視差dmaxの範囲内にある画素を抽出し、オブジェクト候補画素とする(ステップS164)。そのオブジェクト候補画素が横方向に一定以上の割合にあるとき、そのラインをオブジェクト候補ラインとして抽出する(ステップS165)。
オブジェクト候補ラインの密度を計算して、密度が所定の値より大きい場合はそのラインをオブジェクトラインと決定する(ステップS166)。最後にオブジェクトライン群の外接矩形を視差画像内のオブジェクト領域として検出する(ステップS167)。
《オブジェクトタイプ分類》
次に、オブジェクトタイプ分類部142について説明する。
前記オブジェクト領域抽出部141で抽出されるオブジェクト領域の高さ(yomax−yomin)から、下記の式〔5〕より、そのオブジェクト領域に対応する画像領域に映し出されている識別対象物(オブジェクト)の実際の高さHoを計算できる。ただし、「zo」は、当該オブジェクト領域内の最小視差値dから計算される当該オブジェクト領域に対応するオブジェクトと自車両との距離であり、「f」はカメラの焦点距離を(yomax−yomin)の単位と同じ単位に変換した値である。
Ho=zo×(yomax−yomin)/f …式〔5〕
同様に、オブジェクト領域抽出部141で抽出されるオブジェクト領域の幅(xomax−xomin)から、下記の式〔6〕より、そのオブジェクト領域に対応する画像領域に映し出されている識別対象物(オブジェクト)の実際の幅Woを計算できる。
Wo=zo×(xomax−xomin)/f …式〔6〕
また、当該オブジェクト領域に対応する画像領域に映し出されている識別対象物(オブジェクト)の奥行きDoは、当該オブジェクト領域に対応した孤立領域内の最大視差値dmaxと最小視差値dminから、下記の式〔7〕より計算することができる。
Do=BF×{(1/(dmin−offset)−1/(dmax−offset)} …式〔7〕
オブジェクトタイプ分類部142は、このようにして計算できるオブジェクト領域に対応するオブジェクトの高さ、幅、奥行きの情報から、そのオブジェクトタイプの分類を行う。図46に示す表は、オブジェクトタイプの分類を行うためのテーブルデータの一例を示すものである。これによれば、自車両前方に存在する識別対象物(オブジェクト)が、歩行者なのか、自転車なのか、小型車なのか、トラックなどか等を区別して認識することが可能となる。
《3次元位置決定》
次に、3次元位置決定部143について説明する。
検出されたオブジェクト領域に対応するオブジェクトまでの距離や、視差画像の画像中心と視差画像上のオブジェクト領域の中心との画像上の距離も把握されることから、オブジェクトの3次元位置を決定することができる。
視差画像上のオブジェクト領域の中心座標を(region_centerX,region_centerY)とし、視差画像の画像中心座標を(image_centerX,image_centerY)としたとき、識別対象物(オブジェクト)の撮像部110a,110bに対する相対的な横方向位置および高さ方向位置は、下記の式〔8〕及び式〔9〕より計算できる。
Xo=Z×(region_centerX−image_centerX)/f …式〔8〕
Yo=Z×(region_centerY−image_centerY)/f …式〔9〕
《ガードレール検出》
次にガードレール検出部144について説明する。
図47は、ガードレール検出部144で行われるガードレール検出処理の流れを示すフローチャートであり、図48は、ガードレール検出処理の対象範囲について直線近似処理して得られた近似直線を表したUマップを示す図である。また、図49は、直線近似処理して得られた直線からガードレール候補座標を検出するための処理について説明するための図である。
路面の側方などに設置される側壁やガードレールは、一般に、路面から30〜100cmの範囲内に存在するので、ガードレール検出処理の対象範囲として、この範囲に対応するUマップ内の領域を選定する。その後、この対象範囲について、Uマップの頻度に重み付けを行い、Hough(ハフ)変換して(ステップS171)、図48に示すような近似直線L1,L2を検出する(ステップS172)。この近似直線L1,L2において、視差が大きい方の端点は画像の境界とし、視差が小さい方の端点は距離換算で例えば30mの距離に相当する視差値とする。なお、Hough変換により直線が見つからなかった場合は、ガードレールは検出されない。
このような近似直線が得られたら、次に、図49に示すように、近似直線上L1の座標位置を中心とした周囲の領域(たとえば5×5領域611)について、頻度値の総和が所定の閾値を超えている座標位置を、左ガードレールの視差マップ612からガードレール候補座標613として検出する(ステップS173)。このようにして検出されるガードレール候補座標613の間隔が所定の距離以下である場合には、それらのガードレール候補座標613をつないでガードレール線分614として決定する(ステップS174)。
その後、このようにして得られ得るガードレール線分の最小X座標xminと最大X座標xmaxにそれぞれ対応する視差値d1,d2を、検出した近似直線の式から算出する。このとき、上述した路面形状検出部136で算出したyとdの近似直線より、該当する視差d1,d2における路面座標(y1,y2)が決定される。ガードレールは、路面の高さから30cm以上1m以下の範囲としているので、前記式〔2〕を利用し、視差画像上でのガードレールの高さ(30cmと1m)として、yg1_30、yg1_100、yg2_30、yg2_100が決定される。
図50は、図17に示す視差画像上にガードレール検出部144で検出されたガードレール領域を重畳した図である。
視差画像上でのガードレール領域471は、(xgmin,yg1_30)、(xgmin、yg1_100)、(xgmax、yg2_100)、(xgmax_yg2_30)の4点で囲まれる領域(図中に網掛けした領域)となる。なお、ここでは左側のガードレールについて説明したが、右側のガードレールについても同様に検出できる。
《消失点情報》
次に、Vマップ生成部134における処理に用いる消失点情報について説明する。
消失点情報は、路面の消失点に対応する画像上の位置座標を示す情報である。この消失点情報は、撮像画像上に映し出される路面上の白線や車両動作情報などから特定することができる。
図51は、自車両の前輪の舵角から消失点の画像左右方向位置Vxを検出する原理を示す説明図であり、図52は、自車両のヨーレート及び車速から消失点の画像左右方向位置Vxを検出する原理を示す説明図である。また、図53は、自車両の加速時や減速時に消失点の画像上下方向位置Vyが変化することを示す説明図である。
例えば、自車両100の前輪の舵角θが車両動作情報として取得できる場合には、図51に示すように、その舵角θから消失点の画像左右方向位置Vxを検出することが可能である。即ち、カメラレンズから距離Lだけ離れた位置におけるカメラからの水平方向への位置ズレ量は、L×tanθから求めることができる。したがって、画像センサ上の水平方向位置ズレ量をΔxは、カメラの焦点距離をfとし、画像センサの画素サイズをpixelsizeとすると、下記の式〔10〕から求めることができる。この式〔10〕を用いることにより、画像センサのX方向サイズをxsizeとすると、消失点のX座標Vxは、下記の式〔11〕から求めることができる。
Δx=f×tanθ/pixelsize …式〔10〕
Vx=xsize/2+Δx …式〔11〕
また、例えば、自車両100のヨーレート(回転角速度)ωと、車速vが車両動作情報として取得できる場合には、図52に示すように、そのヨーレートωと車速vとを用いて消失点の画像左右方向位置Vxを検出することが可能である。即ち、自車両100が距離Lだけ進んだときに想定される水平位置のズレ量は、自車両100の回転半径r(r=L/θ)と回転角とから、(1−cosθ)となる。従って、画像センサ上の水平方向位置ズレ量Δxは、下記の式〔12〕から求めることができる。この式〔12〕を用いて得られるΔxを用いて、消失点のX座標Vxは、前記の式〔11〕から求めることができる。このときの距離Lは、例えば100mと設定する。
Δx=±(1−cosθ)×f×r/L/pixelsize …式〔12〕
このようにして求まる消失点のX座標Vxが画像外を示すものとなった場合、消失点情報のX座標Vxとして、画像端部を設定する。
一方、消失点のY座標Vyについては、直前の処理によって求めた路面の近似直線の切片から求めることができる。消失点のY座標Vyは、Vマップ上において、上述した処理によって求まる路面の近似直線の切片に対応している。従って、直前の処理によって求めた路面の近似直線の切片をそのまま消失点のY座標Vyとして決定してもよい。
ただし、自車両100が加速している時には、自車両後方部分が加重され、自車両100の姿勢は、自車両前方が鉛直方向上側を向くような姿勢となる。この姿勢変化により、加速時における路面の近似直線は、図53に示すように、等速時における路面の近似直線よりもVマップ上において下側へシフトしたものとなる。逆に、減速時における路面の近似直線は、図53に示すように、等速時における路面の近似直線よりもVマップ上において上側へシフトしたものとなる。したがって、直前の処理によって求めた路面の近似直線の切片を、車速前後方向における加速度情報(車両動作情報)によって補正したものを、消失点のY座標Vyとして決定するのが好ましい。
〔変形例1〕
次に、前記実施形態についての他の変形例(以下「変形例1」という。)について説明する。
前記実施形態においては、自車両進行方向における路面の高さ変化(自車両進行方向における路面の起伏)を把握することはできるが、路面幅方向における路面高さの違い(路面幅方向における路面の傾斜)を把握することはできない。本変形例1では、路面幅方向における路面の傾斜を把握することができる例について説明する。
図54は、本変形例1における主要な処理の流れを示すフローチャートであり、図55は、路面の消失点と視差画像の下端中心とを結ぶ直線を境界にして左右に二分割した視差画像の例を示す説明図である。また、図56は、消失点と視差画像左下点とを結ぶ直線L3と、消失点と視差画像右下点とを結ぶ直線L4とを設定した視差画像の例を示す説明図であり、図57は、図56の視差画像に対して、ひとつの画像走査ラインL5を設定したときの説明図である。また、図58は、2つの直線L3,L4と画像走査ラインとの両交点以外の画像走査ライン上の視差値を線形補間したときの説明図である。
まず、前記実施形態と同様、図55に示すように、路面の消失点(Vx,Vy)が示す消失点の画像上下方向位置Vyから所定のoffset値を引いた画像上下方向位置(Vy−offset値)の地点Wと、図55中に示したABCDの各点で囲まれた領域を設定する。そして、図55に示すように、視差画像上において、路面の消失点(Vx,Vy)と視差画像の下端中心M(xsize/2,ysize)とを結ぶ直線を分離境界にして、WABCDの各点で囲まれた領域を、WABMの各点で囲まれた左領域と、WMCDの各点で囲まれた右領域とに左右二分割して、各領域をそれぞれ路面画像候補領域として設定する。その後、各路面画像候補領域に対し、それぞれ個別に上述した実施形態の方法でVマップを作成する(ステップS181)。このようにして視差画像上の路面画像候補領域を複数の領域に分割して各領域について個別に作成した部分的なVマップを組み合わせたものを、多重Vマップという。
その後、それぞれの領域のVマップから、領域ごとに、上述した実施形態の方法で路面に対応する区分近似直線を得る。また、図56に示すように、消失点V(Vx,Vy)と同じy座標を持つ地点P(xsize/3,Vy)と地点B(0,ysize)とを結ぶ直線L3を作成する。また、消失点V(Vx,Vy)と同じy座標を持つ他の地点Q(xsize×2/3,Vy)と地点C(xsize,ysize)とを結ぶ直線L4を作成する。そして、それぞれの直線上における点(x,y)に対し、左右の領域についてそれぞれ得た区分近似直線上の点(y,d)を関連付け、(x,y,d)の関係を作成する(ステップS182)。これにより、図56に示す左右の直線L3,L4上における路面の高さを決定することができる(ステップS183)。
なお、地点P,QのX座標を消失点VのX座標と同じ位置にすると、地点Pと地点Qとの間の路面高さが異なるときに、その地点で路面高さの急激な変化が生じ、不具合が起こす。逆に、地点P,QとのX方向距離が離れすぎると、路面の実情(画像内では路面が遠くに行くほど狭くなる)と整合しない。本変形例1においては、これらを考慮して、地点P,QのX座標は、それぞれ、xsize/3、ysize×2/3としている。
次に、図56に示した左右の直線L3,L4以外の路面の高さを決定する。まず、図57に示すように、ひとつの画像走査ライン(視差画像X軸方向ライン)L5を設定する。この画像走査ラインL5と左の直線L3との交点を(xL,y,dL)とし、この画像走査ラインL5と右の直線L4との交点を(xR,y,dR)とする。画像走査ラインL5上における両交点の間の視差値は、図58に示すように線形補間するとともに、画像走査ラインL5上における両交点の左右外側の視差値は、それぞれの交点における視差値dR,dLと同じ視差値を割り当てる。これにより、路面幅方向に路面が傾斜している場合についても、その傾斜を反映させた路面形状を検出することができる(ステップS172,S173)。なお、画像走査ラインL5の開始端は地点Bと地点Cとを通るラインであり、終端は地点Pと地点Qとを通るラインである。
〔変形例2〕
次に、前記実施形態についての他の変形例(以下「変形例2」という。)について説明する。
実際の路面の中には、路面の排水を良くするために路面の幅方向中央部分が高くなっているかまぼこ型の形状を示す路面がある。このような路面については、前記変形例1の場合には、路面幅方向における路面傾斜を適切に検出することができない。本変形例2においては、前記変形例1よりもより高精度に路面幅方向における路面傾斜を把握することができるものである。
図59は、変形例2において、路面の消失点と視差画像の左1/4の下端地点とを結ぶ直線L6と、路面の消失点と視差画像の右1/4の下端地点とを結ぶ直線L7とを境界にして左右に三分割した視差画像の例を示す説明図である。また、図60は、図59の視差画像に対し、ひとつの画像走査ラインL5を設定したときの説明図であり、図61は、3つの直線L3,L4,L8と画像走査ラインとの両交点以外の画像走査ライン上の視差値を線形補間したときの説明図である。
具体的に説明すると、図59に示すように、視差画像上において、視差画像の下端を4等分したときの画像左側1/4の地点L(xsize/4,ysize)と地点Wとを結ぶ直線L6を設定するとともに、画像右側1/4の地点R(3/4×xsize,ysize)と地点Wとを結ぶ直線L7を設定する。本変形例2では、これらの直線L6,L7を境界にして、WABCDの各点で囲まれた領域を、WABLの各点で囲まれた左領域と、WLRの各点で囲まれた中央領域と、WRCDの各点で囲まれた右領域とに、三分割して、各領域をそれぞれ路面画像候補領域として設定する。その後、各路面画像候補領域に対し、それぞれ個別に上述した実施形態の方法でVマップを作成する。その後、それぞれの領域のVマップから、領域ごとに、上述した実施形態の方法で路面に対応する区分近似直線を得る。
また、図60に示すように、本変形例2においては、前記変形例1の場合と同様に、地点P(xsize/3,Vy)と地点B(0,ysize)とを結ぶ直線L3を作成するとともに、地点Q(xsize×2/3,Vy)と地点C(xsize,ysize)とを結ぶ直線L4を作成するのほか、新たに、路面の消失点Vと視差画像の下端中心M(xsize/2,ysize)とを結ぶ直線L8を作成する。そして、それぞれの直線上における点(x,y)に対し、先に求めた3つの領域についてそれぞれ得た区分近似直線上の点(y,d)を関連付け、(x,y,d)の関係を作成する。これにより、図60に示す3つの直線L3,L4,L8上における路面の高さを決定することができる。
次に、図60に示した3つの直線L3,L4,L8以外の路面の高さを決定する。まず、前記変形例1と同様、図60に示すように、ひとつの画像走査ライン(視差画像X軸方向ライン)L5を設定する。この画像走査ラインL5と左の直線L3との交点を(xL,y,dL)とし、この画像走査ラインL5と右の直線L4との交点を(xR,y,dR)とし、この画像走査ラインL5と中央の直線L8との交点を(xM,y,dM)とする。画像走査ラインL5上における各交点の間の視差値は、図61に示すように線形補間するとともに、画像走査ラインL5上における左右の交点の左右外側の視差値は、それぞれの左右交点における視差値dR,dLと同じ視差値を割り当てる。これにより、路面幅方向に路面がかまぼこ形状に傾斜している場合についても、その傾斜を反映させた路面形状を検出することができる。
このように路面高さを三つの区分近似直線を用いて近似することでさらに路面高さの近似精度を向上させることができる。なお、この破線で示した直線は固定ではなく、道路状況に応じて設定することにしてもかまわない。即ち、例えば図62に示すように、ガードレールの下端としたり、白線の上に設定したりすることで少なくとも破線の上では、より正確な3次元路面高さを検出することができる。
なお、変形例1及び変形例2は、視差画像をそれぞれ二分割、三分割する例を示しているが、同様の構成で視差画像の分割数を増やすことで、より精確な路面の形状の検出が可能となる。
以上のように、本実施形態においては、路面高さ(自車両進行方向における路面の起伏や路面幅方向における路面傾斜など)を高い精度で検出することができる。路面高さの検出精度が高ければ、路面の高さを利用して検出するオブジェクトの検出精度も向上し、歩行者や他車両などのオブジェクト分類の精度も向上する結果、オブジェクトへの衝突回避の確率を向上させ、道路交通の安全に貢献することが可能である。