以下、添付図面を参照して、実施の形態の移動体制御システムを詳細に説明する。図1は、実施の形態の移動体制御システムの概略構成を示す模式図である。この図1に示すように、移動体制御システムは、移動体の一例である自動車等の車両1に設けられる。移動体制御システムは、撮像ユニット2、解析ユニット3、制御ユニット4及び表示部5を有している。
撮像ユニット2は、車両1のフロントガラス6のルームミラー付近に設けられ、車両1の例えば進行方向等の画像を撮像する。撮像ユニット2の撮像動作で得られる画像データを含む各種データは、解析ユニット3に供給される。解析ユニット3は、撮像ユニット2から供給される各種データに基づいて、車両1が走行中の路面、車両1の前方車両、歩行者、障害物等の認識対象物を解析する。制御ユニット4は、解析ユニット3の解析結果に基づいて、表示部5を介して、車両1の運転者へ警告等を行う。また、制御ユニット4は、解析結果に基づいて、各種車載機器の制御、車両1のハンドル制御又はブレーキ制御等の走行支援を行う。
図2は、撮像ユニット2及び解析ユニット3の概略的なブロック図である。この図2に示すように、撮像ユニット2は、例えば2つの撮像部10A、10Bを備えたステレオカメラ構成となっている。2つの撮像部10A、10Bは、それぞれ同じ構成を有している。具体的には、撮像部10A、10Bは、撮像レンズ11A、11Bと、受光素子が2次元配置された画像センサ12A、12Bと、各画像センサ12A、12Bを撮像駆動するコントローラ13A、13Bを有している。
解析ユニット3は、FPGA(Field-Programmable Gate Array)14、RAM(Random Access Memory)15及びROM(Read Only Memory)16を有している。また、解析ユニット3は、CPU(Central Processing Unit)17、シリアルインタフェース(シリアルIF)18、及び、データIF19を有している。FPGA14〜データIF19は、解析ユニット3のデータバスライン21を介して相互に接続されている。また、撮像ユニット2及び解析ユニット3は、データバスライン21及びシリアルバスライン20を介して相互に接続されている。
RAM15には、撮像ユニット2から供給される輝度画像データに基づいて生成された視差画像データ等が記憶される。ROM16には、オペレーションシステム及びオブジェクト検出プログラム等の各種プログラムが記憶されている。
また、FPGA14は、各撮像部10A、10Bでそれぞれ撮像された撮像画像のうち、一方を基準画像とすると共に他方を比較画像とする。そして、FPGA14は、撮像領域内の同一地点に対応する基準画像上の対応画像部分と比較画像上の対応画像部分との位置ズレ量を、対応画像部分の視差値(視差画像データ)として算出する。
図3に、XZ平面上における被写体30と各撮像部10A、10Bの撮像レンズ11A、11Bとの位置関係を示す。この図3において、各撮像レンズ11A、11Bの間の距離b及び各撮像レンズ11A、11Bの焦点距離fは、それぞれ固定値である。また、被写体30の注視点Pに対する撮像レンズ11AのX座標のズレ量をΔ1とする。また、被写体30の注視点Pに対する撮像レンズ11BのX座標のズレ量をΔ2とする。この場合において、FPGA14は、被写体30の注視点Pに対する各撮像レンズ11A、11BのX座標の差である視差値Dを、以下の数1式で算出する。
視差値D=|Δ1−Δ2|・・・(数1式)
解析ユニット3のFPGA14は、撮像ユニット2から供給される輝度画像データに対して、例えばガンマ補正処理及び歪み補正処理(左右の撮像画像の平行化)等のリアルタイム性が要求される処理を施す。また、FPGA14は、このようなリアルタイム性が要求される処理を施した輝度画像データを用いて上述の数1式の演算を行うことで、視差画像データ(視差値D)を生成し、RAM15に書き込む。
CPU17は、ROM16に記憶されているオペレーションシステムに基づいて動作し、各撮像部10A、10Bの全体的な撮像制御を行う。また、CPU17は、ROM16からオブジェクト検出プログラムをロードし、RAM15に書き込まれた視差画像データを用いて各種処理を実行する。具体的には、CPU17は、オブジェクト検出プログラムに基づいて、車両1に設けられた各センサから、データIF19を介して取得した、車速、加速度、操舵角、ヨーレート等のCAN(Controller Area Network)情報を参照し、路面、ガードレール、車両、人間等の認識対象物の認識処理、視差計算、認識対象物との間の距離の計算等を行う。
ここで、視差値Dは、図3に示す各撮像レンズ11A、11Bから被写体30までの距離を「Z」として、以下の数2式でも算出できる。
視差値D=(b×f)/Z・・・(数2式)
この数2式からわかるように、各撮像レンズ11A、11Bから被写体30までの距離Zは、算出した視差値Dを用いて、以下の数3式で算出できる。
Z=(b×f)/D・・・(数3式)
CPU17は、撮像ユニット2から供給される上述の視差値Dを用いて、認証対象物との間の距離Zを算出する。
CPU17は、処理結果を、シリアルIF18又はデータIF19を介して、図1に示す制御ユニット4に供給する。制御ユニット4は、処理結果となるデータに基づいて、例えばブレーキ制御、車速制御、ハンドル制御等を行う。また、制御ユニット4は、処理結果となるデータに基づいて、表示部5に警告表示等を行う。これにより、車両1の運転者の運転支援を行うことができる。
次に、水平方向(幅方向)、高さ方向、奥行き方向の三次元情報(空間情報)を用いて認識対象物を検出する場合、各次元の情報(幅、高さ、奥行きの各情報)を効率的に用いることが重要となる。従来は、座標の横軸(X軸)を実距離とし、座標の縦軸(Y軸)を視差値とする2次元マップ(Real U−Disparity map)を用いて認識対象物の検出を行っている。以下、「Real U−Disparity map」を、単に「リアルUマップ」という。
しかし、従来手法では、リアルUマップにおいて、カメラ座標の縦軸(Y軸)と平行する地面からの認識対象物の高さ情報は欠如している。このため、複数の認識対象物が互いに隣接して位置する場合、複数の認識対象物が一つの認識対象物として誤検出される不都合が多々生ずる。このような誤検出の発生/未発生は、認識対象物の動き方(写り方)に左右される。従って、従来手法では、認識対象物を精度良く検出することは困難となっている。
これに対して、実施の形態の移動体制御システムは、認識対象物の路面からの高さに基づいた層構造(高さ範囲)で複数のリアルUマップを作成する。すなわち、視差画像内の視差点をリアルUマップ上に投票する際に、予め設定した高さ範囲のリアルUマップに投票することで、各高さ範囲のリアルUマップを作成する。以下、各高さのUマップを「レイヤUマップ」という。そして、実施の形態の移動体制御システムは、各高さ範囲のレイヤUマップで、それぞれ2次元平面のグルーピング処理を行い、各グルーピング結果の統合又は分離を行う。
すなわち、ステレオ画像から得られた視差画像上の視差点を、路面からの実高さに基づいて、予め用意した高さのレイヤUマップに投票し、各レイヤUマップ内の2次元平面でグルーピング処理を行い、各グルーピング結果の統合又は分離を行う。これにより、高速かつ高さ情報を効率的に用いて、認識対象物を高精度に検出できる。実施の形態の移動体制御システムは、特に、人間を高精度に検出可能となっている。
以下、このような実施の形態の移動体制御システムにおける認識対象物の認識動作を具体的に説明する。図4は、実施の形態の移動体制御システムの各種機能の機能ブロック図である。この図4において、平行化画像生成部41及び視差画像生成部42は、FPGA14のプログラム可能な論理ブロックにより、ハードウェアで実現される。なお、この例では、平行化画像生成部41及び視差画像生成部42は、ハードウェアで実現することとしたが、以下に説明するオブジェクト検出プログラム等により、ソフトウェアで実現してもよい。
また、図4において、Vマップ生成部45〜3次元位置決定部54は、CPU17がROM16に記憶されているオブジェクト検出プログラムを実行することで、ソフトウェアで実現される。すなわち、CPU17は、オブジェクト検出プログラムを実行することで、Vマップ生成部45、路面形状検出部46、リスト生成部47、Uマップ生成部48、レイヤUマップ生成部49、孤立領域検出部50、分類部51、対応領域検出部52、領域抽出部53及び3次元位置決定部54として機能する。
なお、この例では、Vマップ生成部45〜3次元位置決定部54は、CPU17がソフトウェアで実現することとしたが、一部又は全部を、IC(Integrated Circuit)等のハードウェアで実現してもよい。また、オブジェクト検出プログラムは、インストール可能な形式又は実行可能な形式のファイルでCD−ROM、フレキシブルディスク(FD)、CD−R、DVD、ブルーレイディスク(登録商標)、半導体メモリ等のコンピュータ装置で読み取り可能な記録媒体に記録して提供してもよい。DVDは、「Digital Versatile Disk」の略記である。また、オブジェクト検出プログラムは、インターネット等のネットワーク経由でインストールする形態で提供してもよい。また、オブジェクト検出プログラムは、機器内のROM等に予め組み込んで提供してもよい。
このような移動体制御システムにおいて、ステレオカメラを構成する撮像ユニット2の各撮像部10A、10Bは、輝度画像データを生成する。具体的には、各撮像部10A、10Bがカラー仕様の場合、各撮像部10A、10Bは、以下の数4式の演算を行うことで、RGB(赤緑青)の各信号から輝度(Y)信号を生成するカラー輝度変換処理を行う。各撮像部10A、10Bは、カラー輝度変換処理により生成した輝度画像データを、FPGA14の平行化画像生成部41に供給する。
Y=0.3R+0.59G+0.11B・・・(数4式)
平行化画像生成部41は、撮像ユニット2から供給された輝度画像データに対して、平行化処理を施す。この平行化処理は、各撮像部10A、10Bから出力される輝度画像データを、2つのピンホールカメラが平行に取り付けられたときに得られる理想的な平行化ステレオ画像に変換する処理である。具体的には、各画素の歪み量を、Δx=f(x、y)、Δy=g(x、y)という多項式を用いて計算した計算結果を用いて、各撮像部10A、10Bから出力される輝度画像データの各画素を変換する。多項式は、例えば、x(画像の横方向位置)、y(画像の縦方向位置)に関する6次多項式に基づく。これにより、撮像部10A、10Bの光学系の歪みを補正した平行な輝度画像を得ることができる。
次に、視差画像生成部42は、画素毎に距離情報を備えた距離画像の一例である、画素毎に視差値を備えた視差画像を生成する。すなわち、視差画像生成部42は、撮像部10Aの輝度画像データを基準画像データとし、撮像部10Bの輝度画像データを比較画像データとし、上述の数1式に示す演算を行うことで、基準画像データと比較画像データの視差を示す視差画像データを生成する。具体的には、視差画像生成部42は、基準画像データの所定の「行」について、一つの注目画素を中心とした複数画素(例えば16画素×1画素)からなるブロックを定義する。一方、比較画像データにおける同じ「行」において、定義した基準画像データのブロックと同じサイズのブロックを1画素ずつ横ライン方向(X方向)へズラす。そして、視差画像生成部42は、基準画像データにおいて定義したブロックの画素値の特徴を示す特徴量と比較画像データにおける各ブロックの画素値の特徴を示す特徴量との相関を示す相関値を、それぞれ算出する。
また、視差画像生成部42は、算出した相関値に基づき、比較画像データにおける各ブロックの中で最も基準画像データのブロックと相関があった比較画像データのブロックを選定するマッチング処理を行う。その後、基準画像データのブロックの注目画素と、マッチング処理で選定された比較画像データのブロックの対応画素との位置ズレ量を視差値Dとして算出する。このような視差値Dを算出する処理を基準画像データの全域又は特定の一領域について行うことで、視差画像データを得る。視差画像データは、画像座標であるx座標およびy座標と、視差値Dとを有する3次元のデータの組である。以下、画像という言葉を用いて説明するが、実際に画像として構成されている必要はなく、3次元のデータの組を表すものとして説明する。
マッチング処理に用いるブロックの特徴量としては、例えばブロック内の各画素の値(輝度値)を用いることができる。また、相関値としては、例えば基準画像データのブロック内の各画素の値(輝度値)と、これらの画素にそれぞれ対応する比較画像データのブロック内の各画素の値(輝度値)との差分の絶対値の総和を用いることができる。この場合、当該総和が最も小さくなるブロックが、最も相関があるブロックとして検出される。
このような視差画像生成部42のマッチング処理としては、例えば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(推定誤差補正)等の手法を用いてもよい。
なお、本実施形態においては、視差値と距離値が等価に扱えることから、距離画像の一例として視差画像を示しているが、これに限られない。例えば、ミリ波レーダやレーザレーダの距離情報と、ステレオカメラで生成される視差画像を融合させて距離画像を生成しても良い。
次に、視差画像(x座標値、y座標値、視差値D)の組のうち、X軸を視差値D、Y軸をy座標値、Z軸を頻度とした2次元ヒストグラムを作成することを考える。以下、この2次元ヒストグラムを「V−Disparityマップ(Vマップ)」という。Vマップ生成部45は、例えば、図5に示すように画面中央に延びる平坦な路面60上を走行する車両61の左側に電柱62が存在する、撮像ユニット2の撮像画像の視差画像の各画素のうち、視差値D及びy座標値を有する画素に対して、一つカウントアップした度数(頻度)を付与する。そして、Vマップ生成部45は、X軸を視差値D、Y軸をy座標値、Z軸を頻度とした2次元ヒストグラム上に各画素を投票することで、図6に示すように、右下がりの直線として投票される路面60上に、車両61及び電柱62が投票されたVマップを作成する。このVマップ上における直線状の画素群を特定することで、路面に相当する画素群を特定できる。このようなVマップにおいては、路面より下の部分の視差値は検出されない。このため、図6に斜線で示す領域Aに相当する視差値はカウントされることはない。
もしノイズ等により路面より下の部分の視差値があれば、これらの視差値は以降のオブジェクト検出において利用しないようにすればよい。なお、オブジェクトの高さを検出するためには、路面を正確に検出することが必要となる。そのため、車両1が停止している状態において検出される路面に相当する仮想直線Kを用いて、仮想直線Kから所定距離内における画素のみをマッピングしたVマップ(制限Vマップ)を路面検出に利用してもよい。
次に、このように生成されたVマップを用いて路面形状を検出する路面形状検出部46の動作を説明する。路面形状検出部46は、基準検出部の一例である。路面形状検出部46は、各オブジェクトの高さの基準とする基準オブジェクトの一例である路面を検出する。路面形状検出部46は、Vマップ上で路面と推定される位置を直線近似する。路面が平坦な場合は、一本の直線で近似する。また、途中で勾配が変わる路面の場合、Vマップ上を複数の区間に分割して直線近似を行う。これにより、途中で勾配が変わる路面の場合でも、精度よく直線近似を行うことができる。
具体的に説明すると、路面形状検出部46は、まず、Vマップを用いて路面候補点を検出する。路面候補点の検出は、横軸を二つに分割し、それぞれの領域で候補点の検出方法を変える。具体的には、路面形状検出部46は、視差の大きい近距離の領域においては、第1の候補点検出方法で路面候補点の検出を行う。また、路面形状検出部46は、視差の小さい遠距離の領域においては、第2の候補点検出方法で路面候補点の検出を行う。
ここで、上記のように視差の大きい近距離の領域と視差の小さい遠距離の領域とで路面候補点の検出方法を変更する理由は、以下のとおりである。例えば図5に示す撮影画像のように、近距離では路面の面積が大きく、路面上の視差データがVマップに投票される頻度が大きいのに対し、遠距離では路面の面積が小さくなり、路面を表す座標の頻度が相対的に小さくなる。つまり、Vマップで路面として予測される点の頻度値は、遠距離では小さく、近距離では大きい。このため、同じ基準で路面候補点を検出すると、近距離では路面の候補点は検出できるが、遠距離の路面候補点は検出困難となり、遠距離の路面検出精度が低下する。
このような欠点を解消するために、Vマップを視差の大きい領域と視差の小さい領域との二つの領域に分け、それぞれの領域で路面候補点の検出の方法及び基準を変更する。これにより、近距離及び遠距離の双方の路面検出精度を向上させることができる。
次に、リスト生成部47の動作を説明する。リスト生成部47は、路面高さを算出してRAM15等の記憶部に記憶する(テーブル化する)。Vマップから路面を表す直線式が得られたため、視差dが決まれば、対応するy座標y0が決まる。この座標y0が、路面の高さとなる。リスト生成部47は、路面の高さを示す座標y0と、必要な範囲の視差とを関連付けた路面高さリストを生成する。また、視差がdでy座標がy’である場合、y’−y0が、視差dのときの路面からの高さを示す。リスト生成部47は、座標(d、y’)の路面からの高さHを、「H=(z×(y’−y0))/f」の演算式を用いて算出する。なお、この演算式における「z」は、視差dから計算される距離(z=BF/(d−offset))、「f」は撮像ユニット2の焦点距離を(y’−y0)の単位と同じ単位に変換した値である。ここで、BFは、撮像ユニット2の基線長Bと焦点距離fを乗じた値、offsetは無限遠のオブジェクトを撮影したときの視差である。
次に、U−Disparityマップ生成部(Uマップ生成部)48の動作を説明する。Uマップは、横軸を視差画像のx、縦軸を視差画像の視差d、Z軸を頻度とした2次元ヒストグラムである。路面からの高さが、例えば20cm〜3m等の所定の高さの範囲にある視差画像の点(x、y、d)を、(x、d)の値に基づいて投票する。Uマップ生成部48は、ある視差画像の点(x、y、d)を視差画像の所定の範囲の画素を投票してUマップを生成する。すなわち、視差画像の上部1/6の領域には空が写っており、殆どの場合、認識を必要とするオブジェクトが写っていることは無い。このため、Uマップ生成部48は、例えば視差画像の地面側5/6の領域(上部1/6の領域以外の領域)の画素を投票して頻度のUマップを生成する。
具体的に説明すると、図7に示す輝度画像の場合、左右にガードレール81、82があり、車両77及び車両79がセンターラインを挟んで対面通行をしている。各走行車線には、それぞれ1台の車両77又は車両79が走行している。この場合、Uマップ生成部48は、図8に示す頻度のUマップを生成する。すなわち、Uマップ生成部48は、各ガードレール81、82を、左右から中央上部に伸びる直線として投票した頻度のUマップを生成する。また、各ガードレール81、82の間で、水平線分と、側面が見える状態で車両81、82が検出されている場合、Uマップ生成部48は、車両の側面を示す斜線が水平線分に連結した形状で、車両77、79を頻度のUマップ上に投票する。
また、Uマップ生成部48は、このような頻度のUマップと共に、高さのUマップを生成する。高さのUマップは、Uマップに投票される(x、d)の組のうち、路面からの高さが、最も高い値を設定したマップである。図9において、各車両77、79の高さは、左右のガードレール81、82よりも高くなる。これによりオブジェクトの高さ情報を、オブジェクト検出に利用可能とすることができる。
次に、レイヤUマップ生成部49の動作を説明する。レイヤUマップ生成部49は、マップ生成部の一例である。レイヤUマップ生成部49は、画像の画素が横軸となっていた上述のUマップにおいて、実際の距離(実距離)を横軸としたリアルUマップを生成する。そして、レイヤUマップ生成部49は、リアルUマップに投票される点を、路面からの高さに応じて、予め設定した該当する高さの(レイヤの)リアルUマップに投票し、レイヤ毎のリアルUマップであるレイヤUマップを生成する。レイヤUマップは、マップの一例である。
まず、図10にリアルUマップの一例を示す。図10に示すように、リアルUマップの横軸は、実距離となっている。また、リアルUマップの縦軸は、距離に応じた間引き率を用いて間引き処理した間引き視差となっている。具体的には、例えば50m以上の遠距離の場合、レイヤUマップ生成部49は、間引き処理しない視差を用いる。また、例えば20m〜50m等の中距離の場合、レイヤUマップ生成部49は、1/2間引き処理した間引き視差を用いる。また、例えば10m〜20m等の近距離の場合、レイヤUマップ生成部49は、1/3間引き処理した間引き視差を用いる。また、例えば0m〜10m等の最近距離の場合、レイヤUマップ生成部49は、1/8間引き処理した間引き視差を用いる。
遠方では、認識すべきオブジェクトが小さく、視差情報が少なく、また、距離の分解能も小さいため、間引き処理は行わない。これに対して、近距離の場合は、オブジェクトが大きく写るため、視差情報が多く距離の分解能も大きい。このため、大きな間引き処理を行うことが可能となる。図10は、頻度のリアルUマップの一例である。この図10からわかるように、リアルUマップの場合、ガードレール81、82は、縦の直線状に表され、各車両77、79の形状も、実際の車両に近い形状となっている。
横軸を実距離とし、縦軸を視差値とした2次元ヒストグラムを作成することで、高さ情報を圧縮し、2次元平面で孤立領域の検出処理を行うことができる。このため、高速処理を可能とすることができる。
次に、レイヤUマップ生成部49は、このような頻度のリアルUマップを用いて、各高さ範囲のリアルUマップであるレイヤUマップを生成する。すなわち、横軸x、縦軸y、視差dのUマップ上に、視差画像の点(x、y、d)を投票する際、路面形状検出部46の路面形状検出処理により、リアルUマップに投票される(x、d)の路面からの高さ(h)を計算できる。レイヤUマップ生成部49は、レイヤUマップに投票される点(x、d)の路面からの高さ(h)に基づいて、予め設定した該当する高さ範囲の(レイヤの)リアルUマップに投票することで、レイヤ毎のレイヤUマップを生成する。
具体的には、例えば図11に示すように、左右のガードレール81、82の間を、車両77及び車両79がセンターラインを挟んで対面通行をしており、車両79と右のガードレール82の間に、ガードレール82に沿って二人の人間83、84が存在する撮像画像が得られたとする。この場合、レイヤUマップ生成部49は、横軸を実距離、縦軸を間引き視差とした頻度のリアルUマップを生成する。これにより、図12に示すように、縦の直線で表されるガードレール81、82の間に、各車両77、79と、車両79と右のガードレール82の間に、ガードレール82に沿って二人の人間83、84が存在するリアルUマップが生成される。
次に、レイヤUマップ生成部49は、路面形状検出部46の路面形状検出処理により計算した、各オブジェクトの路面からの高さを検出する。これにより、ガードレール81、82の路面からの高さは、例えば150cm未満、車両77の路面からの高さは150cm未満、車両79の路面からの高さは150cm以上、各人間83,84の路面からの高さは150cm以上のように、各オブジェクトの路面からの高さを検出できる。
次に、レイヤUマップ生成部49は、図13に示す路面からの高さが60cm〜200cmのオブジェクト用のレイヤUマップを生成する。ガードレール81、82、車両77、79及び人間83,84は、全て60cm〜200cmのレイヤに含まれるオブジェクトである。このため、図12に示したリアルUマップと同様に、図13に示すように、縦の直線で表されるガードレール81、82の間に、各車両77、79と、車両79と右のガードレール82の間に、ガードレール82に沿って二人の人間83、84が存在するレイヤUマップが生成される。
同様に、レイヤUマップ生成部49は、図14に示す路面からの高さが150cm〜200cmのオブジェクト用のレイヤUマップを生成する。この場合、路面からの高さが150cm未満であるガードレール81、82及び車両77は、投票されないレイヤUマップが生成される。すなわち、図14に示すように路面からの高さが150cm〜200cmのオブジェクトである、車両79及び二人の人間83、84が投票されたレイヤUマップが生成される。
このとき、上述した2種類のレイヤUマップにおいては、対象となる高さがオーバーラップしているため、路面からの高さが150cm〜200cmを示す画素は両方のレイヤUマップに投票される。なお、本実施形態においては2種類のレイヤUマップで、対象となる高さがオーバーラップしているが、これに限られない。例えば、1つ目のレイヤUマップを60cm〜150cm未満とし、2つ目のレイヤUマップを150cm〜200cmとすることもできる。ただし、オーバーラップを設けることにより、重複した処理を省略することができるため、高速化が可能となる。
図15のフローチャートは、このようなレイヤUマップの生成動作の流れを示している。レイヤUマップ上にレイヤとして取り扱う高さの閾値は、予め設定されている。あくまでも一例であるが、図15の例の場合、路面からの高さが60cm〜200cmの人領域レイヤ、150cm〜200cmの大人領域レイヤ及び200cm以上の2m以上領域レイヤの計3つのレイヤが予め設定されている。
ステップS101では、レイヤUマップ生成部49が、視差画像上の点(x、y、d)からレイヤUマップ上の対応点を計算する(x、d)。ステップS102では、レイヤUマップ生成部49が、投票される点(x、d)の路面からの実高さ(h)を計算する。そして、レイヤUマップ生成部49は、ステップS103において、予め設定されているレイヤのうち、計算した実高さhが該当するレイヤを判別して投票する(ステップS104、ステップS105、ステップS106)。
例えば、実高さh=170cmと計算した場合、レイヤUマップ生成部49は、60cm〜200cm領域のレイヤUマップ及び150cm〜200cm領域のレイヤUマップに投票を行う。なお、この場合、200cm以上のレイヤUマップに対しては、投票は行わない。
具体的に説明すると、この例の場合、図16に示すように路面からの実高さが200cm以上のオブジェクトが投票されるレイヤと、路面からの実高さが150cm〜200cmのオブジェクトが投票されるレイヤと、路面からの実高さが0cm〜200cmのオブジェクトが投票されるレイヤとが、予め設定されている。すなわち、レイヤUマップは、上述のリアルUマップに対して、高さの情報を付加したUマップとなっている。このため、人間及び物が隣接して存在した場合でも、正確にオブジェクトを特定して検出可能となっている。
複数の人が隣接して画像上に存在する場合、一般的に、路面からの高さが高い部分では独立しているが、例えば路面付近又は人が手を繋いでいる場合等のように、路面からの高さが低い部分では、視差領域が繋がっていることが多い。このため、レイヤUマップの場合、図17に示すように、複数の人が一つのオブジェクトとして検出される可能性がある。すなわち、図16に示す3人の人が、レイヤUマップ上では、図17に示すように例えば長方形状のオブジェクトとして繋がって検出される可能性がある。
一方、レイヤUマップの場合、予め設定される高さに対応するレイヤ構造でデータが格納される。このため、図18に示すように、60cm〜200cmの高さで設定したレイヤUマップ上でオブジェクトのデータが結合した場合でも、他のレイヤである150cm〜200cmの高さで設定したレイヤUマップ上では、図19に示すように各オブジェクトのデータが分離されて現れる。これにより、各オブジェクトを正確に検出できる。このようなレイヤUマップは、設定する高さの閾値により様々な用途がある。例えば、200cm以上の高さの閾値を設定した場合、図20に示すように路面から200cm以上の高さの電柱及びポール等の検出が可能となる。
次に、このようなレイヤUマップを用いて各オブジェクトの検出を行う孤立領域検出部50の動作を説明する。孤立領域検出部50は、集合検出部の一例である。孤立領域検出部50は、各レイヤUマップから、所定の閾値以上の視差情報の塊の領域である孤立領域(集合領域)を検出する。図21は、孤立領域検出部50の動作の流れを示すフローチャートである。ステップS131では、孤立領域検出部50が、頻度のレイヤUマップの平滑化を行う。すなわち、視差には、計算誤差等による分散がある。また、全ての画素に対する視差の計算は行われない。このため、レイヤUマップは、ノイズを含んでいる。孤立領域検出部50は、ノイズの除去及び検出するオブジェクトを分離し易くするために、レイヤUマップの平滑化処理を行う。画像の平滑化と同様に、平滑化フィルタ(例えば、3画素×3画素の単純平均)をレイヤUマップの頻度値に適用することで、ノイズとなる頻度を減少させることができる。また、オブジェクトの部分では、頻度が周囲より高い纏まったグループを形成でき、後段の孤立領域検出処理を容易化できる。
次に、孤立領域検出部50は、ステップS132において、レイヤUマップを二値化するための閾値を設定する。この二値化処理は、頻度データが存在するか否か(閾値0)で行う。孤立領域検出部50は、ステップS133において、最初は閾値0で二値化を行う。レイヤUマップ上に投票されるオブジェクトは、オブジェクトの高さ、形状、路面視差との分離等により、独立しているオブジェクト及び他オブジェクトと連結しているオブジェクトが存在する。このため、孤立領域検出部50は、小さい閾値からレイヤUマップを二値化処理し、徐々に閾値を増加させて二値化処理を行う。これにより、最初は独立した適切な大きさのオブジェクト(孤立領域)を検出し、その後、閾値を増加させていくことで連結しているオブジェクトを分離し、独立した大きさのオブジェクトとして検出できる。
次に、孤立領域検出部50は、ステップS134において、値のある座標のラベリング処理を行って、孤立領域を検出する。具体的には、孤立領域検出部50は、二値化後に黒の値となる座標(頻度値が二値化閾値より高い座標)を、その連結性に基づいてラベリングし、同一ラベルが付いた領域を一つのオブジェクトとして検出する。ラベリングの方法は、図22に示す「×」印で示す座標が黒であり、ラベル付け対象座標である場合、「×」印で示す座標の左斜め上、上、右斜め上、左の各位置の座標である、「1」、「2」、「3」、「4」の各位置の座標がラベル付けされていれば、同じラベルを「×」印で示す座標に割り当てる。
図23に示すように、「×」印で示す座標の周囲に、複数のラベルが割り当てられている場合、孤立領域検出部50は、図24に示すように、最も小さい値のラベルを、「×」印で示す座標に割り当てる。また、孤立領域検出部50は、図24に示すように、「×」印で示す座標の周囲の座標のうち、ラベルが割り当てられていた座標のラベルを、最も小さい値のラベルに置換する。図23及び図24の例の場合、孤立領域検出部50は、「8」のラベルを、「×」印で示す座標に割り当てる。また、孤立領域検出部50は、「9」又は「8」のラベルが割り当てられていた座標である、「×」印で示す座標の左斜め上、右斜め上及び左の各座標のラベルを、「8」のラベルに置換する。
このようなラベリング処理により検出されたオブジェクトの幅(同じラベルのオブジェクトの幅)は、実際のオブジェクトに近い幅Wとみなすことができる。孤立領域検出部50は、幅Wが所定の範囲内のオブジェクトを、オブジェクト候補領域とみなす。
次に、孤立領域検出部50は、ステップS135において、検出した複数の孤立領域の大きさをそれぞれ判定する。この大きさの判定処理は、検出対象が歩行者から大型自動車であるため、孤立領域の幅が検出対象のサイズの範囲内であるか否かを判定する処理である。孤立領域の幅が検出対象のサイズよりも大きい場合(ステップS135:Yes)、孤立領域検出部50は、ステップS132に処理を戻す。そして、孤立領域検出部50は、二値化の閾値を1つインクリメントし、検出対象のサイズよりも大きい幅の孤立領域を、再度二値化処理する。また、孤立領域検出部50は、再度二値化処理された孤立領域をラベリング処理し、より小さな孤立領域を検出して、検出対象のサイズよりも大きいか否かの判定を行う。孤立領域検出部50は、このように閾値設定からラベリングの処理を繰り返し行い、所定の大きさの孤立領域を検出する。
次に、所定の大きさの孤立領域を検出すると(ステップS135:No)、孤立領域検出部50は、ステップS136において、周辺領域除去処理を行う。遠方に存在するオブジェクトで、路面検出精度が悪く、路面の視差がレイヤUマップ内に投票され、オブジェクト及び路面の視差が一塊になって検出される場合がある。このような場合に、孤立領域検出部50は、オブジェクト及び路面の視差が一塊となっている領域(除去領域)の左右及び近傍の領域で高さが路面に近い領域を削除する周辺領域除去処理を行う。
このような周辺領域除去処理を具体的に説明する。図25に、遠方の路面が実際の高さよりも低く検出され、路面と車両が一つのオブジェクトとして検出されたレイヤUマップを示す。この図25において、右斜線の領域は、頻度が高い領域を示しており、左斜線の領域は、頻度が低い領域を示している。図26は、図25のレイヤUマップに対応する高さのリアルUマップである。ここでいう高さのリアルUマップは、画素毎に最大高さの情報を持つマップである。この図26において、右斜線の領域は、高さが高い領域を示しており、左斜線の領域は、高さが低い領域を示している。図25及び図26を見比べて分かるように、レイヤUマップにおける頻度が高い領域と、高さのリアルUマップにおける高さが高い領域とが一致しない。また、レイヤUマップにおける頻度が低い領域も、高さのリアルUマップにおける高さが低い領域に一致しない。
このような場合、孤立領域検出部50は、レイヤUマップの代わりに、高さのリアルUマップを用いて、オブジェクトと路面の境界を検出して周辺領域を除去する。レイヤUマップは、各高さ範囲の分割数(レイヤの数)の高さ情報しか有さないが、高さのリアルUマップは、細かい分解能で高さの情報を有しているため、周辺領域の除去に適しているからである。孤立領域検出部50は、例えば図27のフローチャートに示す流れで、近傍領域の除去(ステップS145)、左領域の除去(ステップS146)及び右領域の除去(ステップS147)の順に、周辺領域の除去を行う。
ステップS145における近傍領域除去の判定は、孤立領域検出部50が、高さの閾値を以下のように設定し、条件1、条件2又は条件3が、孤立領域の最下端(ボトムライン)から成り立ち続ける場合に、該当するラインの頻度を変更して除去する。高さの閾値を設定する場合、孤立領域検出部50は、オブジェクト及び路面の視差が一塊となっている領域(除去領域)の最大高さに応じて、高さ閾値を設定する。例えば、最大高さが120cm以上の場合、孤立領域検出部50は、高さ閾値を60cmに設定する。また、最大高さが120cm未満の場合、孤立領域検出部50は、高さ閾値を40cmに設定する。
条件1は、「ライン内に高さを持つ点が、例えば5つ等の所定の数以下で、高さ閾値以上の高さを持つ点が存在しないこと」である。また、条件2は、「ライン内に高さ閾値以上の高さを持つ点の数が、高さ閾値未満の高さを持つ点の数より少なく、高さ閾値以上の高さを持つ点の数が2つ未満であること」である。また、条件3は、「高さ閾値以上の高さを持つ点の数が、ライン全体の高さを持つ点の数の10%未満であること」である。孤立領域検出部50は、上述の条件1、条件2又は条件3が、孤立領域の最下端(ボトムライン)から成り立ち続ける場合に、該当するラインの頻度を変更して除去する。
また、孤立領域検出部50は、ステップS146及びステップS147における左右領域除去の判定は、高さ閾値を以下のように設定し、条件4、条件5又は条件6が孤立領域の左端又は右端の列から成り立ち続ける場合に、該当する列の頻度を変更して除去する。高さ閾値を設定する場合、孤立領域検出部50は、オブジェクト及び路面の視差が一塊となっている領域(除去領域)の最大高さに応じて設定する。例えば、最大高さが120cm以上の場合、孤立領域検出部50は、高さ閾値を60cmに設定する。また、最大高さが120cm未満の場合、孤立領域検出部50は、高さ閾値を40cmに設定する。
条件4は、「列内に高さを持つ点が、例えば5つ等の所定の数以下で、高さ閾値以上の高さを持つ点がないこと」である。条件5は、「列内に高さ閾値以上の高さを持つ点の数が、高さ閾値未満の高さを持つ点の数より少なく、高さ閾値以上の高さを持つ点の数が2つ未満であること」である。条件6は、「高さ閾値以上の高さを持つ点の数が、列全体の高さを持つ点の数の10%未満であること」である。孤立領域検出部50は、条件4、条件5又は条件6が孤立領域の左端又は右端の列から成り立ち続ける場合に、該当する列の頻度を変更して除去する。
図28において、中心に位置する黒塗りの領域は、高さが高い孤立領域を示している。また、右斜線、左斜線及び網線で示す孤立領域は、それぞれ高さが低い孤立領域を示している。このうち、右斜線で示す孤立領域は、孤立領域検出部50により設定された高さ閾値と、上述の条件1、条件2又は条件3に基づいて除去される。また、左斜線及び網線で示す孤立領域は、孤立領域検出部50により設定された高さ閾値と、上述の条件4、条件5又は条件6に基づいて除去される。これにより、図28の中心に示す黒塗りの孤立領域のみを抽出できる。
次に、孤立領域検出部50は、図21のフローチャートのステップS137において、他に除去領域が存在するか否かを判別する。他に除去領域が存在する場合(ステップS137:Yes)、孤立領域検出部50は、ステップS134に処理を戻し、再度ラベリング処理を行い、孤立領域の再設定を行う。
次に、孤立領域検出部50は、ステップS137において、他に除去領域は存在しないと判別すると(ステップS137:No)、ステップS138に処理を進め、周辺領域除去を行った孤立領域の大きさ(幅、高さ、距離)を判定する。
例えば、自動車とバイク、自動車と歩行者、自動車同士等のように、オブジェクト同士が横に並んで近接している場合、レイヤUマップの平滑化が原因で、複数のオブジェクトの孤立領域を、一つのオブジェクトの孤立領域として検出するおそれがある。または、視差画像の画素点数を補うために視差補間処理を行う場合、異なるオブジェクト同士の視差が繋がることがある。このような場合、孤立領域検出部50は、以下に説明する横方向分離処理を行い、複数のオブジェクトが重なっている一つの孤立領域を、オブジェクト毎の複数の孤立領域に分離する。
これに対して、隣の車線を走行している複数の先行車が遠方にいる場合、ステレオ画像から得られる視差の分散が大きいと、レイヤUマップ上では、各オブジェクトの視差が上下に伸び、連結することがある。そして、連結されたオブジェクトの孤立領域を、一つのオブジェクトの孤立領域として検出するおそれがある。このような場合、孤立領域検出部50は、以下に説明する縦方向分離処理を行い、一つのオブジェクトとして検出された孤立領域を、手前を走る先行車両の孤立領域と、先行車両の前方を走行する車両の孤立領域とに分離する。
ステップS138では、孤立領域検出部50が、周辺領域除去を行った孤立領域の大きさ(幅、高さ、距離)を判定することで、このような横方向分離処理又は縦方向分離処理を行うか否かを判別する。孤立領域検出部50は、いずれの分離処理も行わないと判別した場合は、ステップS139に処理を進め、周辺領域除去処理を施した孤立領域を、オブジェクト候補として、例えばRAM15等の記憶部に一旦、登録する。
これに対して、例えば幅2mの自動車に、幅50cmの別のオブジェクトが近接している場合、レイヤUマップから検出される孤立領域は、ステップS138の大きさ判定において、2.5mを超える幅のオブジェクトとして判定される。このような場合、孤立領域検出部50は、ステップS140に処理を進め、横方向分離処理を実行すると共に、ステップS142に処理を進め、縦方向分離処理を実行する。
図29に、孤立領域検出部50が実行する横方向分離処理の流れを示すフローチャートを示す。ステップS151では、孤立領域検出部50が、図30に示すように各X座標の頻度情報と高さ情報とを積算処理し、各X座標の積算値を縦方向(Y方向)に積分処理して横方向の評価値を算出する。
図31に、横方向の評価値の波形の一例を示す。この評価値のうち、ボトムBT部分が評価値の最小値(最小評価値)を示している。ステップS152では、孤立領域検出部50が、この最小評価値の位置を検出する。ステップS153では、孤立領域検出部50が、各評価値の平均値に、例えば0.5等の所定の係数を乗算処理し、評価値の二値化閾値Tを算出する。そして、孤立領域検出部50は、図31中点線で示すように、二値化閾値Tを評価値に設定する。そして、ステップS154において、この二値化閾値に基づいて、評価値を二値化する。
評価値を用いる理由は、以下のとおりである。まず、連結している部分の頻度値を、オブジェクトの頻度値より比較的小さな値で取り扱うことができるためである。また、高さのリアルUマップでは、連結している部分はオブジェクトの部分と高さが異なり、高さを持つデータが少ないためである。また、視差補間の影響で連結している場合、高さのリアルUマップにおける視差の分散が小さいためである。
次に、孤立領域検出部50は、ステップS155において、図31に示すように最小評価値を含み、二値化閾値Tより小さい評価値を含む領域を分離領域SRとして設定し、分離領域SRの両端を分離境界SKとする。孤立領域検出部50は、分離境界SKの内側の頻度値を変更することで、各オブジェクトに対応する孤立領域を横方向に分離する。
図21のフローチャートのステップS141では、孤立領域検出部50が、このような横方向分離処理により分離できないオブジェクトを(ステップS141:No)、オブジェクト候補としてRAM15等の記憶部に登録する。また、孤立領域検出部50は、横方向分離処理ができた場合は(ステップS141:Yes)、さらに分離できる可能性があるため、ステップS134に処理を戻し、再度、横方向分離処理を試みる。
図32に、平滑化処理後のレイヤUマップを示す。この図32に示すレイヤUマップは、左斜線の孤立領域が頻度の高い孤立領域を示しており、右斜線の孤立領域が頻度の低い孤立領域を示している。また、図32の下側の頻度の高い孤立領域(左斜線の孤立領域)は、直前を走行する先行車両に対応する孤立領域である。また、図32の上側(奥側)の頻度の高い孤立領域(左斜線の孤立領域)は、直前を走行する先行車両のさらに先を走行する先行車両に対応する孤立領域である。
このような図32のレイヤUマップの場合、先行車両の左右端に視差が集中し、視差の分散も大きいため、頻度の高い孤立領域の両側で左カーブを描くように視差が伸びている。視差の伸びが大きいため、図32中点線の楕円で示すように、手前の先行車両の視差の伸びと、奥側の先行車両の視差の伸びとが連結し、2台の先行車両が1つの孤立領域として検出される。このような場合、検出された孤立領域の幅は、実際の先行車両の幅より大きくなる。このため、孤立領域検出部50は、先行車両の実幅を算出するための領域の設定を行う。先行車両の実幅を算出するための領域としては、孤立領域検出部50は、以下に示すように孤立領域の最近傍距離Zminの大きさに応じて所定の距離範囲Zrを設定する。そして、孤立領域検出部50は、その距離範囲に相当する視差範囲の領域内で手前の先行車の実幅を探索する。図32に示す距離範囲の領域が実幅算出領域JRである。このZrの値は撮像ユニット2の撮像画像から得られる視差の分散の大きさから設定できる。
具体的には、孤立領域検出部50は、実幅算出領域の距離範囲Zrを、以下のように設定する。すなわち、例えば「Zmin<50m」の場合、孤立領域検出部50は、Zr=20mに設定する。また、例えば「50m<=Zmin<100m」の場合、孤立領域検出部50は、Zr=25mに設定する。さらに、例えば「Zmin>100m」の場合、孤立領域検出部50は、Zr=30mに設定する。孤立領域検出部50は、孤立領域内で横方向に連結している複数のオブジェクトを、このような横方向分離処理により分離する。
次に、ステップS142における縦方向分離処理を説明する。図32に示したように、レイヤUマップ上で縦方向にオブジェクトが並んでおり、2台以上の縦列状態を1つの孤立領域として検出した場合、2台以上の車が持つ視差の範囲と車間距離を合せた範囲が、その孤立領域の視差範囲となる。例えば20m以上の遠方となると、ガードレール又は壁以外で視差(距離)が広い範囲を有し、縦列方向の分離が困難となる。このため、孤立領域検出部50は、距離に応じた孤立領域の視差(距離)範囲が大きい孤立領域を対象として、縦方向分離処理を行う。なお、ガードレール又は建物の壁等は、視差範囲が広くても幅が狭い。孤立領域検出部50は、幅の狭い孤立領域に対しては、縦方向分離処理を実行しない。
具体的には、孤立領域検出部50は、孤立領域の最近傍距離を「Zmin」、最遠方距離を「Zmax」、幅を「W」とし、以下の条件7又は条件8のいずれかを満たすときに、縦方向分離処理を実行する。条件7は、「W>1500、かつ、Zmin>100mのとき、Zmax−Zmin>50m」である。条件は、「W>1500、かつ、100m≧Zmin>20mのとき、Zmax−Zmin>40m」である。
図33のフローチャートに、縦方向分離処理の流れを示す。まず、図32は、上述のように、左隣の車線を走行している2台の先行車両が一つの孤立領域として検出されたレイヤUマップを示している。この例の場合、図32中、下側(手前)の頻度の高い斜線の領域が、自車両の直前を走行する先行車両を表し、図32中、上側(奥側)の頻度の高い斜線の領域が、先行車両のさらに前を走る先行車両を示している。先行車両の左右端に視差が集中し、また、分散も大きいため、頻度の高い領域の両側で左カーブを描くように視差が伸びている。この視差の伸びが大きいため、手前の先行車両の視差の伸びと、奥側の先行車両の視差の伸びとが連結し、2台の先行車両が一つの孤立領域として検出されている。
このような場合、2台の先行車両の幅が重なって検出されているため、実際の1台分の先行車両の幅より、大きい幅として、孤立領域の幅が検出される。このため、孤立領域検出部50は、図33のフローチャートのステップS161において、実幅を算出するための領域の設定を行う。
具体的には、孤立領域検出部50は、孤立領域のZminからZminの大きさに応じて所定の距離範囲Zrを以下に説明するように設定する。
Zmin<50mの場合、Zr=20mに設定
50m≦Zmin<100mの場合、Zr=25mに設定
Zmin>100mの場合、Zr=30mに設定
孤立領域検出部50は、このように設定した距離範囲に相当する視差範囲の領域内で、手前の先行車両の実幅を検出する.図32の括弧の範囲の領域が実幅算出領域JRである。孤立領域検出部50は、撮像ユニット2から得られる視差の分散の大きさに基づいて、所定の距離範囲Zrの値を設定する。
次に孤立領域検出部50は、ステップS162において、実幅算出領域JR内で横方向評価値を算出する。孤立領域検出部50は、図34に示すように実幅算出領域JRのライン毎に積算処理した頻度値を、各ラインの評価値とする。また、孤立領域検出部50は、図35に示すように、評価値が最大のラインを実幅検出位置とする。
次に、孤立領域検出部50は、ステップS163において、図35に示すように、実幅検出位置における頻度値が、連続して存在し、かつ、最大の長さ(幅)を有する実幅領域を検出し、検出した最大の長さを実幅とする。図35の例の場合、実幅は5となる。
次に、孤立領域検出部50は、ステップS164において、実幅の境界の外側を分離境界とし、分離境界を基準として、孤立領域の各視差における分離境界の位置を順次計算して設定する。すなわち、図36に示すように、撮像ユニット2のカメラのレンズ中心をO、カメラの向いている方向をカメラ中心軸(レイヤUマップの中心の縦軸)、カメラ中心軸の鉛直方向を横軸とする。例えば、実幅領域の分離境界の位置が、距離Z0、横位置X0とする。このとき距離Zにおける分離境界の位置Xは、「X=X0×(Z/Z0)」となる。
また、撮像ユニット2の基線長Bと焦点距離Fを掛け合わせた値をBFとし、Z0に対応する視差をd0、Zに対応する視差をd、オフセット(offset)を無限遠における視差とする。この場合、「Z=BF/(d−offset)」、「Z0=BF/(d0−offset)」となる。このため、「X=X0×(Z/Z0)」の数式を「X=X0×(d0−offset)/(d−offset)」のように変形できる。
視差dとレイヤUマップの間引き視差との対応は分かっているため、孤立領域内の分離境界の位置を、全ての間引き視差の値で決定できる。図37の黒塗りの領域が、分離境界となる領域を示している。これにより、ステップS165において、自車両の直前を走行する先行車両(手前のオブジェクト)と、先行車両のされに先を走行する先行車両(奥のオブジェクト)とを分離することができる。
なお、図37の例の場合、孤立領域の左下に縦に長い領域が分離される。しかし、分離された縦に長い領域は、幅が細いため、孤立領域検出部50は、ノイズとして処理する。また、図37の例は、先行車両が左隣の車線を走行している例であったが、先行車両が右隣の車線を走行している場合は、孤立領域の頻度マップは、図32の例を左右反転した分布となる。
自車両の走行車線の隣の車線の遠方を複数の先行車両が走行している場合、撮像画像から得られる視差の分散が大きいため、レイヤUマップ上では、各オブジェクトの視差が上下に伸びて連結し、一つのオブジェクトとして誤検出されるおそれがある。しかし、このような縦方向分離処理を行うことで、連結して検出されるオブジェクトを分離して、複数のオブジェクトとして検出できる。すなわち、この例の場合、手前を走る先行車両と、さらに前方を走行する先行車両とを分離して認識できる。
このような縦方向分離処理を行うと、孤立領域検出部50は、図21のフローチャートのステップS143に処理を進め、オブジェクトの縦方向分離を行うことができたか否かを判別する。そして、オブジェクトの縦方向分離を行うことができたと判別した場合(ステップS143:Yes)、さらに分離できる可能性があるため、孤立領域検出部50は、ステップS134に処理を戻し、再度、縦方向分離処理を試みる。これに対して、オブジェクトの縦方向分離を行うことができなかったと判別した場合(ステップS143:No)、孤立領域検出部50は、ステップS139に処理を進め、縦方向分離処理により分離できないオブジェクトを、オブジェクト候補としてRAM15等の記憶部に登録する。
次に、図38のフローチャートに、孤立領域検出部50における上述の孤立領域検出処理の流れ、及び、検出された孤立領域に基づく、分類部51におけるオブジェクト認識処理の流れを示す。図38のフローチャートのステップS111〜ステップS116が、孤立領域検出部50における孤立領域検出処理の流れを示し、ステップS117〜ステップS127が、分類部51におけるオブジェクト認識処理の流れを示している。
なお、この図38のフローチャートの説明において、高さの閾値が60cm〜200cmに設定されたレイヤUマップを「LRUD_H」という。また、高さの閾値が150cm〜200cmに設定されたレイヤUマップを「LRUD_A」という。また、高さの閾値が200cm〜に設定されたレイヤUマップを「LRUD_T」という。
まず、孤立領域検出部50は、ステップS111において、LRUD_Hのデータの二値化処理を行う。次に、孤立領域検出部50は、ステップS112において、二値化されたLRUD_Hに対してラベリング処理を施し、孤立領域の検出を行う。
同様に、孤立領域検出部50は、ステップS113において、LRUD_Aのデータの二値化を行い、ステップS114において、二値化されたLRUD_Aに対してラベリング処理を行い、孤立領域の検出を行う。また、孤立領域検出部50は、ステップS115において、LRUD_Tのデータの二値化処理を行い、ステップS116において、二値化されたLRUD_Tに対してラベリング処理を行い、孤立領域の検出を行う。
LRUD_Aの範囲(150cm〜200cm)は、LRUD_H(60cm〜200cm)の範囲に含まれている。このため、孤立領域検出部50は、LRUD_Aに対する二値化処理及びラベリング処理は、LRUD_Hで検出された孤立領域内に限定して処理を行う。これにより、重複した処理を省略して、二値化処理及びラベリング処理を高速化できる。
ここまでの処理の具体例を説明する。図39は、撮像画像の一例である。この図39に示す撮像画像の場合、奥側に車両85の側面が写っており、手前左側に第1の人グループ86が、手前右側の奥寄りに第2の人グループ87が写っている。また、第2の人グループ87の右側に電柱93が写っている。
車両85は、路面からの実高さが150cm以上200cm未満となっている。第1の人グループ86は、路面からの実高さが150cm未満の子供88、及び、路面からの実高さが150cm以上200cm未満の大人89のグループとなっている。また、第2の人グループ87は、路面からの実高さが150cm以上200cm未満の2人の大人91、92のグループとなっている。電柱93は、路面からの実高さが200cm以上となっている。
閾値が60cm〜200cmに設定されたレイヤUマップに、図39の撮像画像に対応する視差画像を投票すると、図40に示すレイヤUマップとなる。閾値が60cm〜200cmの場合、上述の車両85、第1、第2の人グループ86、87及び電柱93が、それぞれ孤立領域として検出される。すなわち、第1、第2の人グループ86、87は、それぞれ複数の人(子供88、大人89、大人91、大人92)が存在するが、それぞれ連結した一塊の孤立領域として検出される。
これに対して、図41は、閾値が150cm〜200cmに設定されたレイヤUマップに、図39の撮像画像に対応する視差画像を投票したレイヤUマップである。閾値が150cm〜200cmの場合、路面からの実高さが150cm未満の子供88はレイヤUマップ上に投票されない。このため、大人89のみが、孤立領域として検出される。また、第2の人グループ87において、大人91及び大人92は、路面からの高さが150cm以下の部分で接触している場合、大人91及び大人92を、それぞれ二つの孤立領域として検出できる。
また、図42は、閾値が200cm以上に設定されたレイヤUマップに、図39の撮像画像に対応する視差画像を投票したレイヤUマップである。閾値が200cm以上の場合、電柱93のみが孤立領域として検出される。図40〜図42に示す各オブジェクトを重ね合わせると、図43に示すレイヤUマップとなる。左斜線の孤立領域が、閾値が60cm〜200cmに設定されたレイヤUマップから検出される孤立領域である。また、黒塗りの孤立領域が、閾値が150cm〜200cmに設定されたレイヤUマップから検出される孤立領域であり、左斜線の孤立領域が、閾値が200cm以上に設定されたレイヤUマップから検出される孤立領域である。
次に、このような孤立領域の検出処理が完了すると、分類部51が、オブジェクトタイプの分類処理を行う。すなわち、孤立領域の検出処理が完了すると、図38のフローチャートの処理がステップS117に進む。ステップS117では、分類部51が、RAM15等の記憶部に記憶されているオブジェクト情報を参照し、LRUD_Hの孤立領域のオブジェクトの種類及びサイズを検出する。このオブジェクト情報は、表1及び表2に示す情報となっている。具体的には、一例として表1に示すように「幅1100mm未満、高さ2500mm未満、奥行き1000mm未満」のサイズのオブジェクトの種類は、オートバイ及び自転車として規定されている。同様に、「幅1100mm未満、高さ2500mm未満、奥行き1000mm以下」のサイズのオブジェクトの種類は、歩行者として規定されている。
同様に、「幅1700mm未満、高さ1700mm未満、奥行き10000mm未満」のサイズのオブジェクトの種類は、小型車として規定されている。また、「幅1700mm未満、高さ2500mm未満、奥行き10000mm未満」のサイズのオブジェクトの種類は、普通車として規定されている。また、「幅3500mm未満、高さ3500mm未満、奥行き15000mm未満」のサイズのオブジェクトの種類は、トラック車両として規定されている。
また、歩行者の種類のオブジェクトにおいては、例えば表2に示すように「幅1200mm未満、高さ2000mm未満、奥行き1200mm未満」のオブジェクトは、大人の歩行者に規定されている。また、「幅1200mm未満、高さ1500mm未満、奥行き1200mm未満」のオブジェクトは、子供の歩行者に規定されている。また、「幅2500mm未満、高さ1500mm未満、奥行き2500mm未満」のオブジェクトは、付随物がある歩行者に規定されている。
分類部51は、ステップS117において、路面からの実高さが60cm〜200cmの範囲のLRUD_Hの孤立領域は、表2に示した付随物を備えた歩行者サイズ未満であるか否かを判別する。付随物は、例えば図39に示す子供88である。通常、身長150cm〜200cmの範囲の大人89,91、92の孤立領域は、表2に示すように幅が1200mm以下である。これに対して、図39に示した第1の人グループ86のように、付随物である子供と手を繋いでいる大人の歩行者に対応する孤立領域は、表2に示すように幅が2500mm以下となる。
分類部51は、LRUD_H上の孤立領域が、付随物を備えた歩行者サイズ以上であると判別した場合(ステップS117:No)、処理をステップS120及びステップS121に進める。これに対して、LRUD_Hの孤立領域が歩行者サイズ未満であると判別した場合(ステップS117:Yes)、分類部51は、処理をステップS118に進める。
ステップS118では、分類部51が、路面からの実高さが150cm〜200cmの範囲のLRUD_Aに現れている、LRUD_Hの孤立領域に相当する孤立領域のサイズは、表2に示す大人の歩行者サイズ以上であるか否かを判別する。図39に示す第1の人グループ86の子供88が身長150cm未満である場合(ステップS118:No)、図41に示すように路面からの実高さが150cm〜200cmの範囲のLRUD_Aには現れない。分類部51は、この場合、ステップS122に処理を進める。そして、分類部51は、歩行者サイズであり、かつ、LRUD_Aには現れない孤立領域のオブジェクトを、ステップS122において、身長150cm未満の子供の歩行者とするオブジェクトタイプの分類を行い、この分類情報を、孤立領域のオブジェクトに関連付けて、例えばRAM15等の記憶部に一旦登録する。
また、LRUD_Aに現れている、LRUD_Hの孤立領域に相当する孤立領域のサイズは、表2に示す大人の歩行者サイズ以上と判別した場合(ステップS118:Yes)、分類部51は、ステップS119に処理を進める。ステップS119では、分類部51が、例えば図40に示す路面からの実高さが60cm〜200cmの範囲のLRUD_Hに現れている各孤立領域と、図42に示す路面からの実高さが200cm以上の範囲のLRUD_Tに現れている各孤立領域とを比較する。そして、分類部51は、LRUD_Hに現れている各孤立領域及びLRUD_Tに現れている各孤立領域で、位置が一致する孤立領域を検出する。
例えば、図42に示す電柱93は、図40に示すLRUD_H上の孤立領域の位置と、図42に示すLRUD_T上の孤立領域の位置とが一致する(ステップS119:Yes)。このため、分類部51は、ステップS123において、LRUD_H上の孤立領域のオブジェクトを、例えば電柱93等の200cm以上のオブジェクトとするオブジェクトタイプの分類を行い、例えばRAM15等の記憶部に一旦登録する。
これに対して、LRUD_Hに現れている孤立領域の位置と、LRUD_Tに現れている孤立領域の位置とが不一致ということは(ステップS119:No)、LRUD_Hに現れている孤立領域は、例えば図41に示す大人89、91、92のように、150cm〜200cmの範囲のオブジェクトであることを意味する。このため、分類部51は、ステップS124において、LRUD_H上のオブジェクトを、身長150cm以上の人間とするオブジェクトタイプの分類を行い、例えばRAM15等の記憶部に一旦登録する。
一方、ステップS117で、LRUD_Hの孤立領域は、表1に示した付随物を備えた歩行者サイズ以上と判別することで、処理をステップS120に進めると、分類部51は、LRUD_H上で付随物を備えた歩行者サイズ以上のサイズと判別した孤立領域に相当するLRUD_A上の孤立領域は、表2に示す大人の歩行者サイズであるか否かを判別する。付随物を備えた歩行者の場合、子供の身長が150cm未満の場合、LRUD_A上には、身長が150cm以上の大人89の孤立領域のみが現れる。このため、分類部51は、LRUD_Hの孤立領域が付随物を備えた歩行者サイズ以上、かつ、対応するLRUD_A上の孤立領域が、大人の歩行者サイズである場合(ステップS120:Yes)、ステップS125において、LRUD_A上の孤立領域は、付随物を所持している歩行者として分類し、例えばRAM15等の記憶部に一旦登録する。
また、ステップS117で、LRUD_Hの孤立領域は、付随物を備えた歩行者サイズ以上であると判別することで(ステップS120:No)、処理をステップS121に進めると、分類部51は、LRUD_Aの孤立領域は、表2に示す子供の歩行者サイズ未満か否かを判別する。子供の歩行者サイズ未満であると判別した場合(ステップS121:Yes)、分類部51は、ステップS126に処理を進める。そして、分類部51は、ステップS126において、LRUD_Aの孤立領域は、例えばガードレール等の背が低く長いオブジェクトとするオブジェクトタイプの分類を行い、RAM15等の記憶部に一旦登録する。これに対して、子供の歩行者サイズ以上であると判別した場合(ステップS121:No)、分類部51は、ステップS127に処理を進め、LRUD_Aの孤立領域は、自転車、オートバイ、自動車、バス又はトラック等の人以上のサイズのオブジェクトとするオブジェクトタイプの分類を行い、RAM15等の記憶部に一旦登録する。
このように分類部51は、各レイヤUマップにおける孤立領域の分布に基づいて、各孤立領域に対応するオブジェクトタイプを分類する。
このようなオブジェクト分類動作の流れを再度説明すると、例えば図39に示す第1の人グループ86の場合、路面からの実高さが60cm〜200cmの範囲のレイヤUマップ(LRUD_H)において、図40に示すように歩行者サイズ以上の孤立領域として現れる。しかし、第1の人グループ86の場合、路面からの実高さが150cm〜200cmの範囲のレイヤUマップ上(LRUD_A)では、図41に示すように大人の歩行者サイズの孤立領域として現れる。このため、分類部51は、LRUD_H上の孤立領域において、人サイズより大きいサイズの孤立領域であり、LRUD_A上において、人サイズとなる孤立領域を、付随物を所持している歩行者として登録する(ステップS125)。
一方、図39に示す第2の人グループ87の場合、LRUD_H上では、人サイズより大きなサイズの1つの孤立領域が、LRUD_A上では、人サイズとなる2つの孤立領域となる。このため、2つの孤立領域は、150cm以上のサイズの大人の歩行者としてそれぞれ登録される。車両は、LRUD_H及びLRUD_Aの双方において、人サイズより大きい孤立領域として検出されるため、人サイズ以上のオブジェクトとして登録される。また、図39に示す電柱93は、LRUD_H及びLRUD_Aの双方において、人サイズとなるが、200cm以上の範囲のレイヤUマップ(LRUD_T)上にも、孤立領域として存在するため、2m以上の高さをもつオブジェクトとして登録する。このようにレイヤUマップ内で検出された孤立領域を立体物候補として、それぞれのサイズや各レイヤ間(LRUD_H〜LRUD_T間)での対応関係からオブジェクトタイプを分類し、RAM15等に登録する。
すなわち、視差画像中におけるオブジェクトの実幅及び実高は、以下の数式で算出できる。
実幅=オブジェクトまでの距離×(視差画像におけるオブジェクト領域の幅)/f
実高=オブジェクトまでの距離×(視差画像におけるオブジェクト領域の高さ)/f
また、レイヤUマップの矩形領域の最小視差dminと最大視差dmaxから、オブジェクトの奥行きも、以下の数式で算出できる。
奥行き=BF×(1/(dmin−offset)−1/(dmax−offset))
分類部51は、これらの情報に基づいて、例えば表1に示す歩行者、自転車、小型車、トラック等のオブジェクトタイプの分類を行う。
次に、レイヤUマップで検出した孤立領域を囲む矩形の幅は、検出したオブジェクトの幅、高さは検出したオブジェクトの奥行きに相当する。また、オブジェクトの高さは、レイヤUマップの高さの最大値である。図4に示す対応領域検出部52は、オブジェクトの正確な位置及び高さを検出するために、レイヤUマップで検出した孤立領域に対応する視差画像の対応領域を検出する。
すなわち、レイヤUマップで検出した孤立領域の位置、幅及び最小視差から、視差画像で検出すべき範囲(xmin、xmax)を決定できる。また、視差画像において、オブジェクトの高さ及び位置(ymin=最大視差dmaxの時の路面からの最大高さに相当するy座標から、ymax=最大視差dmaxから得られる路面の高さを示すyまで)を決定できる。対応領域検出部52は、オブジェクトの正確な位置を検出するため、設定した画像領域を走査し、孤立領域検出した矩形の奥行き(最小視差dmin、最大視差dmax)の範囲の値を視差に持つ画素を候補画素として抽出する。そして、対応領域検出部52は、抽出した候補画素群の中で、検出幅に対して横方向に所定の割合以上存在するラインを候補ラインとする。
候補ラインが存在する領域は、例えば図44に示すように、車両77、79を囲む矩形111、112となる。次に、対応領域検出部52は、縦方向走査を行い、注目しているラインの周囲に候補ラインが所定の密度以上存在する場合に、その注目ラインをオブジェクトラインとして検出する。
次に、図4に示す領域抽出部53は、視差画像の探索領域でオブジェクトラインを検出し、オブジェクトラインの最下端及び最上端を決定する。そして、領域抽出部53は、図45に示すようにオブジェクトライン群の外接矩形111、112を視差画像におけるオブジェクト領域として決定する。
図46のフローチャートに、対応領域検出部52及び領域抽出部53における、視差画像の対応領域検出処理の流れを示す。まず、ステップS171において、対応領域検出部52が、レイヤUマップの孤立領域の位置、幅及び最小視差から、視差画像内のxの探索範囲を決定する。次にステップS172において、対応領域検出部52が、孤立領域の最大視差dmax及び路面高さの関係から、y方向の最大探索値ymaxを求める。次に、ステップS173では、対応領域検出部52が、レイヤUマップの孤立領域の最大高さ、ymax及びdmaxから、最小探索値yminを求める。
次に、対応領域検出部52は、ステップS174において、設定した探索範囲で視差画像を探索し、孤立領域の最小視差dminから最大視差dmaxの範囲内にある画素を抽出し、オブジェクト候補画素とする。ステップS175では、対応領域検出部52が、オブジェクト候補画素が横方向に一定の割合以上存在するラインを、オブジェクト候補ラインとして抽出する。ステップS176では、対応領域検出部52が、オブジェクト候補ラインの密度を計算し、所定の値より大きい密度のラインを、オブジェクトラインと決定する。ステップS177では、領域抽出部53が、オブジェクトライン群の外接矩形を視差画像内のオブジェクト領域として検出する。
次に、図4に示す3次元位置決定部54は、視差の情報からオブジェクトまでの距離、視差画像の画像中心と視差画像上のオブジェクトの領域中心までの画像上の距離に基づいて、オブジェクトの3次元位置を決定する。具体的には、3次元位置決定部54は、視差画像上のオブジェクトの領域の中心座標を(region_centerX、region_centerY)とし、視差画像の画像中心座標を(image_centerX、image_centerY)とし、オブジェクトの撮像ユニット2に対する相対的な横位置及び高さ位置を、以下の数式の演算を行うことで算出する。
横位置=Z×(region_centerX−image_centerX)/f
高さ位置=Z×(region_centerY−image_centerY)/f
以上の説明から明らかなように、実施の形態の移動体制御システムは、オブジェクトの路面からの高さ情報に基づく層構造で、複数のレイヤUマップを作成する。換言すると、実施の形態の移動体制御システムは、撮像ユニット2から得られた視差画像上の視差点を路面からの実高さに基づいて、それぞれ異なる高さに設定された層構造のレイヤUマップに視差画像内の視差点を投票し、各レイヤUマップ内の2次元平面でグルーピング処理を行い、それぞれの結果を用いてグルーピング結果の統合又は分離を行う。
路面検出処理の誤検出、視差補間処理の副作用又は視差の分散の影響により、レイヤUマップからオブジェクトを検出する際、複数のオブジェクトが連結されて一つのオブジェクトとして誤検出する不都合を生じていた。
しかし、実施の形態の移動体制御システムの場合、路面からの実高さ情報を用いているため、連結されたオブジェクトを分割し、個々のオブジェクトとして正しい大きさ、位置及び距離で検出できる。これにより、高精度かつ高速なオブジェクト検出を行うことができる。特に、人間は、精度良く検出できる。従って、車載ステレオカメラ(撮像ユニット2)を利用して、高精度の車両制御を行うことができる。
上述の実施の形態は、例として提示したものであり、本発明の範囲を限定することは意図していない。この新規な実施の形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことも可能である。実施の形態および各実施の形態の変形は、発明の範囲や要旨に含まれると共に、特許請求の範囲に記載された発明とその均等の範囲に含まれる。