以下に、図1〜図33を参照しながら、本発明に係る画像処理装置、物体認識装置、機器制御システム、移動体、画像処理方法およびプログラムの実施形態を詳細に説明する。また、以下の実施形態によって本発明が限定されるものではなく、以下の実施形態における構成要素には、当業者が容易に想到できるもの、実質的に同一のもの、およびいわゆる均等の範囲のものが含まれる。さらに、以下の実施形態の要旨を逸脱しない範囲で構成要素の種々の省略、置換、変更および組み合わせを行うことができる。
[第1の実施形態]
(物体認識装置を備えた車両の概略構成)
図1は、第1の実施形態に係る機器制御システムを車両に搭載した例を示す図である。図1を参照しながら、本実施形態の機器制御システム60が車両70に搭載される場合を例に説明する。
図1のうち、図1(a)は、機器制御システム60を搭載した車両70の側面図であり、図1(b)は、車両70の正面図である。
図1に示すように、自動車である車両70は、機器制御システム60を搭載している。機器制御システム60は、車両70の居室空間である車室に設置された物体認識装置1と、車両制御装置6(制御装置)と、ステアリングホイール7と、ブレーキペダル8と、を備えている。
物体認識装置1は、車両70の進行方向を撮像する撮像機能を有し、例えば、車両70のフロントウィンドウ内側のバックミラー近傍に設置される。物体認識装置1は、構成および動作の詳細は後述するが、本体部2と、本体部2に固定された撮像部10aと、撮像部10bとを備えている。撮像部10a、10bは、車両70の進行方向の被写体を撮像できるように本体部2に固定されている。
車両制御装置6は、物体認識装置1から受信した認識情報に基づいて、各種車両制御を実行するECU(Electronic Control Unit)である。車両制御装置6は、車両制御の例として、物体認識装置1から受信した認識情報に基づいて、ステアリングホイール7を含むステアリング系統(制御対象)を制御して障害物を回避するステアリング制御、または、ブレーキペダル8(制御対象)を制御して車両70を減速および停止させるブレーキ制御等を実行する。
このような物体認識装置1および車両制御装置6を含む機器制御システム60のように、ステアリング制御またはブレーキ制御等の車両制御が実行されることによって、車両70の運転の安全性を向上することができる。
なお、上述のように、物体認識装置1は、車両70の前方を撮像するものとしたが、これに限定されるものではない。すなわち、物体認識装置1は、車両70の後方または側方を撮像するように設置されるものとしてもよい。この場合、物体認識装置1は、車両70の後方の後続車および人、または側方の他の車両および人等の位置を検出することができる。そして、車両制御装置6は、車両70の車線変更時または車線合流時等における危険を検知して、上述の車両制御を実行することができる。また、車両制御装置6は、車両70の駐車時等におけるバック動作において、物体認識装置1によって出力された車両70の後方の障害物についての認識情報に基づいて、衝突の危険があると判断した場合に、上述の車両制御を実行することができる。
(物体認識装置の構成)
図2は、第1の実施形態に係る物体認識装置の外観の一例を示す図である。図2に示すように、物体認識装置1は、上述のように、本体部2と、本体部2に固定された撮像部10aと、撮像部10bとを備えている。撮像部10a、10bは、本体部2に対して平行等位に配置された一対の円筒形状のカメラで構成されている。また、説明の便宜上、図2に示す撮像部10aを右のカメラと称し、撮像部10bを左のカメラと称する場合がある。
<物体認識装置のハードウェア構成>
図3は、第1の実施形態に係る物体認識装置のハードウェア構成の一例を示す図である。図3を参照しながら、物体認識装置1のハードウェア構成について説明する。
図3に示すように、物体認識装置1は、本体部2内に視差値導出部3および認識処理部5を備えている。
視差値導出部3は、物体を撮像して得られた複数の画像から、物体に対する視差を示す視差値dpを導出し、各画素の画素値として視差値dp(距離値の一例)を示す視差画像(距離画像の一例)を出力する装置である。認識処理部5は、視差値導出部3から出力された視差画像に基づいて、撮像画像に写り込んでいる人および車等の物体に対する物体認識処理等を行い、物体認識処理の結果を示す情報である認識情報を、車両制御装置6に出力する装置である。なお、視差画像および撮像画像等の画像には、ディスプレイ等の表示を伴わない単なる情報の集合体の概念も含むものとする。
図3に示すように、視差値導出部3は、撮像部10aと、撮像部10bと、信号変換部20aと、信号変換部20bと、画像処理部30と、を備えている。
撮像部10aは、前方の被写体を撮像してアナログの画像信号を生成する処理部である。撮像部10aは、撮像レンズ11aと、絞り12aと、画像センサ13aと、を備えている。
撮像レンズ11aは、入射する光を屈折させて物体の像を画像センサ13aに結像させるための光学素子である。絞り12aは、撮像レンズ11aを通過した光の一部を遮ることによって、画像センサ13aに入力する光の量を調整する部材である。画像センサ13aは、撮像レンズ11aに入射し、絞り12aを通過した光を電気的なアナログの画像信号に変換する半導体素子である。画像センサ13aは、例えば、CCD(Charge Coupled Devices)またはCMOS(Complementary Metal Oxide Semiconductor)等の固体撮像素子によって実現される。
撮像部10bは、前方の被写体を撮像してアナログの画像信号を生成する処理部である。撮像部10bは、撮像レンズ11bと、絞り12bと、画像センサ13bと、を備えている。なお、撮像レンズ11b、絞り12bおよび画像センサ13bの機能は、それぞれ上述した撮像レンズ11a、絞り12aおよび画像センサ13aの機能と同様である。また、撮像レンズ11aおよび撮像レンズ11bは、左右のカメラが同一の条件で撮像されるように、それぞれのレンズの主面が互いに同一平面上にあるように設置されている。
信号変換部20aは、撮像部10aにより生成されたアナログの画像信号を、デジタル形式の画像データに変換する処理部である。信号変換部20aは、CDS(Correlated Double Sampling)21aと、AGC(Auto Gain Control)22aと、ADC(Analog Digital Converter)23aと、フレームメモリ24aと、を備えている。
CDS21aは、画像センサ13aにより生成されたアナログの画像信号に対して、相関二重サンプリング、横方向の微分フィルタ、または縦方向の平滑フィルタ等によりノイズを除去する。AGC22aは、CDS21aによってノイズが除去されたアナログの画像信号の強度を制御する利得制御を行う。ADC23aは、AGC22aによって利得制御されたアナログの画像信号をデジタル形式の画像データに変換する。フレームメモリ24aは、ADC23aによって変換された画像データを記憶する。
信号変換部20bは、撮像部10bにより生成されたアナログの画像信号を、デジタル形式の画像データに変換する処理部である。信号変換部20bは、CDS21bと、AGC22bと、ADC23bと、フレームメモリ24bと、を備えている。なお、CDS21b、AGC22b、ADC23bおよびフレームメモリ24bの機能は、それぞれ上述したCDS21a、AGC22a、ADC23aおよびフレームメモリ24aの機能と同様である。
画像処理部30は、信号変換部20aおよび信号変換部20bによって変換された画像データに対して画像処理を行う装置である。画像処理部30は、FPGA(Field Programmable Gate Array)31と、CPU(Central Processing Unit)32と、ROM(Read Only Memory)33と、RAM(Random Access Memory)34と、I/F(Interface)35と、バスライン39と、を備えている。
FPGA31は、集積回路であり、ここでは、画像データに基づく画像における視差値dpを導出する処理を行う。CPU32は、視差値導出部3の各機能を制御する。ROM33は、CPU32が視差値導出部3の各機能を制御するために実行する画像処理用プログラムを記憶している。RAM34は、CPU32のワークエリアとして使用される。I/F35は、認識処理部5におけるI/F55と、通信線4とを介して通信するためのインターフェースである。バスライン39は、図3に示すように、FPGA31、CPU32、ROM33、RAM34およびI/F35が互いに通信可能となるように接続するアドレスバスおよびデータバス等である。
なお、画像処理部30は、視差値dpを導出する集積回路としてFPGA31を備えるものとしているが、これに限定されるものではなく、ASIC(Application Specific Integrated Circuit)等のその他の集積回路であってもよい。
図3に示すように、認識処理部5は、FPGA51と、CPU52と、ROM53と、RAM54と、I/F55と、CAN(Controller Area Network)I/F58と、バスライン59と、を備えている。
FPGA51は、集積回路であり、ここでは、画像処理部30から受信した視差画像に基づいて、物体に対する物体認識処理を行う。CPU52は、認識処理部5の各機能を制御する。ROM53は、CPU52が認識処理部5の物体認識処理を実行する物体認識処理用プログラムを記憶している。RAM54は、CPU52のワークエリアとして使用される。I/F55は、画像処理部30のI/F35と、通信線4とを介してデータ通信するためのインターフェースである。CANI/F58は、外部コントローラ(例えば、図3に示す車両制御装置6)と通信するためのインターフェースであり、例えば、自動車のCAN等に接続されるバスライン59は、図3に示すように、FPGA51、CPU52、ROM53、RAM54、I/F55およびCANI/F58が互いに通信可能となるように接続するアドレスバスおよびデータバス等である。
なお、認識処理部5は、物体認識処理を行う集積回路としてFPGA51を備えるものとしているが、これに限定されるものではなく、ASIC等のその他の集積回路であってもよい。
このような構成により、画像処理部30のI/F35から通信線4を介して認識処理部5に視差画像が送信されると、認識処理部5におけるCPU52の命令によって、FPGA51が、視差画像に基づいて、撮像画像に写り込んでいる人および車等の物体の物体認識処理等を実行する。
なお、上述の各プログラムは、インストール可能な形式または実行可能な形式のファイルで、コンピュータで読み取り可能な記録媒体に記録して流通させてもよい。この記録媒体は、CD−ROM(Compact Disc Read Only Memory)またはSD(Secure Digital)メモリカード等である。
また、図3に示すように、視差値導出部3の画像処理部30と、認識処理部5とは別体の装置としているが、これに限定されるものではなく、例えば、画像処理部30と認識処理部5とを同一の装置として、視差画像の生成、および物体認識処理を行うものとしてもよい。また、図3に示す物体認識装置1のハードウェア構成は一例であって、これに限定されるものではなく、上述と同様の機能を実現するハードウェア回路によって実現されてもよい。
<測距の原理>
図4は、撮像部から物体までの距離を導き出す原理を説明する図である。図4を参照しながら、ステレオマッチング処理により、ステレオカメラから物体に対する視差を導出し、この視差を示す視差値によって、ステレオカメラから物体までの距離を測定する原理について説明する。
図4に示す撮像システムは、平行等位に配置された撮像部10aと撮像部10bとを有するものとする。撮像部10a、10bは、それぞれ、入射する光を屈折させて物体の像を固体撮像素子である画像センサに結像させる撮像レンズ11a、11bを有する。撮像部10aおよび撮像部10bによって撮像された各画像を、それぞれ基準画像Iaおよび比較画像Ibとする。図4において、3次元空間内の物体E上の点Sは、基準画像Iaおよび比較画像Ibそれぞれにおいて、撮像レンズ11aと撮像レンズ11bとを結ぶ直線と平行な直線上の位置に写像される。ここで、各画像に写像された点Sを、基準画像Iaにおいて点Sa(x,y)とし、比較画像Ibにおいて点Sb(X,y)とする。このとき、視差値dpは、基準画像Ia上の座標における点Sa(x,y)と比較画像Ib上の座標における点Sb(X,y)とを用いて、以下の(式1)のように表される。
dp=X−x ・・・(式1)
また、図4において、基準画像Iaにおける点Sa(x,y)と撮像レンズ11aから撮像面上におろした垂線の交点との距離をΔaとし、比較画像Ibにおける点Sb(X,y)と撮像レンズ11bから撮像面上におろした垂線の交点との距離をΔbとすると、視差値dpは、dp=Δa+Δbと表すこともできる。
次に、視差値dpを用いることにより、撮像部10a、10bと物体Eとの間の距離Zを導出する。ここで、距離Zは、撮像レンズ11aの焦点位置と撮像レンズ11bの焦点位置とを結ぶ直線から物体E上の点Sまでの距離である。図4に示すように、撮像レンズ11aおよび撮像レンズ11bの焦点距離f、撮像レンズ11aと撮像レンズ11bとの間の長さである基線長B、および視差値dpを用いて、下記の(式2)により、距離Zを算出することができる。
Z=(B×f)/dp ・・・(式2)
この(式2)により、視差値dpが大きいほど距離Zは小さく、視差値dpが小さいほど距離Zは大きくなることがわかる。
<ブロックマッチング処理>
図5は、基準画像における基準画素に対応する比較画像における対応画素を求める場合の説明図である。図6は、ブロックマッチング処理の結果のグラフの一例を示す図である。図5および図6を参照しながら、ブロックマッチング処理による測距方法について説明する。
図5および図6を参照しながら、コスト値C(p,d)の算出方法について説明する。なお、以降、C(p,d)は、C(x,y,d)を表すものとして説明する。
図5のうち、図5(a)は、基準画像Iaにおける基準画素pおよび基準領域pbを示す概念図を示し、図5(b)は、図5(a)に示す基準画素pに対応する比較画像Ibにおける対応画素の候補を順次シフトしながら(ずらしながら)、コスト値Cを算出する際の概念図である。ここで、対応画素とは、基準画像Iaにおける基準画素pに最も類似する比較画像Ibにおける画素を示す。また、コスト値Cとは、基準画像Iaにおける基準画素pに対する、比較画像Ibにおける各画素の類似度または非類似度を表す評価値(一致度)である。以下に示すコスト値Cは、値が小さいほど、比較画像Ibにおける画素が基準画素pと類似していることを示す非類似度を表す評価値であるものとして説明する。
図5(a)に示すように、基準画像Iaにおける基準画素p(x,y)、および、基準画素p(x,y)に対する比較画像Ibにおけるエピポーラ線EL上の対応画素の候補である候補画素q(x+d,y)の各輝度値(画素値)に基づいて、基準画素p(x,y)に対する対応画素の候補である候補画素q(x+d,y)のコスト値C(p,d)が算出される。dは、基準画素pと候補画素qとのシフト量(ずれ量)であり、シフト量dは、画素単位でシフトされる。すなわち、候補画素q(x+d,y)を予め指定された範囲(例えば、0<d<25)において順次一画素分シフトしながら、候補画素q(x+d,y)と基準画素p(x,y)との輝度値の非類似度であるコスト値C(p,d)が算出される。また、基準画素pの対応画素を求めるためのステレオマッチング処理として、本実施形態ではブロックマッチング処理を行う。ブロックマッチング処理では、基準画像Iaの基準画素pを中心とする所定領域である基準領域pbと、比較画像Ibの候補画素qを中心とする候補領域qb(大きさは基準領域pbと同一)との非類似度を求める。基準領域pbと候補領域qbとの非類似度を示すコスト値Cとしては、SAD(Sum of Absolute Difference)、SSD(Sum of Squared Difference)、または、SSDの値から各ブロックの平均値を減算したZSSD(Zero−mean−Sum of Squared Difference)等が用いられる。これらの評価値は、相関が高い(類似の度合いが高い)ほど、値が小さくなるので非類似度を示す。
なお、上述のように、撮像部10a、10bは、それぞれ平行等位に配置されるため、基準画像Iaおよび比較画像Ibも、それぞれ平行等位の関係にある。したがって、基準画像Iaにおける基準画素pに対応する比較画像Ibにおける対応画素は、図5に紙面視横方向の線として示されるエピポーラ線EL上に存在することになり、比較画像Ibにおける対応画素を求めるためには、比較画像Ibのエピポーラ線EL上の画素を探索すればよい。
このようなブロックマッチング処理で算出されたコスト値C(p,d)は、シフト量dとの関係で、例えば、図6に示すグラフにより表される。図6の例では、コスト値Cは、シフト量d=7の場合が最小値となるため、視差値dp=7として導出される。
<物体認識装置の機能ブロックの構成および動作>
図7は、第1の実施形態に係る物体認識装置の機能ブロック構成の一例を示す図である。図8は、視差画像から生成されるVマップの一例を示す図である。図9は、平坦な路面の場合のVマップの一例を示す図である。図10は、上り坂に差し掛かる場合のVマップの一例を示す図である。図11は、下り坂に差し掛かる場合のVマップの一例を示す図である。図12は、視差画像から生成されるUマップの一例を示す図である。図7〜図12を参照しながら、物体認識装置1の要部の機能ブロックの構成および動作について説明する。
図3でも上述したが、図7に示すように、物体認識装置1は、視差値導出部3と、認識処理部5と、を備えている。このうち、視差値導出部3は、画像取得部100a(第1撮像部)、画像取得部100b(第2撮像部)と、変換部200a、200bと、視差値演算処理部300と、を有する。
画像取得部100aは、右のカメラにより前方の被写体を撮像して、アナログの画像信号を生成し、画像信号に基づく画像である輝度画像を得る機能部である。画像取得部100aは、図3に示す撮像部10aによって実現される。
画像取得部100bは、左のカメラにより前方の被写体を撮像して、アナログの画像信号を生成し、画像信号に基づく画像である輝度画像を得る機能部である。画像取得部100bは、図3に示す撮像部10bによって実現される。
変換部200aは、画像取得部100aにより得られた輝度画像の画像データに対して、ノイズを除去し、デジタル形式の画像データに変換して出力する機能部である。変換部200aは、図3に示す信号変換部20aによって実現される。
変換部200bは、画像取得部100bにより得られた輝度画像の画像データに対して、ノイズを除去し、デジタル形式の画像データに変換して出力する機能部である。変換部200bは、図3に示す信号変換部20bによって実現される。
ここで、変換部200a、200bが出力する2つの輝度画像の画像データ(以下、単に、輝度画像と称する)のうち、右のカメラ(撮像部10a)である画像取得部100aにより撮像された輝度画像を基準画像Iaの画像データ(以下、単に、基準画像Iaと称する)(第1撮像画像)とし、左のカメラ(撮像部10b)である画像取得部100bにより撮像された輝度画像を比較画像Ibの画像データ(以下、単に、比較画像Ibと称する)(第2撮像画像)とする。すなわち、変換部200a、200bは、画像取得部100a、100bそれぞれから出力された2つの輝度画像に基づいて、それぞれ基準画像Iaおよび比較画像Ibを出力する。
視差値演算処理部300は、変換部200a、200bそれぞれから受信した基準画像Iaおよび比較画像Ibに基づいて、基準画像Iaの各画素についての視差値を導出し、基準画像Iaの各画素に視差値を対応させた視差画像を生成する機能部である。視差値演算処理部300は、生成した視差画像を、認識処理部5に出力する。
図7に示すように、認識処理部5は、路面推定部400と、クラスタリング部450と、棄却部500と、トラッキング判定部550と、を有する。
路面推定部400は、視差値演算処理部300から受信した視差画像の各画素値(視差値)をVマップの対応する座標の視差点に対して投票することによって最終的なVマップを生成し、Vマップにおける投票された視差点から標本点を選択し、選択された標本点群に対して直線近似(または、曲線近似)することで路面形状を推定する機能部である。ここで、図8(a)は、視差値演算処理部300から出力される視差画像Ipを示し、図8(b)は、路面推定部400により視差画像Ipから生成されるVマップVMを示す。図8(b)に示すように、VマップVMの縦軸は視差画像Ipのy座標に対応し、横軸は視差値dpに対応している。VマップVMの生成時においては、所定のy座標における視差画像Ip中の水平ラインに存在する視差値を、VマップVM上のdp座標に投票していくため、VマップVMの各座標の画素値には視差値の頻度が格納される。
図8(a)に示す視差画像Ipには、例えば、路面600と、車601と、が写り込んでいる。この視差画像Ipの路面600は、VマップVMにおいては推定路面600aに対応し、車601は、車部601aに対応する。推定路面600aは、下記のように、VマップVMにおいて路面600に対応する視差点から推定された路面形状である。
また、路面推定部400は、生成したVマップVMから、路面と推定される位置を直線近似する。具体的には、路面推定部400は、VマップVMに対して投票された視差点から、路面形状の推定に必要な代表点である標本点を選択し、それらを最小二乗法等により直線近似することによって、路面形状を推定し推定路面600aを得る。路面が平坦な場合は、1本の直線で近似可能であるが、勾配が変わる路面の場合は、VマップVMの区間を分割して精度よく直線近似する必要がある。また、視差値は、自車に近いほど、値が大きくなるため、視差画像の下方の視差値は上方の視差値に比べて大きな値を有する。したがって、VマップVM上の推定路面600aは、図8(b)に示すように、右下下がり(左上上がり)の形状となる。この時、物体が存在するy座標の範囲(図8に示す水平の破線の間の範囲内)には、物体を表す視差が投票される。物体は路面よりも高い位置に存在しているため、VマップVM上の分布は上下方向に延びる形状をしている。これは、同じ物体であれば物体認識装置1からの距離がほぼ一定となるため、この物体について求められた各視差値同士は互いに近い数値になるためである。なお、路面推定部400の詳細な構成および動作は、図14〜図17および図19で後述する。
VマップVMにおいて、推定された推定路面600aより上方に位置する塊である車部601aは、実際の路面(路面600)上の物体である車601に相当する。後述するクラスタリング部450によりU−Disparityマップが生成される際には、ノイズ除去のため推定された路面より上方の情報のみが用いられる。
次に、推定路面の類型について説明する。すなわち、様々な勾配を有する路面の視差値が、具体的にどのようにVマップ上に分布するかを説明する。まず、図9(a)は、車両が平坦な路面を走行している場合の視差画像Ip1を示し、図9(b)は、視差画像Ip1から生成されたVマップVM1を示している。図9(b)のVマップVM1に示すように、平坦な路面を走行している場合、推定される推定路面ER1は、平坦な路面と仮定した路面(以下、「デフォルト路面」と称する)であるデフォルト路面DRと、ほぼ一致する。
次に、図10(a)は、車両が上り坂に差し掛かる場合の視差画像Ip2を示し、図10(b)は、視差画像Ip2から生成されたVマップVM2を示している。図10(b)のVマップVM2に示すように、推定される上り坂の路面である推定路面ER2は、デフォルト路面DRと比較して上方に存在し、推定路面ER2の開始位置もデフォルト路面DRと比較して右側に存在する。なお、上り坂を走行している場合は、車両は上り坂の路面に対して平行となるため、路面の視差は、平坦な路面を走行している場合と同様となる。
次に、図11(a)は、車両が下り坂に差し掛かる場合の視差画像Ip3を示し、図11(b)は、視差画像Ip3から生成されたVマップVM3を示している。図11(b)のVマップVM3に示すように、推定される下り坂の路面である推定路面ER3は、デフォルト路面DRと比較して下方に存在し、推定路面ER3の開始位置もデフォルト路面DRと比較して左側に存在する。なお、下り坂を走行している場合は、車両は下り坂の路面に対して平行となるため、路面の視差は、平坦な路面を走行している場合と同様となる。
以上のように、推定路面についての典型的な類型を示したが、視差画像中の1水平ラインにおける視差値を評価した際、距離の異なる領域を同時に含むと、Vマップにおいて視差点は横方向(dp座標)に分散してしまう。例えば、視差画像中の1水平ラインに走行路面の領域と、走行路面よりも距離が遠い領域とが含まれる場合、遠い領域の視差値は、走行路面の領域の視差値よりも小さな値をもち、Vマップに対してノイズとして投票されてしまう。そして、これらのノイズとして投票された視差点が、Vマップにおいて路面と同様の分布形状となる場合もあり、このノイズに対応する視差点が、路面の開始位置と誤判定されると、推定路面は、実際の路面と比較して、Vマップ上で低い位置に存在することになる。通常、路面推定では、Vマップの所定の位置から別の位置に向かって路面を推定していく。例えば、近方の路面は、視差画像上に写り込む面積が大きいため、Vマップ上でその路面に対応する視差点の数および頻度が多くなるため、推定される路面の信頼度は高いと仮定できる。したがって、近方の路面から順に遠方の路面を推定していく方法が考えられる。しかし、図9〜図11で上述したように、実際の路面に対応する視差点が分布する位置は各シーンにおいて様々であり、路面推定処理の開始位置を固定することは困難である。また、仮に、近方から遠方に向かって処理していき、遠方でのノイズに対応する視差点を検出して、この位置を路面の開始位置として推定してしまうと、近方に立ち戻って処理することができないため、実際の路面と比較して、Vマップ上で推定路面の位置は低い位置となる可能性がある。以上のように、路面推定処理においては、視差画像に傾斜が異なる路面を含んだり、または、ノイズを含む等の様々なシーンにおいても、正確に路面の開始位置を検出する必要がある。
クラスタリング部450は、視差値導出部3から受信した基準画像(輝度画像)および視差画像、ならびに、路面推定部400により出力されるVマップおよび推定路面の情報に基づいて、視差画像に写っている物体を検出する機能部である。具体的には、クラスタリング部450は、まず、Vマップ上において路面推定部400により推定された推定路面より上方に位置する情報のみを利用、すなわち、例えば、図12(a)に示す視差画像Ipの左ガードレール611、右ガードレール612、車613および車614に対応する情報を利用して、物体を認識するために、図12(b)に示すU−Disparityマップ(以下、単に「Uマップ」と称する場合がある)であるUマップUMを生成する。ここで、U−Disparityマップとは、横軸を視差画像Ipのx軸とし、縦軸を視差画像Ipの視差値dp(または距離)とした、視差値dpの頻度分布を示す二次元ヒストグラムである。図12(a)に示す視差画像Ipの左ガードレール611は、UマップUMにおいては左ガードレール部611aに対応し、右ガードレール612は、右ガードレール部612aに対応し、車613は、車部613aに対応し、車614は、車部614aに対応する。なお、クラスタリング部450は、視差画像IpからReal U−Disparityマップを生成してもよい。ここで、Real U−Disparityマップとは、横軸を、撮像部10b(左のカメラ)から撮像部10a(右のカメラ)へ向かう方向の実距離とし、縦軸を、視差画像の視差値dp(またはその視差値dpから変換した奥行き方向の距離)とした二次元ヒストグラムである。
なお、視差値導出部3からクラスタリング部450に入力される画像は基準画像Iaに限定されるものではなく、比較画像Ibを対象とするものとしてもよい。
クラスタリング部450は、生成したUマップから、物体の視差画像および基準画像Iaにおけるx軸方向の位置および幅(xmin,xmax)を特定できる。また、クラスタリング部450は、生成したUマップでの物体の高さの情報(dmin,dmax)から物体の実際の奥行きを特定できる。また、クラスタリング部450は、受信したVマップから、物体の視差画像および基準画像Iaにおけるy軸方向の位置および高さ(ymin=「最大視差値の路面からの最大高さに相当するy座標」,ymax=「最大視差値から得られる路面の高さを示すy座標」)を特定できる。また、クラスタリング部450は、視差画像において特定した物体のx軸方向の幅(xmin,xmax)、y軸方向の高さ(ymin,ymax)およびそれぞれに対応する視差値dpから、物体の実際のx軸方向およびy軸方向のサイズが特定できる。以上のように、クラスタリング部450は、VマップおよびUマップを利用して、基準画像Iaでの物体の位置、ならびに実際の幅、高さおよび奥行きを特定することができる。また、クラスタリング部450は、基準画像Iaでの物体の位置が特定されるので、視差画像における位置も定まり、物体までの距離も特定できる。
また、クラスタリング部450は、物体について特定した実際のサイズ(幅、高さ、奥行き)から、下記の(表1)を用いて、物体が何であるかを特定することができる。例えば、物体の幅が1300[mm]、高さが1800[mm]、奥行きが2000[mm]である場合、物体は「普通車」であると特定できる。なお、(表1)のような幅、高さおよび奥行きと、物体の種類(物体タイプ)とを関連付ける情報をテーブルとして、RAM54等に記憶させておくものとすればよい。
そして、クラスタリング部450は、検出した物体の画像(認識画像)に関する情報(例えば、基準画像Iaでの位置を示す座標、およびサイズ等)(以下、単に「認識画像情報」と称する)を出力する。
棄却部500は、視差値導出部3から出力された基準画像Ia、およびクラスタリング部450から出力された認識画像情報に基づいて、認識画像情報で示される認識画像について棄却するか否かを判定する棄却判定を行う機能部である。ここで、棄却とは、その物体を後段の処理(追跡処理等)の対象外とする処理を示す。
トラッキング判定部550は、棄却部500からの棄却判定の結果に基づいて、認識画像に含まれる物体に対してトラッキングを行うか否かを判定する機能部である。例えば、トラッキング判定部550は、棄却部500で棄却と判定されなかった物体に対してトラッキングを行うものと判定し、その物体の認識画像情報にトラッキングを行う旨の情報を含め、認識情報として車両制御装置6に出力する。
また、図7に示す認識処理部5の路面推定部400、クラスタリング部450、棄却部500およびトラッキング判定部550は、それぞれ図3に示すFPGA51によって実現される。なお、路面推定部400、クラスタリング部450、棄却部500およびトラッキング判定部550の一部または全部は、ハードウェア回路であるFPGA51ではなく、ROM53に記憶されているプログラムがCPU52によって実行されることによって実現されるものとしてもよい。
なお、本発明に係る「画像処理装置」は、路面推定部400であってもよく、路面推定部400を含む認識処理部5であってもよい。
また、図7に示す視差値導出部3および認識処理部5の各機能部は、機能を概念的に示したものであって、このような構成に限定されるものではない。例えば、図7に示す視差値導出部3および認識処理部5で独立した機能部として図示した複数の機能部を、1つの機能部として構成してもよい。一方、図7に示す視差値導出部3および認識処理部5で1つの機能部が有する機能を複数に分割し、複数の機能部として構成するものとしてもよい。
<<視差値演算処理部の機能ブロック構成>>
図13は、第1の実施形態に係る物体認識装置の視差値演算処理部の機能ブロック構成の一例を示す図である。図13を参照しながら、視差値演算処理部300の機能ブロックの具体的な構成および動作について説明する。
図13に示すように、視差値演算処理部300は、コスト算出部301と、決定部302と、生成部303と、を有する。
コスト算出部301は、基準画像Iaにおける基準画素p(x,y)の輝度値、および、基準画素p(x,y)に基づく比較画像Ibにおけるエピポーラ線EL上で、基準画素p(x,y)の位置に相当する画素からシフト量dでシフトすることにより特定される、対応画素の候補である候補画素q(x+d,y)の各輝度値に基づいて、各候補画素q(x+d,y)のコスト値C(p,d)を算出する機能部である。具体的には、コスト算出部301は、ブロックマッチング処理により、基準画像Iaの基準画素pを中心とする所定領域である基準領域pbと、比較画像Ibの候補画素qを中心とする候補領域qb(大きさは基準領域pbと同一)との非類似度をコスト値Cとして算出する。
決定部302は、コスト算出部301により算出されたコスト値Cの最小値に対応するシフト量dを、コスト値Cの算出の対象となった基準画像Iaの画素についての視差値dpとして決定する機能部である。
生成部303は、決定部302により決定された視差値dpに基づいて、基準画像Iaの各画素の画素値を、その画素に対応する視差値dpで置き換えた画像である視差画像を生成する機能部である。
図13に示すコスト算出部301、決定部302および生成部303は、それぞれ図3に示すFPGA31によって実現される。なお、コスト算出部301、決定部302および生成部303の一部または全部は、ハードウェア回路であるFPGA31ではなく、ROM33に記憶されているプログラムがCPU32によって実行されることによって実現されるものとしてもよい。
なお、図13に示す視差値演算処理部300のコスト算出部301、決定部302および生成部303は、機能を概念的に示したものであって、このような構成に限定されるものではない。例えば、図13に示す視差値演算処理部300で独立した機能部として図示した複数の機能部を、1つの機能部として構成してもよい。一方、図13に示す視差値演算処理部300で1つの機能部が有する機能を複数に分割し、複数の機能部として構成するものとしてもよい。
<<路面推定部の機能ブロック構成>>
図14は、第1の実施形態に係る物体認識装置の路面推定部の機能ブロック構成の一例を示す図である。図15は、Vマップの生成動作を説明する図である。図16は、Vマップにおいてセグメントに分割する動作を説明する図である。図17は、第1の実施形態の開始セグメント探索処理を説明する図である。図14〜図17を参照しながら、路面推定部400の機能ブロックの具体的な構成および動作について説明する。
図14に示すように、路面推定部400は、入力部401と、Vマップ生成部402と、分割部403と、開始セグメント探索部404と、継続推定部405と、スムージング部406と、出力部407と、を有する。
入力部401は、視差値演算処理部300から視差画像を入力する機能部である。
Vマップ生成部402は、入力部401により入力された視差画像の各視差画素の視差値を、Vマップの対応する視差点に投票することによってVマップを生成する機能部である。Vマップ生成部402によるVマップの生成において、視差画像のy座標とVマップのy座標とは対応関係にあり、視差画像の特定のy座標の水平ライン上の視差値は、Vマップの対応するy座標の水平ラインのいずれかの視差点に投票される。したがって、視差画像の同じ水平ラインに含まれる視差値は同値となるものも存在するため、Vマップの任意の座標の視差点には、視差値の頻度が格納されることになる。視差画像の特定の水平ラインにおいては、同じ路面であれば、視差値は互いに類似する値となるため、Vマップにおける路面に対応する視差点は密集して投票されることになる。
なお、Vマップ生成部402は、視差画像中の全ての視差画素の視差値をVマップに投票してもよいが、図15に示す視差画像Ipのように、所定の領域(例えば、図15に示す投票領域701〜703)を設定し、その領域に含まれる視差画素の視差値のみを投票するものとしてもよい。例えば、路面は遠方になるにつれて、消失点に向かって狭くなっていくという性質を利用し、図15に示すように、路面の幅にあった投票領域を所定数設定する方法が考えられる。このように投票領域に制限することによって、路面以外のノイズがVマップに混入することを抑制することができる。
また、視差画像中の1水平ラインにおける視差画素を適宜間引いて投票するものとしてもよい。また、間引きに関しては、水平方向だけではなく、垂直方向に対して実行してもよい。
分割部403は、Vマップ生成部402により生成されたVマップを、dp座標(横座標)において、1以上の部分領域であるセグメントに分割する機能部である。分割部403によって分割されたセグメントごとに路面形状の推定が行われる。このようにセグメントを分割することで、より複雑な形状(例えば、平坦な路面から途中で上り坂または下り坂になるような路面形状等)の路面を推定することができる。なお、セグメントをより細かくすることによって、より複雑な形状の路面を推定することが可能になる。ここで、図16に、複数のセグメントに分割されたVマップの一例を示す。
なお、図16に示す例では、y座標においては分割していないが、y座標においてもセグメントに分割してもよい。例えば、Vマップにおいて、路面に対応する視差点が分布する位置が特定できる場合、y方向でセグメントに分割することにより、dp方向だけでセグメントに分割した場合よりも限定した領域内を処理することができる。これによって、ノイズの混入を抑制する効果が向上し、かつ、路面推定処理の処理時間の短縮に寄与する。なお、本実施形態においては、セグメントは、図16に示すようにdp方向でのみ分割した短冊状の部分領域であるものとして説明する。
開始セグメント探索部404は、分割部403によって分割されたセグメントから、車両70が走行している路面の開始位置を含むセグメント、すなわち、視差画像に写っている路面のうち物体認識装置1を搭載した車両70に最も近い路面部分を含むセグメントである開始セグメントを探索する開始セグメント探索処理を行う機能部である。この開始セグメント探索処理で探索する開始セグメントは、Vマップ上での路面推定時に基準となる路面を含むセグメントを示し、通常、路面推定は近方から遠方に向かって実行されるため、Vマップに含まれる最も近方の路面を含むセグメントに該当する。
ここで、開始セグメント探索処理の詳細について説明する。Vマップを所定数のセグメントに分割した場合、通常、路面の推定では、所定のセグメントに対して実施し、そのセグメントの路面の推定結果に基づいて次のセグメントにおける路面の推定を行う。これは、路面が連続していることによる必然的な処理手順である。例えば、近方の路面から遠方の路面に向けて順に推定していく。すなわち、路面推定処理において路面の開始位置を適切に検出することは、1フレームのVマップにおける路面推定の精度を決定付ける重要な要素である。ここで、図17は、2種類の視差点の分布を示すVマップと、路面推定処理の結果を例示したものである。図17に示すように、ここでは、Vマップを7つのセグメント(短冊状の部分領域)に分割しているものとし、図17の紙面視右側から第1セグメント〜第7セグメントと呼称するものとして説明する。なお、セグメントの分割数は限定されるものではなく、任意の数に分割するものとしてもよい。
図17(a)は、下り坂の視差点と、それ以外の物体に対応する視差点とを含むVマップVM4である。路面推定処理では、セグメント単位に推定処理していくため、通常であれば、途中で処理を立ち戻って再実施することはできない。まず、例えば、開始セグメントを第1セグメントに固定しているものとして説明する。第1セグメントの路面推定に失敗した場合、デフォルト路面(図17(a)に示すデフォルト路面DR)または履歴路面を第1セグメントの推定路面として割り当て、この路面を基準に次のセグメントについて路面推定を行うことになる。ここで、履歴路面とは、1フレーム以上前のフレームで推定された過去の推定路面を示し、過去の所定数のフレームで推定された路面を平均した路面であってもよい。図17(a)に示す例では、最終的な推定路面は、デフォルト路面DRに近い路面となる。この場合、下り坂の路面の視差点が下方(図17(a)の第6セグメントの推定路面ER4)に存在していたとしても、この視差点を採用して路面推定を行うことができないことになる。つまり、開始セグメントを第1セグメントに固定してしまうと、第1セグメントに路面の視差点が含まれている場合には正しく路面推定ができるが、下り坂のように路面の視差点が他のセグメントに含まれる場合には正しく路面推定ができないことになる。
次に、所定セグメントまで路面推定を行い、路面推定の成否判定で成功と判定される路面が存在しない場合、最初のセグメントに立ち戻って再度、路面推定を行う本実施形態の開始セグメント探索処理について説明する。まず、一巡目の路面推定では、厳しい成否判定条件によって各セグメントに対して路面推定を行う。ここで、最初に開始セグメントの探索対象となるセグメントは、必ずしも第1セグメントからでなくてもよい。この一巡目の厳しい成否判定で、成功となるような視差点の分布を含むセグメントであれば、路面としての信頼度は高いため誤推定のリスクは低いと考え採用する。この厳しい成否判定条件で成功するセグメントが存在しなかった場合、一巡目の成否判定条件よりも緩和して初めのセグメントから二巡目の路面推定を行う。
ここで、例えば、図17(a)のVマップVM4のデフォルト路面DRの位置に存在する視差点が正しい路面に対応する視差点であると仮定する。第1セグメントから厳しい成否判定条件で一巡目の路面推定を実行し、第6セグメントまで路面推定に失敗したとする。次に、二巡目の路面推定では、成否判定条件を緩和して再度第1セグメントから路面推定を行う。これによって、比較的視差分散が少ない第2セグメントに対する路面推定が成功と判定され推定路面として採用することができる。つまり、遠方のセグメント(ここでは、第6セグメント)まで探索はするが、適切な路面が見つからない場合には、一巡目での開始セグメント探索を諦めて、二巡目以降に任せる形をとる。このような処理によって、条件の緩い成否判定で無理に開始セグメントを探索することがないため、ノイズに対してロバスト状態で開始セグメントを決定、すなわち、路面の開始位置を検出することができる。図17(a)に示す例では、第2セグメントを開始セグメントと設定できるため、最終的に推定される路面はデフォルト路面DRに近くなり、これは実際の路面に近いものとなる。
ただし、二巡目の路面推定時に成否判定条件を緩和したことによって、ノイズによる分散した視差点であっても、推定された路面の成否判定が成功と判定されてしまう可能性がある。つまり、一巡目と同様に、二巡目において第6セグメントまで開始セグメント探索処理を実行してしまうと、誤って第6セグメントのノイズによる分散した視差点を使った路面推定が成功と判定されてしまう可能性がある。そこで、処理を繰り返す度(巡を重ねる毎)に探索する範囲を狭めていってもよい。例えば、一巡目の開始セグメント探索処理では第6セグメントまで探索し、二巡目では第5セグメントまで探索するといった方法が考えられる。無論、一巡目および二巡目の探索範囲を同じにしてもよい。また、上述の開始セグメント探索処理は、二巡以上繰り返し実行してもよい。
また、元々視差の情報が少ない場合では、成否判定条件を緩和していき、何巡に亘って開始セグメント探索処理を繰り返しても、路面推定に成功する確率は低い。したがって、巡を重ねることによって、探索する範囲を狭めながら所定回数探索し、成功する推定路面が見つからない場合、最初の探索対象のセグメント、つまり、第1セグメントを開始セグメントとみなし、このセグメントにデフォルト路面または履歴路面を設定するものとしてもよい。そして、それ以降のセグメントについても、成功する推定路面が見つからない場合、デフォルト路面もしくは履歴路面を割り当て、または、第1セグメントの履歴路面を延長する等の処理を行ってもよい。すなわち、視差の情報が少ない場合は、誤制御に最もつながりづらい路面を設定することが望ましい。様々な傾斜の路面があるとしても、車両は平坦な路面を走行している場合が多いため、路面の推定ができない場合には、デフォルト路面を割り当ててしまうことが望ましい場合が多いためである。ただし、ここで割り当てる路面はデフォルト路面に割り当てることに限定されるものではなく、それ以外の任意の路面を割り当てるものとしてもよい。また、視差の情報が少なく路面推定ができないのであれば、無理に路面を割り当てるのではなく、このフレームでの処理をスキップするために路面推定しないようにしてもよい。
次に、図17(b)は、平坦な路面の視差点のみを含んだVマップVM5を示している。この場合、第1セグメントでの視差が正確に抽出されているため、成否判定条件を厳しくした状態で路面推定をしたとしても、第1セグメントで推定成功とすることができる。したがって、この推定路面ER5を基準として、それ以降のセグメントの路面も推定していくため、推定される路面は平坦な路面を仮定したデフォルト路面DRに近くなり、正しい路面を得ることができる。つまり、平坦な路面であっても同様の手順で路面推定を行うことが可能であることを示している。
以上のような開始セグメント探索処理では、所定のセグメントまで路面推定を行い、途中で成否判定に成功する路面が存在すれば、その路面を含むセグメントが開始セグメントとなるため、何巡にも渡って処理する必要がなくなる。一方で、成否判定に成功する路面が見つからない場合は、成否判定条件を緩和して路面推定を行うので、開始セグメントをいずれかのセグメントに決定できる可能性が高くなる。したがって、物体認識装置1全体として処理時間の増加を抑制しつつ、かつ、ノイズにロバストな状態で路面の開始位置を検出することができる。よって、路面を精度よく検出することができる。
開始セグメント探索部404は、図14に示すように、第1標本点選択部411(第1選択部)と、第1形状推定部412(第1推定部)と、第1判定部413(判定部)と、を有する。
第1標本点選択部411は、開始セグメント探索処理において、Vマップに投票された視差点(頻度点の一例)のうち、処理対象のセグメント(以下、「対象セグメント」と称する場合がある)における各dp座標の位置から、少なくとも1つ以上の代表点(以下、「標本点」と称する)を選択する機能部である。標本点の選択方法としては、例えば、各dp座標に対して、その垂直(縦)方向に存在する視差点のうち、単純に頻度の最も多い視差点(最頻点)を選択してもよく、または、着目するdp座標とその左右の複数の画素を併せてVマップの下方向から上方向に上げていき、路面の視差点が含まれ得る領域を制限した上で、その中から最頻点を選択するというように、より正確に路面の視差点を捉える方法を用いてもよい。または、視差点がない位置(座標)を標本点として選択してもよい。例えば、着目している座標(dp,y)には視差点は存在していないが、周囲に頻度が多い視差点が集中している場合、偶発的に座標(dp,y)の視差点が欠落している可能性があるため、この抜けている位置を標本点として選択することも可能である。
なお、第1標本点選択部411は、選択した標本点のうち、不適切な標本点を除去してもよい。これによって、後述する第1形状推定部412によって標本点群に対する直線近似の際に、不適切な標本点(外れ点)の影響を受けて、推定路面の形状が不適切になってしまうことを抑制することができる。外れ点の除去方法としては、例えば、一旦、対象セグメント内の全ての標本点を使って最小二乗法で直線近似し、近似直線から所定の距離離れた標本点を除去するものとしてもよい。この場合、外れ点を除去した状態で、再度、最小二乗法により推定した路面が最終的な推定路面となる。
第1形状推定部412は、開始セグメント探索処理において、第1標本点選択部411により選択された標本点群から路面形状の推定(路面推定)を行う機能部である。路面推定の方法としては、例えば、最小二乗法等によって標本点群に対して直線近似を行う方法、または、多項式近似等を用いて曲線形状を推定する方法等がある。または、路面推定の結果に対する成否判定に使用するための信頼度を算出する方法としてもよい。例えば、最小二乗法を使って直線近似した場合は、相関係数を信頼度として使用することができる。以降の説明では、特に断らない限り、路面推定は直線近似によるものとして説明する。
第1判定部413は、開始セグメント探索処理において、第1形状推定部412により推定された路面が適切(成功)か否かを判定する機能部である。例えば、第1判定部413は、標本点の並びが右上並びに整列していると推定された場合、路面としては不適切(失敗)であると判定する。このような問題の発生の原因としては、例えば、個々の標本点の選択が独立して実行されることが挙げられる。また、第1判定部413による成否判定では、路面の信頼度を定量化できるのであれば、任意の尺度を利用して判定してもよい。例えば、標本点数が所定値よりも少ない場合は、路面の情報が少ない状態で推定した路面なので、不適切な傾きになっている可能性がある。したがって、この所定値を閾値として成否を分けるものとしてもよい。また、標本点群の分散状態を成否判定に採用することもできる。例えば、路面形状を推定する際に、最小二乗法を使っていた場合、近似直線を算出する際に相関係数も算出することができるため、この相関係数が所定値以下である場合に、推定路面がばらついた標本点群から推定された路面であると判定し、失敗と判定するものとしてもよい。また、路面はセグメント間で連続しているという性質を利用して、対象セグメントの1つ前のセグメントで推定された路面との角度が所定範囲に入っているか否かを判定し、入っていない場合、失敗と判定してもよい。
第1判定部413は、第1形状推定部412により推定された路面(第1推定路面)が適切であると判定した場合、その推定路面を含むセグメントを開始セグメントとして決定する。第1判定部413は、例えば、所定巡だけ開始セグメント探索処理が繰り返されても、第1形状推定部412により推定された路面が不適切であると判定した場合、その代わりとなる路面で補足する。路面を補足する方法としては、例えば、デフォルト路面または履歴路面を割り当てる方法等が挙げられる。
継続推定部405は、開始セグメント探索部404により決定された開始セグメント以降のセグメントにおいて路面を推定する継続推定処理を行う機能部である。すなわち、継続推定部405は、開始セグメント探索部404による開始セグメント探索処理によって開始セグメントが決定された後は、通常のセグメント単位で、開始セグメント以降の路面推定、すなわち、一セグメントに対して路面推定を行い、推定終了後は次のセグメントに対して路面推定を行い、所定のセグメント(通常、分割した最後のセグメント)まで路面推定を行う。この継続推定部405による継続推定処理の完了によって、1フレームにおける推定路面が完成する。
継続推定部405は、図14に示すように、第2標本点選択部421(第2選択部)と、第2形状推定部422(第2推定部、推定部)と、第2判定部423と、補間部424と、を有する。
第2標本点選択部421は、継続推定処理において、Vマップに投票された視差点のうち、開始セグメント以外の対象セグメントにおける各dp座標の位置から、少なくとも1以上の標本点を選択する機能部である。標本点の選択方法は、上述の第1標本点選択部411の選択方法と同様である。また、第2標本点選択部421は、第1標本点選択部411と同様に、選択した標本点のうち、不適切な標本点を除去するものとしてもよい。
第2形状推定部422は、継続推定処理において、第2標本点選択部421により選択された標本点群から路面形状の推定(路面推定)を行う機能部である。路面推定の方法は、上述の第1形状推定部412の方法と同様である。
第2判定部423は、継続推定処理において、第2形状推定部422により推定された路面(第2推定路面)が適切(成功)か否かを判定する機能部である。判定方法は、上述の第1判定部413の方法と同様である。第2判定部423は、第2形状推定部422により推定された路面が適切であると判定した場合、その推定路面を対象セグメントでの適切な推定路面として決定する。第2判定部423は、第2形状推定部422により推定された路面が不適切であると判定した場合、その代わりとなる路面で補足する。路面を補足する方法は、上述の第1判定部413と同様である。なお、第2判定部423の成否判定条件は、例えば、開始セグメント探索処理における一巡目の条件、または、二巡目以降の条件のいずれであってもよい。
補間部424は、開始セグメント探索部404により開始セグメントが決定された場合であって、開始セグメントよりも近方のセグメントが存在する場合、その近方のセグメントの路面を補間する機能部である。例えば、開始セグメント探索処理の結果、第3セグメントが開始セグメントになった場合、それよりも近方に位置する第1セグメントおよび第2セグメントの路面は未推定状態となっている。これらの路面に関しては、開始セグメントの路面を延長してもよく、または、そもそも視差の情報が少ない可能性があるため、未推定状態のままにしてもよい。または、補間部424は、例えば、所定の固定点(例えば、車両70の前方位置(車種に依存するが、例えば、1[m]付近)におけるデフォルト路面の位置)と、開始セグメントの推定路面のこの開始セグメントでの始点(開始セグメントの推定路面の右端)、または終点(開始セグメントの推定路面の左端)とを結ぶ直線を、開始セグメントよりも近方のセグメントの路面として補間するものとしてもよい。このように固定点と結ぶことにより、開始セグメントの推定路面の傾きが不適切な場合であっても、悪影響を緩和することができる。例えば、nフレームでの開始セグメントの推定路面がデフォルト路面、(n+1)フレームでの開始セグメント(nフレームと同じセグメント位置と仮定)がデフォルト路面より急な傾きを持った路面であった場合、開始セグメントよりも近方のセグメントを開始セグメントの延長で補間すると、フレーム間で近方の路面が激しく変動することになる。しかし、固定点に結ぶように補間すれば、フレーム間での急激な変動を抑制することができる。
スムージング部406は、開始セグメント探索部404および継続推定部405により推定された路面に対してスムージング処理を行う機能部である。Vマップを複数のセグメントに分割した場合、セグメント間で推定された路面が不連続になる可能性がある。そこで、ある2つのセグメントの推定路面のうち、一方の推定路面の始点の座標と、もう一方の推定路面の終点の座標とが所定のy座標を通るように修正する、すなわち、推定路面のVマップ上における傾きおよび切片を変更することによって、セグメント間で推定路面に連続性を担保する。所定のy座標としては、例えば、上述の一方の推定路面の始点のy座標と、もう一方の推定路面の終点のy座標との中点のy座標を採用することができる。このようなスムージング処理を行うことにより、あるセグメントでの推定結果が適していない場合に、修正される可能性があるため、路面推定の精度を向上させる効果がある。
出力部407は、スムージング部406によりスムージング処理されたVマップ上の推定路面の情報(路面情報)を、クラスタリング部450に出力する機能部である。なお、Vマップ上の推定路面の情報が、後段(クラスタリング部450等)で特に必要とされない場合においては、例えば、路面情報を図3に示すRAM54等に記憶させておくものとしてもよい。この場合、スムージング部406および出力部407は備えない構成としてもよい。
図14に示す入力部401、Vマップ生成部402、分割部403、開始セグメント探索部404、継続推定部405、スムージング部406および出力部407は、それぞれ図3に示すFPGA51によって実現される。なお、入力部401、Vマップ生成部402、分割部403、開始セグメント探索部404、継続推定部405、スムージング部406および出力部407の一部または全部は、ハードウェア回路であるFPGA51ではなく、ROM53に記憶されているプログラムがCPU52によって実行されることによって実現されるものとしてもよい。
なお、図14に示す路面推定部400の入力部401、Vマップ生成部402、分割部403、開始セグメント探索部404、継続推定部405、スムージング部406および出力部407は、機能を概念的に示したものであって、このような構成に限定されるものではない。例えば、図14に示す路面推定部400で独立した機能部として図示した複数の機能部を、1つの機能部として構成してもよい。一方、図14に示す路面推定部400で1つの機能部が有する機能を複数に分割し、複数の機能部として構成するものとしてもよい。
(物体認識装置の動作)
次に、図18および図19を参照しながら、物体認識装置1の具体的な動作について説明する。
<視差値導出部のブロックマッチング処理>
図18は、第1の実施形態に係る視差値導出部のブロックマッチング処理の動作の一例を示すフローチャートである。図18を参照しながら、物体認識装置1の視差値導出部3のブロックマッチング処理の動作の流れについて説明する。
<<ステップS1−1>>
視差値導出部3の画像取得部100bは、左のカメラ(撮像部10b)により前方の被写体を撮像して、それぞれアナログの画像信号を生成し、その画像信号に基づく画像である輝度画像を得る。これによって、後段の画像処理の対象となる画像信号が得られることになる。そして、ステップS2−1へ移行する。
<<ステップS1−2>>
視差値導出部3の画像取得部100aは、右のカメラ(撮像部10a)により前方の被写体を撮像して、それぞれアナログの画像信号を生成し、その画像信号に基づく画像である輝度画像を得る。これによって、後段の画像処理の対象となる画像信号が得られることになる。そして、ステップS2−2へ移行する。
<<ステップS2−1>>
視差値導出部3の変換部200bは、撮像部10bにより撮像されて得られたアナログの画像信号に対して、ノイズを除去し、デジタル形式の画像データに変換する。このように、デジタル形式の画像データに変換することによって、その画像データに基づく画像に対して画素ごとの画像処理が可能となる。そして、ステップS3−1へ移行する。
<<ステップS2−2>>
視差値導出部3の変換部200aは、撮像部10aにより撮像されて得られたアナログの画像信号に対して、ノイズを除去し、デジタル形式の画像データに変換する。このように、デジタル形式の画像データに変換することによって、その画像データに基づく画像に対して画素ごとの画像処理が可能となる。そして、ステップS3−2へ移行する。
<<ステップS3−1>>
変換部200bは、ステップS2−1において変換したデジタル形式の画像データに基づく画像をブロックマッチング処理における比較画像Ibとして出力する。これによって、ブロックマッチング処理において視差値を求めるための比較対象となる画像を得る。そして、ステップS4へ移行する。
<<ステップS3−2>>
変換部200aは、ステップS2−2において変換したデジタル形式の画像データに基づく画像をブロックマッチング処理における基準画像Iaとして出力する。これによって、ブロックマッチング処理において視差値を求めるための基準となる画像を得る。そして、ステップS4へ移行する。
<<ステップS4>>
視差値導出部3の視差値演算処理部300のコスト算出部301は、基準画像Iaにおける基準画素p(x,y)の輝度値、および、基準画素p(x,y)に基づく比較画像Ibにおけるエピポーラ線EL上で、基準画素p(x,y)の位置に相当する画素からシフト量dでシフトすることにより特定される、対応画素の候補画素q(x+d,y)の各輝度値に基づいて、各候補画素q(x+d,y)のコスト値C(p,d)を算出する。具体的には、コスト算出部301は、ブロックマッチング処理により、基準画像Iaの基準画素pを中心とする所定領域である基準領域pbと、比較画像Ibの候補画素qを中心とする候補領域qb(大きさは基準領域pbと同一)との非類似度をコスト値Cとして算出する。そして、ステップS5へ進む。
<<ステップS5>>
視差値導出部3の視差値演算処理部300の決定部302は、コスト算出部301により算出されたコスト値Cの最小値に対応するシフト量dを、コスト値Cの算出の対象となった基準画像Iaの画素についての視差値dpとして決定する。そして、視差値導出部3の視差値演算処理部300の生成部303は、決定部302により決定された視差値dpに基づいて、基準画像Iaの各画素の輝度値を、その画素に対応する視差値dpで表した画像である視差画像を生成する。生成部303は、生成した視差画像を、認識処理部5に出力する。
なお、上述のブロックマッチング処理は、ステレオマッチング処理の一例として説明したが、これに限定されるものではなく、SGM(Semi−Global Matching)法を用いた処理であってもよい。
<路面推定処理>
図19は、第1の実施形態に係る路面推定部の路面推定処理の動作の一例を示すフローチャートである。図19を参照しながら、認識処理部5の路面推定部400の路面推定処理の動作の流れについて説明する。
<<ステップS11>>
入力部401は、視差値演算処理部300から視差画像を入力する。なお、視差画像は、ステレオカメラを構成する視差値導出部3で生成した視差画像を直接入力してもよく、これらの情報を予め、CD(Compact Disk)、DVD(Digital Versatile Disc)、HDD(Hard Disk Drive)等の記録メディア、または、ネットワークストレージ等に記憶させておき、必要に応じて、これらから視差画像を読み込んで使用するものとしてもよい。また、視差画像は1画像のみを入力するものとしてもよく、または、動画像データをフレームごとに逐次入力するものとしてもよい。そして、ステップS12へ移行する。
<<ステップS12>>
Vマップ生成部402は、入力部401により入力された視差画像の各視差画素の視差値を、Vマップの対応する視差点に投票することによってVマップを生成する。そして、ステップS13へ移行する。
<<ステップS13>>
分割部403は、Vマップ生成部402により生成されたVマップを、dp座標(横座標)において、1以上の部分領域であるセグメントに分割する。分割部403によって分割されたセグメントごとに路面形状の推定が行われる。なお、分割されるセグメントの横幅(dp方向の幅)は同値とならなくてもよい。例えば、遠方の路面を細かく推定したい場合は、遠方になるにつれ(Vマップではdp値が小さくなるにつれ)、セグメント幅を小さくしていけばよい。そして、ステップS14へ移行する。
<<ステップS14>>
開始セグメント探索部404は、開始セグメント探索処理を開始するために、現在処理しているインデックスをseg_indexとし、この変数を0に初期化する。なお、seg_indexの値域は、0〜(分割数−1)となるが、以降の説明では、インデックスは(セグメント番号−1)として説明する。例えば、分割部403が、Vマップを7つのセグメントに分割した場合、セグメントは、それぞれ第1セグメント〜第7セグメントと呼称し、対応するインデックスは、それぞれ0〜6となる。そして、ステップS15へ移行する。
<<ステップS15>>
開始セグメント探索部404は、開始セグメント探索処理を開始する。開始セグメント探索部404は、開始セグメント探索処理において、所定のセグメント数分だけ路面推定および成否判定等の処理(ステップS16〜S20)を繰り返す。例えば、所定のセグメント数が5である場合、第1セグメント〜第5セグメントまでを処理の対象とし、開始セグメント探索部404は、これらのセグメントから開始セグメントの探索を行う。そして、ステップS16へ移行する。
<<ステップS16>>
開始セグメント探索部404の第1標本点選択部411は、開始セグメント探索処理において、Vマップに投票された視差点のうち、処理対象の対象セグメントにおける各dp座標の位置から、少なくとも1つ以上の標本点を選択する。なお、このとき、各dp座標で選択される標本点は、1点に限定されるものではなく、複数の標本点が選択されるものとしてもよい。また、Vマップ上に視差点が垂直方向に存在しないdp座標も存在することから、標本点を選択しないdp座標が存在してもよい。そして、ステップS17へ移行する。
<<ステップS17>>
開始セグメント探索部404の第1形状推定部412は、開始セグメント探索処理において、第1標本点選択部411により選択された標本点群から路面形状の推定(路面推定)を行う。そして、ステップS18へ移行する。
<<ステップS18>>
開始セグメント探索部404の第1判定部413は、開始セグメント探索処理において、第1形状推定部412により推定された路面が適切(成功)か否かを判定する。そして、ステップS19へ移行する。
<<ステップS19>>
第1判定部413によって、推定路面が不適切(失敗)であると判定された場合(ステップS19:Yes)、ステップS20へ移行する。一方、推定路面が適切(成功)であると判定された場合(ステップS19:No)、ステップS23へ移行する。第1判定部413は、推定路面が適切であると判定した場合、その推定路面を含むセグメントを開始セグメントとして決定する。
<<ステップS20>>
開始セグメント探索部404は、第1判定部413により推定路面が不適切と判定されたことにより、さらに開始セグメントを探索するため、次のセグメントを対象セグメントとするために、インデックスseg_indexを、1だけインクリメントする。そして、ステップS21へ移行する。
<<ステップS21>>
開始セグメント探索部404は、ステップS16〜S20の処理を所定のセグメント数分だけ行ったか否かを判定する。所定のセグメント数すべてについて処理を行った場合、ステップS22へ移行し、行っていない場合、ステップS16へ戻る。
<<ステップS22>>
開始セグメント探索部404は、開始セグメント探索処理(ステップS14〜S21)を所定回数行ったか否かを判定する。所定回数行った場合(ステップS22:Yes)、ステップS23へ移行し、行っていない場合(ステップS22:No)、ステップS24へ移行する。
<<ステップS23>>
開始セグメント探索部404は、ステップS19において、第1判定部413により推定路面が適切と判定された、その推定路面を開始セグメントに設定する。また、開始セグメント探索部404(設定部)は、ステップS22において、開始セグメント探索処理が所定回数実行されても、成功と判定された推定路面が見つからない場合、所定のセグメント(例えば、第1セグメント)を開始セグメントに設定し、このセグメントにデフォルト路面または履歴路面等を設定する。そして、ステップS25へ移行する。
<<ステップS24>>
開始セグメント探索部404は、2回目以降の開始セグメント探索処理を実行する際に、1回目の開始セグメント探索処理における推定路面の成否判定条件よりも緩和させる。成否判定条件を緩和する方法としては、例えば、成否判定を行う際に使用する各種パラメータを緩めたり、または、成否判定を行う際に使用する条件の数を減らす方法が挙げられる。例えば、成否判定を行う際に使用する条件の数を減らす具体的な方法としては、標本点数、分散、および推定路面の角度という3つの条件を任意の2つの条件に減らすという方法が挙げられる。いずれにしても、1回目の開始セグメント探索処理よりも2回目以降の開始セグメント探索処理の方が推定路面が適切であると判定されやすくなるような成否判定条件とすればよい。そして、ステップS14へ戻る。
<<ステップS25>>
補間部424は、必要時、すなわち、設定された開始セグメントより近方のセグメントが存在する場合、上述した方法によって、近方のセグメントの路面を補間する。そして、ステップS26へ移行する。
<<ステップS26>>
継続推定部405は、ステップS23で設定された開始セグメント以降のセグメントにおいて路面を推定する継続推定処理を開始するために、インデックスseg_indexを、開始セグメントのインデックスを1だけインクリメントした値とする。ここで、現在のインデックスseg_indexを1だけインクリメントした値を、新たなインデックスseg_indexとするものとしていない理由は、ステップS23で上述したように、必ずしも、第1判定部413により適切と判定された推定路面が開始セグメントに設定されているとは限らないためである。そして、ステップS27へ移行する。
<<ステップS27>>
継続推定部405は、継続推定処理を開始する。継続推定部405は、継続推定処理において、ステップS15における所定のセグメント数のうち開始セグメント以降の残りのセグメント数分だけ路面推定および成否判定等の処理(ステップS28〜S31)を繰り返す。例えば、開始セグメントが第3セグメントであり、かつ、第7セグメントまで探索する場合、残りのセグメントである第4セグメント〜第7セグメントまでを処理の対象とし、継続推定部405は、これらのセグメントに対して継続推定処理を行う。そして、ステップS28へ移行する。
<<ステップS28>>
継続推定部405の第2標本点選択部421は、継続推定処理において、Vマップに投票された視差点のうち、開始セグメント以外の対象セグメントにおける各dp座標の位置から、少なくとも1以上の標本点を選択する。なお、このとき、各dp座標で選択される標本点は、1点に限定されるものではなく、複数の標本点が選択されるものとしてもよい。また、Vマップ上に視差点が垂直方向に存在しないdp座標も存在することから、標本点を選択しないdp座標が存在してもよい。そして、ステップS29へ移行する。
<<ステップS29>>
継続推定部405の第2形状推定部422は、継続推定処理において、第2標本点選択部421により選択された標本点群から路面形状の推定(路面推定)を行う。そして、ステップS30へ移行する。
<<ステップS30>>
継続推定部405の第2判定部423は、継続推定処理において、第2形状推定部422により推定された路面が適切(成功)か否かを判定する。第2判定部423は、推定路面が不適切(失敗)と判定した場合、その代わりとなる路面で補足する。路面を補足する方法としては、例えば、デフォルト路面または履歴路面を割り当てる方法等が挙げられる。そして、ステップS31へ移行する。
<<ステップS31>>
継続推定部405は、次のセグメントを対象セグメントとするために、インデックスseg_indexを、1だけインクリメントする。そして、ステップS32へ移行する。
<<ステップS32>>
継続推定部405は、ステップS28〜S31の処理を開始セグメント以降の残りのセグメント数分だけ行ったか否かを判定する。残りのセグメント数すべてについて処理を行った場合、スムージング部406は、開始セグメント探索部404および継続推定部405により推定された路面に対してスムージング処理を行う。そして、出力部407は、スムージング部406によりスムージング処理されたVマップ上の推定路面の情報(路面情報)を、クラスタリング部450に出力して路面推定処理を終了する。一方、残りのセグメント数すべてについて処理を行っていない場合、ステップS28へ戻る。なお、スムージング部406によるスムージング処理では、着目するセグメントの推定路面が求められた後、この推定路面と、着目するセグメントの1つ前のセグメントの推定路面とを逐次的にスムージングを行うものとしてもよい。
以上のステップS11〜S32の処理により、路面推定部400による路面推定処理が行われる。
なお、図19に示すフローにおいて、開始セグメント探索部404によるステップS16〜S19の処理、および、継続推定部405によるステップS28〜S30の処理は、それぞれ、セグメントごとに直列的に実行するものとしてもよく、各ステップの処理をセグメント全体で並列的に処理するものとしてもよい。
以上のように、開始セグメント探索部404による1回目の路面推定処理において開始セグメントが見つからなかった場合、第1判定部413による成否判定条件を緩和して、再度、路面推定処理を実行するものとしている。これによって、条件の緩い成否判定で無理に開始セグメントを探索することがなく、ノイズに対してロバスト状態で開始セグメントを決定、すなわち、路面の開始位置を検出することができる。よって、路面を精度よく検出することができる。
また、開始セグメント探索処理では、所定のセグメントまで路面推定を行い、途中で成否判定に成功する路面が存在すれば、その路面を含むセグメントが開始セグメントとなるため、何巡にも渡って処理する必要がなくなる。一方で、成否判定に成功する路面が見つからない場合は、成否判定条件を緩和して路面推定を行うので、開始セグメントをいずれかのセグメントに決定できる可能性が高くなる。したがって、物体認識装置1全体として処理時間の増加を抑制しつつ、かつ、ノイズにロバストな状態で路面の開始位置を検出することができる。よって、路面を精度よく検出することができる。
[第1の実施形態の変形例]
第1の実施形態の変形例に係る物体認識装置について、第1の実施形態に係る物体認識装置1と相違する点を中心に説明する。第1の実施形態では、開始セグメント探索処理における路面推定の方法と、継続推定処理における路面推定の方法とは、同様であるものとして説明した。本変形例では、継続推定処理における路面推定の方法とは異なる方法によって、開始セグメント探索処理における路面推定を行う動作について説明する。
なお、本変形例に係る物体認識装置のハードウェア構成および機能ブロック構成は、第1の実施形態で説明した構成と同様である。また、本変形例に係る視差値導出部3のブロックマッチング処理についても、第1の実施形態で説明した動作と同様である。
(路面推定部の機能ブロック構成および動作)
図20は、第1の実施形態の変形例に係る物体認識装置の路面推定部の機能ブロック構成の一例を示す図である。図21は、第1の実施形態の変形例の開始セグメント探索処理を説明する図である。図20および図21を参照しながら、路面推定部400aの機能ブロックの具体的な構成および動作について説明する。
図20に示すように、本変形例に係る物体認識装置の路面推定部400aは、入力部401と、Vマップ生成部402と、分割部403と、開始セグメント探索部404aと、継続推定部405と、スムージング部406と、出力部407と、を有する。なお、入力部401、Vマップ生成部402、分割部403、継続推定部405、スムージング部406および出力部407の機能は、第1の実施形態で説明した機能と同様である。
開始セグメント探索部404aは、分割部403によって分割されたセグメントから、車両70が走行している路面の開始位置を含む開始セグメントを探索する開始セグメント探索処理を行う機能部である。開始セグメント探索部404aによる開始セグメント探索処理では、開始セグメント特有の特徴を鑑みて、セグメントに含まれる視差点から選択する標本点を制限する。標本点の選択の具体的態様については、第1標本点選択部411aの動作説明において後述する。
開始セグメント探索部404aは、図20に示すように、第1標本点選択部411aと、第1形状推定部412と、第1判定部413と、を有する。なお、第1形状推定部412および第1判定部413の機能は、第1の実施形態で説明した機能と同様である。
第1標本点選択部411aは、開始セグメント探索処理において、Vマップに投票された視差点のうち、対象セグメントにおける各dp座標の位置から、少なくとも1つ以上の標本点を選択する機能部である。
通常、路面の開始位置を含む開始セグメントでは、図21(a)に示すように、VマップVM6の下辺に張り付く形で視差点が並ぶ傾向がある。この状態で、dp座標ごとの視差点から標本点を選択しようとすると、図21(a)に示すように、VマップVM6の下辺に存在する横並びの視差点を標本点として選択してしまう可能性がある。さらに、最小二乗法等でこれらの標本点群を直線近似すると、推定される路面(推定路面ER6)は横並びの標本点群の影響を受けて、実際の路面に比べ傾きの小さな推定路面になってしまう。そこで、本実施形態では、開始セグメント探索処理における第1標本点選択部411aによる標本点の選択処理では、横並びの標本点数に制限を設けるものとする。例えば、同じy座標に存在する標本点数に上限を設けて、第1標本点選択部411aは、この上限数を超えて標本点を選択しないようにする。
このように、横並びの標本点数に上限を設けた状態で、標本点を選択した例を、図21(b)に示す。図21(b)では、横並びの標本点数の上限数を「2」に設定して、第1標本点選択部411aにより標本点を選択した例を示している。このように、開始セグメント探索処理における標本点の選択処理について、横並び(dp方向の並び)の標本点数を必要最低限(図21(b)の例では「2」)に抑えることによって、適切な傾きの路面(推定路面ER6a)として推定することが可能になる。また、第1標本点選択部411aによる標本点の選択処理において、上限数以内でどの標本点を選択するかについての選択方式としては、例えば、以下の方式で行う。まず、標本点の選択の順序を対象セグメントの左端から右端へ向かう順序とし、あるdp座標で選択された標本点と、その標本点のy座標とを記憶しておく。そして、次のdp座標で標本点の候補を評価する場合、その時の候補のy座標が、既に上限数を超えて現れている場合、その候補となる点を標本点として選択しないようにする。以上のような選択方式が一例として挙げられる。なお、横並びの標本点数の上限数は、例えば、路面の視差点としてあり得る分散値に基づいて設定してもよく、または、不適にならない程度の数値を任意に設定してもよい。
なお、開始セグメント探索処理において、第1標本点選択部411aによる上述のような方式での標本点の選択処理は、所定のセグメントに対して実行するものとしてもよい。例えば、遠方のセグメントであるほど、視差点がVマップの下辺で横並びに並ぶことがないことがわかっているのであれば、開始セグメント探索処理において、上述の標本点の選択処理は、所定のセグメントに対してのみ実行してもよい。
[第2の実施形態]
第2の実施形態に係る物体認識装置について、第1の実施形態に係る物体認識装置1と相違する点を中心に説明する。第1の実施形態では、開始セグメント探索処理において、所定の成否判定条件を満たす路面のセグメントが見つかった時点で当該セグメントを開始セグメントとする動作を説明した。本実施形態では、成否判定で成功と判定される路面のセグメントが複数存在する場合、より適切とされる方のセグメントを開始セグメントに設定する動作について説明する。
なお、本実施形態に係る物体認識装置のハードウェア構成および機能ブロック構成は、第1の実施形態で説明した構成と同様である。また、本実施形態に係る視差値導出部3のブロックマッチング処理についても、第1の実施形態で説明した動作と同様である。
(路面推定部の機能ブロック構成)
図22は、Vマップの推定路面が物体の視差点の影響を受ける一例を示す図である。図23は、第2の実施形態に係る物体認識装置の路面推定部の機能ブロック構成の一例を示す図である。図24は、近方に存在するセグメントを開始セグメントに設定する動作を説明する図である。図22〜図24を参照しながら、本実施形態に係る路面推定部400bの機能ブロックの具体的な構成および動作について説明する。
上述の図8に示すように路面の視差値が正しく抽出されている場合、後述する路面推定部400bの分割部403の機能により、VマップVMが7つのセグメント(短冊状の部分領域)に分割されているものとし、紙面視右側から第1セグメント〜第7セグメントと呼称するものとすると、第1セグメントが含む推定路面が、路面の開始を示す路面として適切に判定され、この推定路面を基準に、以降のセグメントの路面を推定するため、最終的な結果は、推定路面600aのようになる。
一方で、図22は、推定が成功した複数の路面が存在し、その中に不適切に推定された路面が含まれる場合の例を示している。図22(a)に示す視差画像Ip7には、例えば、路面620と、車621と、が写り込んでいるが、路面620の一部に視差値が抽出できない領域である視差未抽出領域622が存在する例を示している。この場合、推定される路面は、物体である車621に対応するVマップ上の視差点に引っ張られて傾きが急になる可能性がある。ここで推定された路面の視差点の分布が、上り坂の視差点の分布と類似している場合に、路面の推定が成功し、路面の開始を示す路面として設定されてしまう可能性がある。図22(b)は、視差画像Ip7から生成されたVマップVM7を示している。図22(b)に示すVマップVM7では、第1セグメントおよび第4セグメントで路面の推定が成功した例を示しており、それぞれ推定に成功した路面を推定路面ER7a、ER7bとしている。また、VマップVM7の車部621aは、視差画像Ip7の車621に対応する。VマップVM7の推定路面ER7a、ER7bのうち、第4セグメントの推定路面ER7bを、路面の開始を示す路面として設定した場合、このVマップVM7における最終的な推定路面が不適切な結果となる可能性がある。
例えば、路面の開始を示す路面(推定路面ER7b)を含むセグメントを基準として、以降のセグメントを推定する場合、基準となるセグメント(第4セグメント)が含む推定路面の終点を基準に標本点を探索しようとすると、この終点の位置は、実際の路面の終点の位置と比較して高い位置に存在するため、正しく標本点を探索できない可能性がある。また、標本点を探索でき、路面の推定をすることができたとしても、基準となるセグメントの推定路面との角度が所定の基準に合致しないため、路面の推定に失敗したものと判定されてしまう可能性もある。さらに、基準となるセグメントの逆方向に存在する路面(この場合、第1セグメント〜第3セグメント)を、基準となるセグメントでの推定路面を延長して補間するとした場合、第4セグメントの路面は傾きが不適切であるため、実際の路面に比べてはるかに低い路面が補間されてしまう可能性がある。この場合、第1セグメント〜第3セグメントがより近方のセグメントである場合、近方で実際の路面の視差点を大量にクラスタリングしてしまい、近方の路面上に大量の誤認識物体が出現してしまう可能性がある。
一方、VマップVM7の推定路面ER7a、ER7bのうち、第1セグメントの推定路面ER7aを、路面の開始を示す路面として設定できれば、推定される路面は図8に示した結果と同様となるため、VマップVM7における路面推定は成功となる。以上のように、Vマップ上で、複数のセグメントで路面推定が成功となった場合、複数の推定路面のうち、いかにして実際の路面を選択できるかが、1フレームのVマップにおける路面推定の精度を決定付ける重要な要素となる。
図23に示すように、路面推定部400bは、入力部401と、Vマップ生成部402(第2生成部)と、分割部403と、開始セグメント探索部404bと、継続推定部405bと、スムージング部406と、出力部407と、を有する。なお、入力部401、Vマップ生成部402、分割部403、スムージング部406および出力部407の機能は、それぞれ第1の実施形態で説明した路面推定部400の各機能部の機能と同様である。
開始セグメント探索部404bは、分割部403によって分割されたセグメントから、車両70が走行している路面の開始位置を含むセグメント、すなわち、視差画像に写っている路面のうち物体認識装置を搭載した車両70に最も近い路面部分を含むセグメントである開始セグメントを探索する開始セグメント探索処理を行う機能部である。この開始セグメント探索処理で探索する開始セグメントは、Vマップ上での路面推定時に基準となる路面を含むセグメントを示し、通常、路面推定は近方から遠方に向かって実行されるため、Vマップに含まれる最も近方の路面を含むセグメントに該当する。
ここで、所定セグメントまで路面推定を行い、路面推定の成否判定で成功と判定される路面が複数存在する場合、より近方に存在するセグメントを開始セグメントに設定する開始セグメント探索処理について説明する。まず、所定のセグメントから順に路面推定を行い、所定の成否判定条件によって各セグメントに対して路面推定を行う。例えば、図24に示すVマップVM8において、紙面視右側から第1セグメント〜第6セグメントに分割されているものとし、右方のセグメントであるほど近方のセグメントであるものとする。ここで、視差の精度については、近方の方が高く、そして、遠方になるほど分解能が低くなりやすく、かつ、信頼度が低下するため視差値が分散しやすい。このため、Vマップにおいて視差値が投票される視差点は、より近方に存在するものほど信頼度が高くなる。この特性を鑑み、所定セグメントまで路面推定を行ったときに、路面推定の成否判定で成功と判定される路面が複数存在する場合、より近方に存在する推定路面を含むセグメントを開始セグメントとする。例えば、図24の例では、第1セグメントから路面推定を行い、第4セグメントの推定路面ER8a、および第5セグメントの推定路面ER8bが成否判定条件を満たした状態、すなわち、第4セグメントおよび第5セグメントで路面推定が成功した状態を示す。そして、路面推定が成功した第4セグメントおよび第5セグメントのうち、より近方のセグメント、すなわち、推定路面ER8aを含む第4セグメントを開始セグメントとする。このような処理により、信頼度の高い視差点に基づく推定路面を含むセグメントを開始セグメントとするので、路面の開始位置を精度よく検出することができる。よって、路面を精度よく検出することができる。
なお、最初に開始セグメントの探索対象となるセグメントは、必ずしも第1セグメントからでなくてもよい。また、開始セグメント探索処理の対象となるセグメント(例えば、図24では第1セグメント〜第6セグメント)すべてに対して探索を行うことに限定されるものではなく、近方のセグメントから探索を行い、路面推定に成功したセグメントが見つかった時点で、このセグメントを開始セグメントに設定し、それ以降のセグメントに対する探索を打ち切るものとしてもよい。例えば、図24の例の場合、第1セグメントから開始セグメント探索処理を開始し、第4セグメントで路面推定が成功した時点で、処理を打ち切り、第5セグメントおよび第6セグメントに対する探索処理は省略するものとしてもよい。これによって、不要なセグメントへの路面推定の処理を実施しなくてもよいため、開始セグメント探索処理の処理時間を短縮することができる。
また、開始セグメント探索部404bによる開始セグメント探索処理は、複数回実行するものとしてもよい。すなわち、開始セグメント探索処理の一巡目で開始セグメントを見つけることができなかった場合、例えば、一巡目の成否判定条件よりも緩和して初めのセグメントから二巡目の処理を行うものとしてもよい。この場合、処理を繰り返す度(巡を重ねる度)に探索する範囲を狭めていってもよい。例えば、一巡目の開始セグメント探索処理では第6セグメントまで探索し、二巡目では第5セグメントまで探索するといった方法が考えられる。無論、一巡目および二巡目の探索範囲を同じにしてもよい。
また、元々視差の情報が少ない場合では、開始セグメント探索処理を行っても、路面推定に成功する確率は低い。したがって、成功する推定路面が見つからない場合、最初の探索対象のセグメント、つまり、第1セグメントを開始セグメントとみなし、このセグメントにデフォルト路面または履歴路面を設定するものとしてもよい。そして、それ以降のセグメントについても、成功する推定路面が見つからない場合、デフォルト路面もしくは履歴路面を割り当て、または、第1セグメントの履歴路面を延長する等の処理を行ってもよい。すなわち、視差の情報が少ない場合は、誤制御に最もつながりづらい路面を設定することが望ましい。様々な傾斜の路面があるとしても、車両は平坦な路面を走行している場合が多いため、路面の推定ができない場合には、デフォルト路面を割り当ててしまうことが望ましい場合が多いからである。ただし、ここで割り当てる路面はデフォルト路面に割り当てることに限定されるものではなく、それ以外の任意の路面を割り当てるものとしてもよい。また、視差の情報が少なく路面推定ができないのであれば、無理に路面を割り当てるのではなく、このフレームでの処理をスキップするために路面推定しないようにしてもよい。
開始セグメント探索部404bは、図23に示すように、第1標本点選択部411(第1選択部)と、第1形状推定部412(第1推定部)と、第1判定部413と、第1設定部414と、を有する。なお、第1標本点選択部411および第1形状推定部412の機能は、それぞれ第1の実施形態で説明した開始セグメント探索部404の各機能部の機能と同様である。
第1判定部413は、開始セグメント探索処理において、第1形状推定部412により推定された路面(第1推定路面)が、所定の成否判定条件(第1条件)を満たすか否かにより、路面推定が適切(成功)か否かを判定する機能部である。例えば、第1判定部413は、標本点の並びが右上並びに整列していると推定された場合、路面としては不適切(失敗)であると判定する。このような問題の発生の原因としては、例えば、個々の標本点の選択が独立して実行されることが挙げられる。また、第1判定部413による成否判定では、路面の信頼度を定量化できるのであれば、任意の尺度を利用して判定してもよい。例えば、標本点数が所定値よりも少ない場合は、路面の情報が少ない状態で推定した路面なので、不適切な傾きになっている可能性がある。したがって、この所定値を閾値として成否を分けるものとしてもよい。また、標本点群の分散状態を成否判定に採用することもできる。例えば、路面形状を推定する際に、最小二乗法を使っていた場合、近似直線を算出する際に相関係数も算出することができるため、この相関係数が所定値以下である場合に、推定路面がばらついた標本点群から推定された路面であると判定し、失敗と判定するものとしてもよい。また、路面はセグメント間で連続しているという性質を利用して、対象セグメントの1つ前のセグメントで推定された路面との角度が所定範囲に入っているか否かを判定し、入っていない場合、失敗と判定してもよい。
第1設定部414は、第1判定部413による成否判定の結果に基づいて、開始セグメントを設定する機能部である。第1設定部414は、第1判定部413により適切であると判定された推定路面が複数存在する場合、最も近方の推定路面(「所定の基準を満たす」推定路面の一例)を含むセグメントを開始セグメントとして設定する。また、第1設定部414は、第1判定部413により適切であると判定された推定路面が存在しない場合、所定のセグメントを開始セグメントに設定し、このセグメントに代わりとなる路面で補足する。路面を補足する方法としては、例えば、デフォルト路面または履歴路面を割り当てる方法等が挙げられる。
継続推定部405bは、開始セグメント探索部404bにより設定された開始セグメント以降のセグメントにおいて路面を推定する継続推定処理を行う機能部である。すなわち、継続推定部405bは、開始セグメント探索部404bによる開始セグメント探索処理によって開始セグメントが設定された後は、通常のセグメント単位で、開始セグメント以降の路面推定、すなわち、一セグメントに対して路面推定を行い、推定終了後は次のセグメントに対して路面推定を行い、所定のセグメント(通常、分割した最後のセグメント)まで路面推定を行う。この継続推定部405bによる継続推定処理の完了によって、1フレームにおける推定路面が完成する。
継続推定部405bは、図23に示すように、第2標本点選択部421(第2選択部)と、第2形状推定部422(第2推定部)と、第2判定部423と、補間部424と、第2設定部425と、を有する。なお、第2標本点選択部421、第2形状推定部422および補間部424の機能は、それぞれ第1の実施形態で説明した継続推定部405の各機能部の機能と同様である。
第2判定部423は、継続推定処理において、第2形状推定部422により推定された路面(第2推定路面)が、所定の成否判定条件(第2条件)を満たすか否かにより、路面推定が適切(成功)か否かを判定する機能部である。判定方法は、上述の第1判定部413の方法と同様である。なお、第2判定部423の成否判定条件は、例えば、第1設定部414の成否判定条件と同様であってもよく、異なる条件であってもよい。
第2設定部425は、第2判定部423による成否判定の結果に基づいて、対象セグメントでの適切な路面を設定する機能部である。例えば、第2設定部425は、第2形状推定部422により推定された路面が適切であると判定した場合、その推定路面を対象セグメントでの適切な路面として設定する。また、第2設定部425は、第2形状推定部422により推定された路面が不適切であると判定した場合、その代わりとなる路面で補足する。路面を補足する方法は、上述の第1設定部414と同様である。
(路面推定処理)
図25は、第2の実施形態に係る路面推定部の路面推定処理の動作の一例を示すフローチャートである。図25を参照しながら、認識処理部5の路面推定部400bの路面推定処理の動作の流れについて説明する。
<ステップS51>
入力部401は、視差値演算処理部300から視差画像を入力する。なお、視差画像は、ステレオカメラを構成する視差値導出部3で生成した視差画像を直接入力してもよく、これらの情報を予め、CD、DVD、HDD等の記録メディア、または、ネットワークストレージ等に記憶させておき、必要に応じて、これらから視差画像を読み込んで使用するものとしてもよい。また、視差画像は1画像のみを入力するものとしてもよく、または、動画像データをフレームごとに逐次入力するものとしてもよい。そして、ステップS52へ移行する。
<ステップS52>
Vマップ生成部402は、入力部401により入力された視差画像の各視差画素の視差値を、Vマップの対応する視差点に投票することによってVマップを生成する。そして、ステップS53へ移行する。
<ステップS53>
分割部403は、Vマップ生成部402により生成されたVマップを、dp座標(横座標)において、1以上の部分領域であるセグメントに分割する。分割部403によって分割されたセグメントごとに路面形状の推定が行われる。なお、分割されるセグメントの横幅(dp方向の幅)は同値とならなくてもよい。例えば、遠方の路面を細かく推定したい場合は、遠方になるにつれ(Vマップではdp値が小さくなるにつれ)、セグメント幅を小さくしていけばよい。そして、ステップS54へ移行する。
<ステップS54>
開始セグメント探索部404bは、開始セグメント探索処理を開始するために、現在処理しているインデックスをseg_indexとした場合、このインデックスを0に初期化する。なお、seg_indexの値域は、0〜(分割数−1)となるが、以降の説明では、インデックスは(セグメント番号−1)として説明する。例えば、分割部403が、Vマップを7つのセグメントに分割した場合、セグメントは、それぞれ第1セグメント〜第7セグメントと呼称し、対応するインデックスは、それぞれ0〜6となる。そして、ステップS55へ移行する。
<ステップS55>
開始セグメント探索部404bは、開始セグメント探索処理を開始する。開始セグメント探索部404bは、開始セグメント探索処理において、所定のセグメント数分だけ路面推定および成否判定等の処理(ステップS56〜S59)を繰り返す。例えば、所定のセグメント数が5である場合、第1セグメント〜第5セグメントまでを処理の対象とし、開始セグメント探索部404bは、これらのセグメントから開始セグメントの探索を行う。そして、ステップS56へ移行する。
<ステップS56>
開始セグメント探索部404bの第1標本点選択部411は、開始セグメント探索処理において、Vマップに投票された視差点のうち、処理対象の対象セグメントにおける各dp座標の位置から、少なくとも1つ以上の標本点を選択する。なお、このとき、各dp座標で選択される標本点は、1点に限定されるものではなく、複数の標本点が選択されるものとしてもよい。また、Vマップ上に視差点が垂直方向に存在しないdp座標も存在することから、標本点を選択しないdp座標が存在してもよい。そして、ステップS57へ移行する。
<ステップS57>
開始セグメント探索部404bの第1形状推定部412は、開始セグメント探索処理において、第1標本点選択部411により選択された標本点群から路面形状の推定(路面推定)を行う。そして、ステップS58へ移行する。
<ステップS58>
開始セグメント探索部404bの第1判定部413は、開始セグメント探索処理において、第1形状推定部412により推定された路面が、所定の成否判定条件を満たすか否かにより、路面推定が適切(成功)か否かを判定する。そして、ステップS59へ移行する。
<ステップS59>
開始セグメント探索部404bは、さらに開始セグメントを探索するため、次のセグメントを対象セグメントとするために、インデックスseg_indexを、1だけインクリメントする。そして、ステップS60へ移行する。
<ステップS60>
開始セグメント探索部404bは、ステップS56〜S59の処理を所定のセグメント数分だけ行ったか否かを判定する。所定のセグメント数すべてについて処理を行った場合、ステップS61へ移行し、行っていない場合、ステップS56へ戻る。
<ステップS61>
第1設定部414は、第1判定部413による成否判定の結果に基づいて、開始セグメントを設定する。第1設定部414は、第1判定部413により適切であると判定された推定路面が複数存在する場合、最も近方の推定路面を含むセグメントを開始セグメントとして設定する。また、第1設定部414は、第1判定部413により適切であると判定された推定路面が存在しない場合、所定のセグメントを開始セグメントに設定し、このセグメントに代わりとなる路面で補足する。路面を補足する方法としては、例えば、所定のセグメント(例えば、第1セグメント)を開始セグメントに設定し、このセグメントにデフォルト路面または履歴路面等を設定する。そして、ステップS62へ移行する。
<ステップS62>
補間部424は、必要時、すなわち、設定された開始セグメントより近方のセグメントが存在する場合、上述した方法によって、近方のセグメントの路面を補間する。そして、ステップS63へ移行する。
<ステップS63>
継続推定部405bは、ステップS61で設定された開始セグメント以降のセグメントにおいて路面を推定する継続推定処理を開始するために、インデックスseg_indexを、開始セグメントのインデックスに対して1だけインクリメントした値とする。ここで、現在のインデックスseg_indexを1だけインクリメントした値を、新たなインデックスseg_indexとするものとしていない理由は、ステップS61で上述したように、必ずしも、第1判定部413により適切と判定された推定路面が開始セグメントに設定されているとは限らないためである。そして、ステップS64へ移行する。
<ステップS64>
継続推定部405bは、継続推定処理を開始する。継続推定部405bは、継続推定処理において、ステップS55における所定のセグメント数のうち開始セグメント以降の残りのセグメント数分だけ路面推定および成否判定等の処理(ステップS65〜S68)を繰り返す。例えば、開始セグメントが第3セグメントであり、かつ、第7セグメントまで探索する場合、残りのセグメントである第4セグメント〜第7セグメントまでを処理の対象とし、継続推定部405bは、これらのセグメントに対して継続推定処理を行う。そして、ステップS65へ移行する。
<ステップS65>
継続推定部405bの第2標本点選択部421は、継続推定処理において、Vマップに投票された視差点のうち、開始セグメント以外の対象セグメントにおける各dp座標の位置から、少なくとも1以上の標本点を選択する。なお、このとき、各dp座標で選択される標本点は、1点に限定されるものではなく、複数の標本点が選択されるものとしてもよい。また、Vマップ上に視差点が垂直方向に存在しないdp座標も存在することから、標本点を選択しないdp座標が存在してもよい。そして、ステップS66へ移行する。
<ステップS66>
継続推定部405bの第2形状推定部422は、継続推定処理において、第2標本点選択部421により選択された標本点群から路面形状の推定(路面推定)を行う。そして、ステップS67へ移行する。
<ステップS67>
継続推定部405bの第2判定部423は、継続推定処理において、第2形状推定部422により推定された路面が、所定の成否判定条件を満たすか否かにより、路面推定が適切(成功)か否かを判定する。
第2設定部425は、第2判定部423による成否判定の結果に基づいて、対象セグメントでの適切な路面を設定する。例えば、第2設定部425は、第2形状推定部422により推定された路面が適切であると判定した場合、その推定路面を対象セグメントでの適切な路面として設定する。また、第2設定部425は、第2形状推定部422により推定された路面が不適切であると判定した場合、その代わりとなる路面で補足する。そして、ステップS68へ移行する。
<ステップS68>
継続推定部405bは、次のセグメントを対象セグメントとするために、インデックスseg_indexを、1だけインクリメントする。そして、ステップS69へ移行する。
<ステップS69>
継続推定部405bは、ステップS65〜S68の処理を開始セグメント以降の残りのセグメント数分だけ行ったか否かを判定する。残りのセグメント数すべてについて処理を行った場合、スムージング部406は、開始セグメント探索部404bおよび継続推定部405bにより推定された路面に対してスムージング処理を行う。そして、出力部407は、スムージング部406によりスムージング処理されたVマップ上の推定路面の情報(路面情報)を、クラスタリング部450に出力して路面推定処理を終了する。一方、残りのセグメント数すべてについて処理を行っていない場合、ステップS65へ戻る。なお、スムージング部406によるスムージング処理では、着目するセグメントの推定路面が求められた後、この推定路面と、着目するセグメントの1つ前のセグメントの推定路面とを逐次的にスムージングを行うものとしてもよい。
以上のステップS51〜S69の処理により、路面推定部400bによる路面推定処理が行われる。
なお、図25に示すフローにおいて、開始セグメント探索部404bによるステップS56〜S58の処理、および、継続推定部405bによるステップS65〜S67の処理は、それぞれ、セグメントごとに直列的に実行するものとしてもよく、各ステップの処理をセグメント全体で並列的に処理するものとしてもよい。
以上のように、Vマップの各セグメントに対して路面推定を行った場合、路面推定の成否判定で成功と判定される路面が複数存在する場合、より近方に存在する推定路面を含むセグメントを開始セグメントとしている。これは、視差の精度については、近方の方が高く、そして、遠方になるほど分解能が低くなりやすく、かつ、信頼度が低下するため視差値が分散しやすいため、Vマップにおいて視差値が投票される視差点は、より近方に存在するものほど信頼度が高くなるからである。これによって、信頼度の高い視差点に基づく推定路面を含むセグメントを開始セグメントとするので、路面の開始位置を精度よく検出することができる。よって、路面を精度よく検出することができる。
[第2の実施形態の変形例]
第2の実施形態の変形例に係る物体認識装置について、第2の実施形態に係る物体認識装置と相違する点を中心に説明する。第2の実施形態では、路面推定の成否判定で成功と判定される路面が複数存在する場合、Vマップにおいて視差値が投票される視差点は、より近方に存在するものほど信頼度が高くなる特性を鑑みて、より近方に存在する推定路面を含むセグメントを開始セグメントとする動作を説明した。本変形例では、路面推定の成否判定で成功と判定される路面が複数存在する場合、過去の履歴路面との差異が最小となる路面を含むセグメントを開始セグメントとする動作について説明する。
なお、本変形例に係る物体認識装置のハードウェア構成および機能ブロック構成は、第2の実施形態で説明した構成と同様である。また、本変形例に係る視差値導出部3のブロックマッチング処理についても、第2の実施形態で説明した動作と同様である。
(路面推定部の機能ブロック構成および動作)
図26は、第2の実施形態の変形例に係る物体認識装置の路面推定部の機能ブロック構成の一例を示す図である。図27は、路面推定が成功したセグメントが複数ある場合に誤ったセグメントを選択する動作の一例を示す図である。図28は、履歴路面に近い路面を含むセグメントを開始セグメントに設定する動作を説明する図である。図29は、ピッチングがない場合に路面の傾斜変化を説明する図である。図30は、ピッチングにより車両が前に傾く場合に路面の傾斜変化を説明する図である。図31は、ピッチングにより車両が後に傾く場合に路面の傾斜変化を説明する図である。図32は、ピッチングがある場合に履歴路面を用いた開始セグメント探索処理を説明する図である。図26〜図32を参照しながら、路面推定部400cの機能ブロックの具体的な構成および動作について説明する。
図26に示すように、本実施形態に係る物体認識装置の路面推定部400cは、入力部401と、Vマップ生成部402(第2生成部)と、分割部403と、開始セグメント探索部404cと、継続推定部405cと、スムージング部406と、出力部407と、履歴記憶部408と、を有する。なお、入力部401、Vマップ生成部402、分割部403、スムージング部406および出力部407の機能は、第2の実施形態で説明した機能と同様である。また、継続推定部405cの機能は、第2の実施形態で説明した継続推定部405bの機能と同様である。
開始セグメント探索部404cは、分割部403によって分割されたセグメントから、車両70が走行している路面の開始位置を含む開始セグメントを探索する開始セグメント探索処理を行う機能部である。
ここで、本変形例の開始セグメント探索処理の詳細について説明する。図27では、視差画像Ip9(図27(a)参照)から生成されたVマップVM9(図27(b)参照)が第1セグメント〜第7セグメントに分割され、複数のセグメント(第3セグメントおよび第5セグメント)で路面推定に成功し、最終的に得られた推定路面ER9とデフォルト路面DRとを比較した例を示している。ただし、図27では、VマップVM9では、視差画像Ip9に写っている軽トラックの視差値が路面の視差値と誤って判定され、第3セグメントでは、実際の路面とは異なる路面が推定されてしまっている例を示している。ここで、例えば、第2の実施形態のように、路面推定に成功した複数のセグメントのうち、最も近方に存在する推定路面を含む第3セグメントを開始セグメントとしてしまうと、この第3セグメントを基準に、以降のセグメント(図27の例では、第4セグメント〜第7セグメント)を順次推定していくため、路面推定に失敗するリスクが増加する。例えば、標本点の探索領域を前のセグメントの推定路面に決定していると標本点が好適に探索できなくなったり、前のセグメントの推定路面との角度差で成否判定を行っていると、正しい路面が推定できていたとしても失敗と誤判定されるリスクが増加する。さらに、開始セグメントよりも近方のセグメントについて、開始セグメントを延長して補間するものとすると、この延長された路面も不適切であるため、フレーム全体として推定路面の形状は不適切なものとなる。
一方、図27(b)において、第5セグメントは、正しく路面の視差を捉えており、路面推定に成功しているものとすると、開始セグメントとしてはこの第5セグメントを採用する方が望ましい。しかし、一フレーム内では、どちらのセグメントが正しく路面位置を捉えられているかを判定することは困難である。そこで、過去のフレームで算出された履歴路面を用い、路面推定に成功した各セグメントの推定路面との差異が最も小さい推定路面を含むセグメントを、開始セグメントとして設定する。ここで、履歴路面として、直近の一フレームでの推定路面を用いてもよく、一フレーム以上前の任意のフレームでの推定路面を用いてもよく、または、所定数のフレーム分の履歴路面を平均して合成した路面を用いるものとしてもよい。このように、履歴路面を用いて開始セグメントを設定することによって、着目しているフレームの路面の推定結果の信頼度を予測することができ、信頼度の高い推定路面を含むセグメントを開始セグメントとするので、路面の開始位置を精度よく検出することができる。具体的な履歴路面と推定路面との差異の算出方法としては、後述する第1設定部414cの動作の説明の中で後述する。
開始セグメント探索部404cは、図26に示すように、第1標本点選択部411(第1選択部)と、第1形状推定部412(第2推定部)と、第1判定部413と、第1設定部414cと、を有する。なお、第1標本点選択部411、第1形状推定部412および第1判定部413の機能は、第2の実施形態で説明した機能と同様である。
第1設定部414cは、第1判定部413による成否判定の結果に基づいて、開始セグメントを設定する機能部である。第1設定部414cは、第1判定部413により適切であると判定された推定路面が複数存在する場合、履歴記憶部408に記憶された過去のフレームで推定された推定路面に基づいて求めた履歴路面と、路面推定に成功した各セグメントの推定路面との差異が最も小さい推定路面(「所定の基準を満たす」推定路面の一例)を含むセグメントを、開始セグメントとして設定する。また、第1設定部414cは、第1判定部413により適切であると判定された推定路面が存在しない場合、所定のセグメントを開始セグメントに設定し、このセグメントに代わりとなる路面で補足する。路面を補足する方法としては、例えば、デフォルト路面または履歴路面を割り当てる方法等が挙げられる。
ここで、図28において、路面推定が成功した複数のセグメントのうち、履歴路面との差異が小さい推定路面を含むセグメントを開始セグメントに設定する方法の一例を示す。図28に示すVマップVM10は、第1セグメント〜第6セグメントに分割されており、第4セグメントおよび第5セグメントにおいて路面推定が成功しているものとする。また、第4セグメントの推定路面ER10aは、物体の視差値等の影響を受けて実際の路面よりも引き上がって推定された路面であるものとする。第1設定部414cは、図28に示すように、履歴記憶部408から読み出した履歴路面RRと、第4セグメントの推定路面ER10aおよび第5セグメントの推定路面ER10bとの差を算出する。具体的には、例えば、第1設定部414cは、路面推定に成功した各セグメントの始点(右端)および終端(左端)における推定路面と履歴路面RRとのy方向の差を算出し、その差の総和が最も小さい推定路面を含むセグメントを開始セグメントに設定する。図28の例では、第4セグメントの推定路面ER10aと履歴路面RRとの差の総和(α2+β2)と、第5セグメントの推定路面ER10bと履歴路面RRとの差の総和(α1+β1)とを比較した場合、総和(α1+β1)の方が、総和(α2+β2)よりも小さくなるので、第5セグメントを開始セグメントとして設定する。
なお、履歴路面との差を算出する他の方法としては、例えば、セグメントの中心のdp座標における各推定路面と履歴路面とのy方向の差を算出する方法、または、各推定路面の傾きと、履歴路面の傾きとの差を算出する方法等がある。つまり、履歴路面との差異を定量化できるものであれば、任意の尺度を使用することができる。
以上のように、履歴路面と、路面推定に成功した各セグメントの推定路面との差異が最も小さい推定路面を含むセグメントを開始セグメントとして設定することによって、偶発的に物体の視差値またはノイズ等に引っ張られて引き上がった路面または引き下がった路面を含むセグメントを、誤って開始セグメントとして設定するリスクを低減することができるので、開始セグメントを精度よく設定することができ、路面推定の精度が向上する。
次に、車両が段差等によってピッチングする場合を考える。車両がピッチングした場合、フレーム間(視差画像間)で出現する路面の視差画素は平行移動に近い移動となりやすい。これは、ピッチングすることによって、物体認識装置の撮像方向が変わった場合に同じ路面を見ると、物体認識装置からは路面の傾きが変わったように見えるためである。例えば、平坦な路面を走行中に、ピッチングにより物体認識装置の撮像方向が下方を向いたとすると、路面は相対的に上り坂になったように見える。
ここで、図29〜図31に示すように、車両の目前に上り坂の路面が存在する場合を想定する。図29に示す例では、図29(a)に示すように、ピッチングがない状態を示しており、図29(b)のVマップVM11aに示すように、この路面についての推定路面ER11aは、デフォルト路面DRに比べて高い位置に存在する。なお、VマップVM11aに記載している推定路面ER11aおよびデフォルト路面DRは、途中の距離からのものを示しているため、路面の始点は一致していないが、近方まで延長していくと、双方の路面の始点は一致する。これは後述する図30(b)および図31(b)においても同様である。
次に、図30(a)に示すように、車両に搭載された物体認識装置の撮像方向が下方向に傾くようにピッチングした場合を考える。この場合、物体認識装置の撮像方向と上り坂の路面との成す角度は急になり、図30(b)のVマップVM11bに示すように、推定路面ER11bは、図29(b)の推定路面ER11aよりも上方に位置することになる。
さらに、図31(a)に示すように、車両に搭載された物体認識装置の撮像方向が上方向に傾くようにピッチングした場合を考える。この場合、物体認識装置の撮像方向と上り坂の路面との成す角度は緩やかになり、図31(b)のVマップVM11cに示すように、推定路面ER11cは、図29(b)の推定路面ER11aよりも下方に位置し、デフォルト路面DRに近くなる。
このように、ピッチング時には、推定路面が上下に移動し、また、フレーム間においてその移動量は大きくならない場合が多い。ただし、推定路面の移動量はフレームレートに依存し、フレームレートが高いほど移動量が小さくなる。また、本変形例における履歴路面と推定路面との差を算出する方法では、ピッチングによって推定路面が上下に移動したとしても、図32のVマップVM12の推定路面ER12a、ER12bが示すように、各推定路面で算出した差の総和が大きくなるだけで、各推定路面で算出した差の総和同士の相対関係は変化しづらい。したがって、本変形例のように、履歴路面と、路面推定に成功した各セグメントの推定路面との差異が最も小さい推定路面を含むセグメントを開始セグメントとして設定する場合における路面推定の精度は、車両のピッチングの動作に対してロバストである。
履歴記憶部408は、過去のフレームで算出された推定路面である履歴路面の情報を記憶する機能部である。履歴記憶部408は、例えば、図3に示すRAM54によって実現される。
図26に示す入力部401、Vマップ生成部402、分割部403、開始セグメント探索部404c、継続推定部405c、スムージング部406および出力部407は、それぞれ図3に示すFPGA51によって実現される。なお、入力部401、Vマップ生成部402、分割部403、開始セグメント探索部404c、継続推定部405c、スムージング部406および出力部407の一部または全部は、ハードウェア回路であるFPGA51ではなく、ROM53に記憶されているプログラムがCPU52によって実行されることによって実現されるものとしてもよい。
なお、図26に示す路面推定部400cの入力部401、Vマップ生成部402、分割部403、開始セグメント探索部404c、継続推定部405c、スムージング部406、出力部407および履歴記憶部408は、機能を概念的に示したものであって、このような構成に限定されるものではない。例えば、図26に示す路面推定部400cで独立した機能部として図示した複数の機能部を、1つの機能部として構成してもよい。一方、図26に示す路面推定部400cで1つの機能部が有する機能を複数に分割し、複数の機能部として構成するものとしてもよい。
(路面推定処理)
図33は、第2の実施形態の変形例に係る路面推定部の路面推定処理の動作の一例を示すフローチャートである。図33を参照しながら、認識処理部5の路面推定部400cの路面推定処理の動作の流れについて説明する。
<ステップS71〜S80>
ステップS71〜S80の動作は、それぞれ、第2の実施形態の図25に示すステップS51〜S60の動作と同様である。そして、ステップS81へ移行する。
<ステップS81>
路面推定部400cの第1設定部414cは、第1判定部413により適切であると判定された推定路面が複数存在する場合、履歴記憶部408に記憶された過去のフレームで推定された推定路面に基づいて求めた履歴路面と、路面推定に成功した各セグメントの推定路面との差が最も小さい推定路面を含むセグメントを、開始セグメントとして設定する。また、第1設定部414cは、第1判定部413により適切であると判定された推定路面が存在しない場合、所定のセグメントを開始セグメントに設定し、このセグメントに代わりとなる路面で補足する。路面を補足する方法としては、例えば、所定のセグメント(例えば、第1セグメント)を開始セグメントに設定し、このセグメントにデフォルト路面または履歴路面等を設定する。なお、履歴路面と、路面推定に成功した各セグメントの推定路面との差の算出方法は、上述した通りである。そして、ステップS82へ移行する。
<ステップS82〜S89>
ステップS82〜S89の動作は、それぞれ、第2の実施形態の図25に示すステップS62〜S69の動作と同様である。そして、ステップS90へ移行する。
<ステップS90>
開始セグメント探索部404cおよび継続推定部405cは、Vマップ上において推定した全体の推定路面の情報を履歴記憶部408に記憶させる。なお、推定路面の情報の記憶方法としては、例えば、単純に履歴記憶部408に記憶されている最新の推定路面を上書きして記憶する方法でもよく、複数のバッファを有する場合は、新しい推定路面の情報として追加して記憶する方法でもよい。この場合、バッファの容量が限られている場合、FIFO(First−In First−Out)等の方式によって前のフレームの履歴路面の情報を削除するものとすればよい。また、複数のフレームでの推定路面を合成して履歴路面を生成する場合、所定のバッファに推定路面を記憶し、次回の路面推定時における履歴路面の生成に用いるものとすればよい。
以上のステップS71〜S90の処理により、路面推定部400cによる路面推定処理が行われる。
なお、図33に示すフローにおいて、開始セグメント探索部404cによるステップS76〜S78の処理、および、継続推定部405cによるS85〜S87の処理は、それぞれ、セグメントごとに直列的に実行するものとしてもよく、各ステップの処理をセグメント全体で並列的に処理するものとしてもよい。
以上のように、Vマップの各セグメントに対して路面推定を行った場合、路面推定の成否判定で成功と判定される路面が複数存在する場合、履歴記憶部408に記憶された過去のフレームの履歴路面と、路面推定に成功した各セグメントの推定路面との差異が最も小さい推定路面を含むセグメントを、開始セグメントとして設定するものとしている。これによって、偶発的に物体の視差値またはノイズ等に引っ張られて引き上がった路面または引き下がった路面を含むセグメントを、誤って開始セグメントとして設定するリスクを低減することができるので、開始セグメントを精度よく設定することができ、路面推定の精度が向上する。
また、上述の各実施形態および各変形例では、コスト値Cは非類似度を表す評価値としているが、類似度を表す評価値であってもよい。この場合、類似度であるコスト値Cが最大(極値)となるシフト量dが視差値dpとなる。
また、上述の各実施形態および各変形例では、車両70としての自動車に搭載される物体認識装置について説明したが、これに限定されるものではない。例えば、他の車両の一例としてバイク、自転車、車椅子または農業用の耕運機等の車両に搭載されるものとしてもよい。また、移動体の一例としての車両だけでなく、ロボット等の移動体であってもよい。
また、上述の各実施形態および各変形例において、物体認識装置の視差値導出部3および認識処理部5の各機能部の少なくともいずれかがプログラムの実行によって実現される場合、そのプログラムは、ROM等に予め組み込まれて提供される。また、上述の各実施形態および各変形例に係る物体認識装置で実行されるプログラムは、インストール可能な形式または実行可能な形式のファイルでCD−ROM、フレキシブルディスク(FD)、CD−R(Compact Disk Recordable)、DVD(Digital Versatile Disc)等のコンピュータで読み取り可能な記録媒体に記録して提供するように構成してもよい。また、上述の各実施形態および各変形例の物体認識装置で実行されるプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、上述の各実施形態および各変形例の物体認識装置で実行されるプログラムを、インターネット等のネットワーク経由で提供または配布するように構成してもよい。また、上述の各実施形態および各変形例の物体認識装置で実行されるプログラムは、上述した各機能部のうち少なくともいずれかを含むモジュール構成となっており、実際のハードウェアとしてはCPU52(CPU32)が上述のROM53(ROM33)からプログラムを読み出して実行することにより、上述の各機能部が主記憶装置(RAM54(RAM34)等)上にロードされて生成されるようになっている。