以下に、図1〜図22を参照しながら、本発明に係る画像処理装置、物体認識装置、機器制御システム、画像処理方法およびプログラムの実施形態を詳細に説明する。また、以下の実施形態によって本発明が限定されるものではなく、以下の実施形態における構成要素には、当業者が容易に想到できるもの、実質的に同一のもの、およびいわゆる均等の範囲のものが含まれる。さらに、以下の実施形態の要旨を逸脱しない範囲で構成要素の種々の省略、置換、変更および組み合わせを行うことができる。
[第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は、第1の実施形態において、Vマップ上の基準路面を使用してセグメントを設定する動作を説明する図である。図13は、視差画像から生成されるUマップの一例を示す図である。図7〜図13を参照しながら、物体認識装置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の詳細な構成および動作は、図15、図16および図18で後述する。
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と比較して左側に存在する。なお、下り坂を走行している場合は、車両は下り坂の路面に対して平行となるため、路面の視差は、平坦な路面を走行している場合と同様となる。
以上のように、推定路面の典型的な類型を示したが、路面推定を行う時点では、路面の勾配は未知であり、路面に対応する視差点がVマップ上のどの位置に分布しているのかを特定するのは困難である。図8(b)に示す例では、VマップVMが単純に等間隔に7つのセグメント(短冊状の部分領域)に分割され、路面が適切に推定できた例を示しているが、通常は、路面に対応する視差点が投票されていない位置にセグメントを設定してしまう可能性があり、さらに、細かく路面形状を推定しようとする領域に対して、広めのセグメントが設定されることにより、推定が粗い処理となる可能性もある。
そこで、本実施形態の認識処理部5の路面推定部400は、履歴路面またはデフォルト路面等を基準路面として用い、セグメントの位置を、路面に対応する視差点に合わせて設定する。具体的には、路面推定部400は、例えば、図12(a)に示す視差画像Ipに対応する図12(b)に示すVマップVM上のセグメントを、路面に対応する視差点に合わせて設定する場合、まず、視差画像Ipの所定のy座標(第1座標)を2つ選択する。ここで、図12(a)に示すように、視差画像Ip上で、選択された2つのy座標で挟まれた部分領域をセグメントSeg_pとする。次に、路面推定部400は、VマップVM上の基準路面SRにおけるこれらの2つのy座標をそれぞれ有する2つのdp座標(第2座標)を決定する。すなわち、基準路面SRは直線であるため、y座標が特定されていれば、直線である基準路面SRの傾きおよび切片は既知であるため、dp座標が一意に定まる。ここで、図12(b)に示すように、VマップVM上で、決定された2つのdp座標で挟まれた部分領域をセグメントSegとする。すなわち、視差画像Ip中のy座標は、基準路面SRを用いることによって、VマップVM上のdp座標に変換することができる。
基準路面SRとされる履歴路面は、1フレーム以上前のフレームで推定された過去の推定路面(過去の所定数のフレームで推定された路面を平均した路面であってもよい)であって、過去に路面に対応する視差値が投票された視差点に基づく路面である。また、基準路面SRとされるデフォルト路面は、多くの状況で路面に対応する視差値が投票された視差点に基づく路面を捉えたものである。したがって、上述のように、履歴路面またはデフォルト路面を基準路面SRとし、この基準路面SRを用いてセグメントSegを設定することによって、路面に対応する視差値が投票されると想定される視差点の位置をある程度予測することができる。ただし、フレーム間で車両70のピッチング等が影響して、路面に対応する視差値が投票される視差点の位置が大きく変わる場合があるが、その場合、ズレは生じるものの、VマップVMを適当に分割した場合と比較して、精度の高いセグメントの設定が可能となる可能性が高い。
また、基準路面SRの傾きに合わせて、視差画像Ip中のセグメントSeg_pに対応するVマップVM上のセグメントSegのdp方向の幅も動的に変化させることができる。例えば、基準路面SRの傾きが急勾配である場合、セグメントSegの両端のdp座標の間隔は狭くなる。したがって、基準路面SRを用いたセグメントの設定は、路面に対応する視差値が投票されている視差点の位置を推測するだけでなく、基準路面SRの勾配に合わせて、セグメントSegのdp方向の幅も適切に設定することができる。基準路面SRの勾配に合わせてセグメントの幅を動的に変える利点について説明する。例えば、急勾配の路面の場合、Vマップ上に含まれる路面の視差の情報量は減少する。例えば、同じ始点からデフォルト路面、および急勾配の路面がVマップに分布する場合を比較した場合、後者の路面は前者のデフォルト路面に比べて、早期にVマップの上端(または下端)を突き抜けることになる。一方、勾配が緩やかになる場合、逆にVマップに路面の視差の情報の情報量は増加する。以上により、急勾配の場合、セグメントの幅を狭くしてVマップに写る路面の視差点の部分に限定してセグメントを設定した方がよい。一方、路面が緩やかな勾配である場合、逆にセグメントの幅を広くした方がよい。
さらに、基準路面SRを用いたセグメントの設定では、視差画像Ip中のセグメントSeg_pに合わせて、VマップVM上のセグメントSegが決定されるため、例えば、遠方の領域は分解能が低いため、細かくセグメントSegを設定して路面推定を行おうとする場合は、セグメントSeg_pのサイズを小さく設定することで、セグメントSegのdp方向の幅も小さくすることができる。すなわち、視差画像Ipを見ながら、直感的にセグメントSegの大きさを決めることができる。
なお、路面は、視差画像Ipの下方から上方に向かって連続しているため、VマップVMにおけるセグメント間も連続するように設定することが望ましいが、これに限定されるものではなく、意図的にセグメントを不連続に設定するものとしてもよい。例えば、視差画像Ipにおいて、あるy座標の区間にノイズが含まれることが多いことがわかっている場合、この領域を避けるように2つのy座標を選択するものとしてもよい。この場合、対応するVマップVMのセグメントSegも所定の区間が抜けて、路面推定が行われないことになる。このとき、路面推定では、推定しない区間の路面を、それよりも近方のセグメントの推定路面を延長する等して補間するものとしてもよい。ただし、推定に失敗しやすい区間であるため、路面を推定せずに、この区間に存在する物体はクラスタリング処理が行われないようにしてもよい。
また、車両70の状態をCAN等から受けてピッチングが発生している場合には、路面に対応する位置の視差値の特定が困難になるため、固定のセグメントを設定するものとしてもよい。
また、履歴路面またはデフォルト路面を基準路面SRとする例を示したが、その他のVマップVM上に定義できる路面であれば任意のものを使用してもよい。例えば、遠方の視差値の精度が悪くなる性質を鑑みて、近方のセグメントで推定された路面を最後のセグメントまで延長した路面を基準路面としてもよい。
クラスタリング部450は、視差値導出部3から受信した基準画像Ia(輝度画像)および視差画像、ならびに、路面推定部400により出力されるVマップおよび推定路面の情報に基づいて、視差画像に写っている物体を検出する機能部である。具体的には、クラスタリング部450は、まず、Vマップ上において路面推定部400により推定された推定路面より上方に位置する情報のみを利用、すなわち、例えば、図13(a)に示す視差画像Ip4の左ガードレール611、右ガードレール612、車613および車614に対応する情報を利用して、物体を認識するために、図13(b)に示すU−Disparityマップ(以下、単に「Uマップ」と称する場合がある)であるUマップUMを生成する。ここで、U−Disparityマップとは、横軸を視差画像Ipのx軸とし、縦軸を視差画像Ipの視差値dp(または距離)とした、視差値dpの頻度分布を示す二次元ヒストグラムである。図13(a)に示す視差画像Ip4の左ガードレール611は、UマップUMにおいては左ガードレール部611aに対応し、右ガードレール612は、右ガードレール部612aに対応し、車613は、車部613aに対応し、車614は、車部614aに対応する。
なお、クラスタリング部450は、視差画像Ip4から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つの機能部が有する機能を複数に分割し、複数の機能部として構成するものとしてもよい。
<<視差値演算処理部の機能ブロック構成>>
図14は、第1の実施形態に係る物体認識装置の視差値演算処理部の機能ブロック構成の一例を示す図である。図14を参照しながら、視差値演算処理部300の機能ブロックの具体的な構成および動作について説明する。
図14に示すように、視差値演算処理部300は、コスト算出部301と、決定部302と、生成部303(第1生成部)と、を有する。
コスト算出部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で置き換えた画像である視差画像を生成する機能部である。
図14に示すコスト算出部301、決定部302および生成部303は、それぞれ図3に示すFPGA31によって実現される。なお、コスト算出部301、決定部302および生成部303の一部または全部は、ハードウェア回路であるFPGA31ではなく、ROM33に記憶されているプログラムがCPU32によって実行されることによって実現されるものとしてもよい。
なお、図14に示す視差値演算処理部300のコスト算出部301、決定部302および生成部303は、機能を概念的に示したものであって、このような構成に限定されるものではない。例えば、図14に示す視差値演算処理部300で独立した機能部として図示した複数の機能部を、1つの機能部として構成してもよい。一方、図14に示す視差値演算処理部300で1つの機能部が有する機能を複数に分割し、複数の機能部として構成するものとしてもよい。
<<路面推定部の機能ブロック構成>>
図15は、第1の実施形態に係る物体認識装置の路面推定部の機能ブロック構成の一例を示す図である。図16は、Vマップの生成動作を説明する図である。図15および図16を参照しながら、路面推定部400の機能ブロックの具体的な構成および動作について説明する。
図15に示すように、路面推定部400は、入力部401と、Vマップ生成部402(第2生成部)と、セグメント設定部403(設定部)と、推定部404と、スムージング部405と、出力部406と、を有する。
入力部401は、視差値演算処理部300から視差画像を入力する機能部である。
Vマップ生成部402は、入力部401により入力された視差画像の各視差画素の視差値を、Vマップの対応する視差点に投票することによってVマップを生成する機能部である。Vマップ生成部402によるVマップの生成において、視差画像のy座標とVマップのy座標とは対応関係にあり、視差画像の特定のy座標の水平ライン上の視差値は、Vマップの対応するy座標の水平ラインのいずれかの視差点に投票される。したがって、視差画像の同じ水平ラインに含まれる視差値は同値となるものも存在するため、Vマップの任意の座標の視差点には、視差値の頻度が格納されることになる。視差画像の特定の水平ラインにおいては、同じ路面であれば、視差値は互いに類似する値となるため、Vマップにおける路面に対応する視差点は密集して投票されることになる。
なお、Vマップ生成部402は、視差画像中の全ての視差画素の視差値をVマップに投票してもよいが、図16に示す視差画像Ip5のように、所定の領域(例えば、図16に示す投票領域701〜703)を設定し、その領域に含まれる視差画素の視差値のみを投票するものとしてもよい。例えば、路面は遠方になるにつれて、消失点に向かって狭くなっていくという性質を利用し、図16に示すように、路面の幅にあった投票領域を所定数設定する方法が考えられる。このように投票領域に制限することによって、路面以外のノイズがVマップに混入することを抑制することができる。
また、視差画像中の一水平ラインにおける視差画素を適宜間引いて投票するものとしてもよい。また、間引きに関しては、水平方向だけではなく、垂直方向に対して実行してもよい。
また、視差画像とVマップとの対応付けは、路面推定を視差画像の下方から上方に向けて行うことから、視差画像の下辺とVマップの下辺とが対応付くようにすることが望ましい。ただし、両者が一意に対応付くのであれば、任意の位置で対応付けてもよい。
セグメント設定部403は、Vマップ生成部402により生成されたVマップ上において、履歴路面またはデフォルト路面等を基準路面として用い、路面に対応する視差点に合わせてセグメントを設定する機能部である。具体的には、セグメント設定部403は、視差画像に対応するVマップ上のセグメントを、路面に対応する視差点に合わせて設定する場合、まず、視差画像の所定のy座標を2つ選択する。次に、セグメント設定部403は、Vマップ上の基準路面におけるこれらの2つのy座標をそれぞれ有する2つのdp座標を決定し、決定した2つのdp座標で挟まれた部分領域をセグメントとして設定する。
なお、セグメントは、等間隔に設定せずに所定の幅で設定してよい。例えば、遠方の領域は解像度が低い(路面の分解能が低い)ことは既知であるため、遠方に行くにつれて、セグメントを細かく設定する方法が考えられる。したがって、これに合わせてセグメントの数を決定すればよい。
また、設定されるセグメントはdp座標において設定されるものだが、y座標においてもセグメントを分割してもよい。例えば、Vマップにおいて、路面に対応する視差点が分布する位置が特定できる場合、y方向でセグメントに分割することにより、dp方向だけでセグメントに設定した場合よりも限定した領域内を処理することができる。これによって、ノイズの混入を抑制する効果が向上し、かつ、路面推定処理の処理時間の短縮に寄与する。なお、本実施形態においては、セグメントは、dp方向でのみ設定した短冊状の部分領域であるものとして説明する。
推定部404は、セグメント設定部403により設定されたセグメントにおいて路面を推定する機能部である。推定部404は、図15に示すように、標本点選択部411と、形状推定部412と、判定部413と、設定部414と、を有する。
標本点選択部411は、Vマップに投票された視差点(頻度点の一例)のうち、セグメント設定部403により設定されたセグメントである処理対象のセグメント(以下、「対象セグメント」と称する場合がある)における各dp座標の位置から、少なくとも1つ以上の代表点(以下、「標本点」と称する)を選択する機能部である。標本点の選択方法としては、例えば、各dp座標に対して、その垂直(縦)方向に存在する視差点のうち、単純に頻度の最も多い視差点(最頻点)を選択してもよく、または、着目するdp座標とその左右の複数の画素を併せてVマップの下方向から上方向に上げていき、路面の視差点が含まれ得る領域を制限した上で、その中から最頻点を選択するといように、より正確に路面の視差点を捉える方法を用いてもよい。または、視差点がない位置(座標)を標本点として選択してもよい。例えば、着目している座標(dp,y)には視差点は存在していないが、周囲に頻度が多い視差点が集中している場合、偶発的に座標(dp,y)の視差点が欠落している可能性があるため、この抜けている位置を標本点として選択することも可能である。
なお、標本点選択部411は、選択した標本点のうち、不適切な標本点を除去してもよい。これによって、後述する形状推定部412によって標本点群に対する直線近似の際に、不適切な標本点(外れ点)の影響を受けて、推定路面の形状が不適切になってしまうことを抑制することができる。外れ点の除去方法としては、例えば、一旦、対象セグメント内の全ての標本点を使って最小二乗法で直線近似し、近似直線から所定の距離離れた標本点を除去するものとしてもよい。この場合、外れ点を除去した状態で、再度、最小二乗法により推定した路面が最終的な推定路面となる。
形状推定部412は、標本点選択部411により選択された標本点群から路面形状の推定(路面推定)を行う機能部である。路面推定の方法としては、例えば、最小二乗法等によって標本点群に対して直線近似を行う方法、または、多項式近似等を用いて曲線形状を推定する方法等がある。または、路面推定の結果に対する成否判定に使用するための信頼度を算出する方法としてもよい。例えば、最小二乗法を使って直線近似した場合は、相関係数を信頼度として使用することができる。以降の説明では、特に断らない限り、路面推定は直線近似によるものとして説明する。
判定部413は、形状推定部412により推定された路面が、所定の成否判定条件を満たすか否かにより、路面推定が適切(成功)か否かを判定する機能部である。例えば、判定部413は、標本点の並びが右上並びに整列していると推定された場合、路面としては不適切(失敗)であると判定する。このような問題の発生の原因としては、例えば、個々の標本点の選択が独立して実行されることが挙げられる。また、判定部413による成否判定では、路面の信頼度を定量化できるのであれば、任意の尺度を利用して判定してもよい。例えば、標本点数が所定値よりも少ない場合は、路面の情報が少ない状態で推定した路面なので、不適切な傾きになっている可能性がある。したがって、この所定値を閾値として成否を分けるものとしてもよい。また、標本点群の分散状態を成否判定に採用することもできる。例えば、路面形状を推定する際に、最小二乗法を使っていた場合、近似直線を算出する際に相関係数も算出することができるため、この相関係数が所定値以下である場合に、推定路面がばらついた標本点群から推定された路面であると判定し、失敗と判定するものしてもよい。また、路面はセグメント間で連続しているという性質を利用して、対象セグメントの一つ前のセグメントで推定された路面との角度が所定範囲に入っているか否かを判定し、入っていない場合、失敗と判定してもよい。
設定部414は、判定部413による成否判定の結果に基づいて、対象セグメントでの適切な路面を設定する機能部である。例えば、設定部414は、形状推定部412により推定された路面が判定部413により適切であると判定した場合、その推定路面を対象セグメントでの適切な路面として設定する。また、設定部414は、形状推定部412により推定された路面が判定部413により不適切であると判定された場合、その代わりとなる路面で補足する。路面を補足する方法としては、例えば、デフォルト路面または履歴路面を割り当てる方法等が挙げられる。
スムージング部405は、推定部404により推定された路面に対してスムージング処理を行う機能部である。Vマップにおいて複数のセグメントが設定された場合、セグメント間で推定された路面が不連続になる可能性がある。そこで、ある2つのセグメントの推定路面のうち、一方の推定路面の始点の座標と、もう一方の推定路面の終点の座標とが所定のy座標を通るように修正する、すなわち、推定路面のVマップ上における傾きおよび切片を変更することによって、セグメント間で推定路面に連続性を担保する。所定のy座標としては、例えば、上述の一方の推定路面の始点のy座標と、もう一方の推定路面の終点のy座標との中点のy座標を採用することができる。このようなスムージング処理を行うことにより、あるセグメントでの推定結果が適していない場合に、修正される可能性があるため、路面推定の精度を向上させる効果がある。
出力部406は、スムージング部405によりスムージング処理されたVマップ上の推定路面の情報(路面情報)を、クラスタリング部450に出力する機能部である。なお、Vマップ上の推定路面の情報が、後段(クラスタリング部450等)で特に必要とされない場合においては、例えば、路面情報を図3に示すRAM54等に記憶させておくものとしてもよい。この場合、スムージング部405および出力部406は備えない構成としてもよい。
図15に示す入力部401、Vマップ生成部402、セグメント設定部403、推定部404、スムージング部405および出力部406は、それぞれ図3に示すFPGA51によって実現される。なお、入力部401、Vマップ生成部402、セグメント設定部403、推定部404、スムージング部405および出力部406の一部または全部は、ハードウェア回路であるFPGA51ではなく、ROM53に記憶されているプログラムがCPU52によって実行されることによって実現されるものとしてもよい。
なお、図15に示す路面推定部400の入力部401、Vマップ生成部402、セグメント設定部403、推定部404、スムージング部405および出力部406は、機能を概念的に示したものであって、このような構成に限定されるものではない。例えば、図15に示す路面推定部400で独立した機能部として図示した複数の機能部を、1つの機能部として構成してもよい。一方、図15に示す路面推定部400で1つの機能部が有する機能を複数に分割し、複数の機能部として構成するものとしてもよい。
(物体認識装置の動作)
次に、図17および図18を参照しながら、物体認識装置1の具体的な動作について説明する。
<視差値導出部のブロックマッチング処理>
図17は、第1の実施形態に係る視差値導出部のブロックマッチング処理の動作の一例を示すフローチャートである。図17を参照しながら、物体認識装置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)法を用いた処理であってもよい。
<路面推定処理>
図18は、第1の実施形態に係る路面推定部の路面推定処理の動作の一例を示すフローチャートである。図18を参照しながら、認識処理部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>>
路面推定部400は、セグメント設定部403により設定されるセグメントに対する路面推定を開始するために、現在処理しているインデックスをseg_indexとした場合、このインデックスを0に初期化する。なお、seg_indexの値域は、0〜(分割数−1)となるが、以降の説明では、インデックスは(セグメント番号−1)として説明する。そして、ステップS14へ移行する。
<<ステップS14>>
推定部404は、後述するようにセグメント設定部403により設定される所定のセグメント数分だけ路面推定および成否判定等の処理(ステップS17〜S20)を繰り返す。そして、ステップS15へ移行する。
<<ステップS15>>
セグメント設定部403は、Vマップ上のセグメントを、路面に対応する視差点に合わせて設定する場合、まず、視差画像の所定のy座標を2つ選択する。そして、ステップS16へ移行する。
<<ステップS16>>
セグメント設定部403は、Vマップ上の基準路面において、選択した2つのy座標をそれぞれ有する2つのdp座標を決定し、決定した2つのdp座標で挟まれた部分領域をセグメントとして設定する。なお、設定されるセグメントの横幅(dp方向の幅)は、他のセグメントと同値とならなくてもよい。例えば、遠方の路面を細かく推定したい場合は、遠方になるにつれ(Vマップではdp値が小さくなるにつれ)、セグメント幅が小さくなるように設定していけばよい。また、セグメントを細かく設定することで、より複雑な形状(例えば、平坦な路面から途中でアップダウンするような坂道の形状等)の路面を捉えることができる。そして、ステップS17へ移行する。
<<ステップS17>>
推定部404の標本点選択部411は、Vマップに投票された視差点のうち、セグメント設定部403により設定されたセグメントである対象セグメントにおける各dp座標の位置から、少なくとも1つ以上の標本点を選択する。なお、このとき、各dp座標で選択される標本点は、1点に限定されるものではなく、複数の標本点が選択されるものとしてもよい。また、Vマップ上に視差点が垂直方向に存在しないdp座標も存在することから、標本点を選択しないdp座標が存在してもよい。そして、ステップS18へ移行する。
<<ステップS18>>
推定部404の形状推定部412は、標本点選択部411により選択された標本点群から路面形状の推定(路面推定)を行う。そして、ステップS19へ移行する。
<<ステップS19>>
推定部404の判定部413は、形状推定部412により推定された路面が、所定の成否判定条件を満たすか否かにより、路面推定が適切(成功)か否かを判定する。推定部404の設定部414は、判定部413による成否判定の結果に基づいて、対象セグメントでの適切な路面を設定する。例えば、設定部414は、形状推定部412により推定された路面が判定部413により適切であると判定した場合、その推定路面を対象セグメントでの適切な路面として設定する。また、設定部414は、形状推定部412により推定された路面が判定部413により不適切であると判定された場合、その代わりとなる路面で補足する。そして、ステップS20へ移行する。
<<ステップS20>>
路面推定部400は、セグメント設定部403により設定される別のセグメントを対象セグメントとするために、インデックスseg_indexを、1だけインクリメントする。そして、ステップS21へ移行する。
<<ステップS21>>
路面推定部400は、セグメント設定部403および推定部404によってステップS15〜S20の処理を所定のセグメント数分だけ行ったか否かを判定する。所定のセグメント数分だけ処理を行っていない場合、ステップS15へ戻り、所定のセグメント数分だけ処理を行った場合、スムージング部405は、推定部404により推定された路面に対してスムージング処理を行う。そして、出力部406は、スムージング部405によりスムージング処理されたVマップ上の推定路面の情報(路面情報)を、クラスタリング部450に出力して路面推定処理を終了する。なお、スムージング部405によるスムージング処理では、着目するセグメントの推定路面が求められた後、この推定路面と、着目するセグメントの1つ前のセグメントの推定路面とを逐次的にスムージングを行うものとしてもよい。
以上のステップS11〜S21の処理により、路面推定部400による路面推定処理が行われる。
なお、図18に示すフローにおいて、ステップS15〜S19の処理を、セグメント設定部403により設定されるセグメントごとに直列的に実行するものとしてもよく、各ステップの処理を設定されたセグメントそれぞれに並列的に実行するものとしてもよい。
以上のように、履歴路面またはデフォルト路面を基準路面とし、選択した視差画像中のy座標を、この基準路面を用いることによって、Vマップ上のdp座標に変換し、セグメントを設定するものとしている。これによって、路面に対応する視差値が投票されると想定される視差点の位置をある程度予測することができ、路面推定の精度を向上させることができる。
[第2の実施形態]
第2の実施形態に係る物体認識装置について、第1の実施形態に係る物体認識装置1と相違する点を中心に説明する。第1の実施形態では、履歴路面またはデフォルト路面等をそのまま基準路面として用い、セグメントを設定する動作を説明した。本実施形態では、基準路面の切片を所定位置に固定してセグメントを設定する動作について説明する。
なお、本実施形態に係る物体認識装置のハードウェア構成および機能ブロック構成は、第1の実施形態で説明した構成と同様である。また、本実施形態に係る視差値演算処理部300および路面推定部400の機能ブロック構成についても、第1の実施形態で説明した構成と同様である。また、本実施形態に係る視差値導出部3のブロックマッチング処理についても、第1の実施形態で説明した動作と同様である。
(路面推定部の動作)
図19は、Vマップ上の基準路面がセグメントの設定に不向きな場合の一例を示す図である。図20は、第2の実施形態において、Vマップ上の固定点を切片とする基準路面を使用してセグメントを設定する動作を説明する図である。図19および図20を参照しながら、本実施形態に係る路面推定部400の具体的な動作について説明する。なお、上述のように、本実施形態に係る路面推定部400の機能ブロック構成は、第1の実施形態で説明した構成と同様である。
本実施形態のセグメント設定部403は、Vマップ生成部402により生成されたVマップ上において、履歴路面またはデフォルト路面等である基準路面を、所定の固定点を通るように補正した補正基準路面を用い、路面に対応する視差点に合わせてセグメントを設定する機能部である。
図19(b)に示すように、下り坂のシーン等でVマップVM6に示す基準路面SR6がデフォルト路面等と比較して低い位置に存在する場合、この基準路面SR6を用いて、第1の実施形態と同様にセグメントの設定を行うと、VマップVM6に収まらない領域をセグメントとして設定しまう可能性がある。これは、基準路面SR6が低い場合だけではなく、高い場合も同様に起こり得る。例えば、図19(a)に示す視差画像Ip6上で選択された2つのy座標で挟まれた部分領域であるセグメントSeg_p1を得る。そして、履歴路面等である基準路面SR6におけるこれらの2つのy座標をそれぞれ有する2つのdp座標を決定し、これらの2つのdp座標で挟まれたVマップVM6上の部分領域であるセグメントSeg1は、視差値dp<0の位置、すなわち、VマップVM6の外部の位置に設定されてしまう。この設定されたセグメントSeg1は、処理の対象とならない領域であるため不要な領域として設定されてしまう。このようになる理由は、視差画像のセグメントSeg_p1の位置が既に路面の消失点よりも高い位置を指しているため、本来路面が存在しない領域となるためである。
また、履歴路面はフレーム間で異なるため、システムとしても不安定になりやすく、例えば、車両70でピッチングが発生した場合、フレームごとに履歴路面は上下方向に変動する場合があり、上述のようなVマップの外部の位置にセグメントが設定される可能性がある。
そこで、本実施形態では、図20(b)に示すように、固定点FPを設け、基準路面SR6を、この固定点FPを切片とし、基準路面SR6の傾きを有するように補正して補正基準路面CSRとして使用する。例えば、セグメント設定部403は、図20(a)に示す視差画像Ip6においてセグメントSeg_p2を、セグメントとして最上位に設定した場合、このセグメントSeg_p2の上側のy座標を有し、視差値dp=0となるVマップVM6上の所定の位置を固定点FPとして設定する。この場合、固定点FPは、視差値dp=0であるため直線の切片となる。
次に、セグメント設定部403は、固定点FPを通るように基準路面SR6を、傾きをそのままに平行移動させ、この平行移動させた路面を補正基準路面CSRとする。そして、セグメント設定部403は、視差画像Ip6の所定のy座標(第1座標)を2つ選択し、VマップVM6の補正基準路面CSRにおけるこれらの2つのy座標をそれぞれ有する2つのdp座標(第2座標)を決定する。例えば、決定された2つのdp座標で挟まれた部分領域として、図20(b)に示すように、セグメントSeg2が設定される。すなわち、視差画像Ip6中のy座標は、補正基準路面CSRを用いることによって、VマップVM6上のdp座標に変換することができる。
以上のように、固定点FPを最上のy座標に設定すると、VマップVM6上のセグメントSeg2の左端は視差値dp=0に固定することができ、そこから補正基準路面CSRの傾きに合わせて、所定個数のセグメントを、幅を動的に変更させながら設定することができる。すなわち、セグメント数は固定し、セグメントの幅および位置を動的に変化させることができる。また、基準路面SR6を固定点FPを通る補正基準路面CSRに補正して使用することによって、VマップVM6上のセグメントを、視差値dp<0の位置、すなわち、VマップVM6の外部の位置に設定されてしまうことを抑制することができる。
なお、路面推定部400による路面推定処理は、図18に示すフローのうちステップS15およびS16の動作が、上述の本実施形態に係るセグメント設定部403の動作に置換されるのみで、他のステップの動作は、第1の実施形態と同様である。
また、上述の図20で示した例では、固定点FPを切片として有する補正基準路面CSRの例を示したが、固定点を通るように補正基準路面を設定するのであれば、任意の固定点を設定するものとしてもよい。例えば、上り坂に対応するために、セグメントの右端がVマップの右端となるように固定点を設定してもよい。
また、上述の図20で示した例では、補正基準路面の傾きに関しても、基準路面の傾きをそのままに平行移動させる例を示しているが、任意の傾きに設定するものとしてもよい。すなわち、基準路面を、固定点を通り、所定の傾きを有する路面に補正して補正基準路面を得るものとしてもよい。
[第3の実施形態]
第3の実施形態に係る物体認識装置について、第1の実施形態に係る物体認識装置1と相違する点を中心に説明する。第1の実施形態では、履歴路面またはデフォルト路面等を基準路面として用い、セグメントを設定する動作を説明した。本実施形態では、着目フレームに対応するVマップで推定された路面を基準路面として用い、セグメントを設定する動作について説明する。
なお、本実施形態に係る物体認識装置のハードウェア構成および機能ブロック構成は、第1の実施形態で説明した構成と同様である。また、本実施形態に係る視差値演算処理部300および路面推定部400の機能ブロック構成についても、第1の実施形態で説明した構成と同様である。また、本実施形態に係る視差値導出部3のブロックマッチング処理についても、第1の実施形態で説明した動作と同様である。
(路面推定部の動作)
図21は、第3の実施形態において、着目フレームで推定した路面を使用してセグメントを設定する動作を説明する図である。図21を参照しながら、本実施形態に係る路面推定部400の具体的な動作について説明する。なお、上述のように、本実施形態に係る路面推定部400の機能ブロック構成は、第1の実施形態で説明した構成と同様である。
本実施形態のセグメント設定部403は、Vマップ生成部402により生成された、着目フレームに対応するVマップ上において推定された路面を基準路面として、路面に対応する視差点に合わせてセグメントを設定する機能部である。
上述の第1の実施形態および第2の実施形態では、基準路面として履歴路面またはデフォルト路面等を使用している。しかし、厳密には履歴路面であっても着目フレームで推定すべき路面との差異が生じる場合がある。例えば、車両70においてピッチングが生じる場合、フレーム間で推定路面が上下に大きく変動するので、履歴路面を使用したとしても、着目フレームに対応するVマップにおいて、路面の視差点が分布する位置を正確に捉えることは困難である。
そこで、本実施形態では、基準路面として着目フレームに対応するVマップで推定された路面を用いる。すなわち、図21(b)に示すように、セグメント設定部403は、着目フレームに対応するVマップVM7において1つ前に路面推定が行われたセグメントの推定路面に基づく路面を基準路面として、セグメントを設定する。図21(a)に示す視差画像Ip7は、途中で路面が見切れる下り坂に差し掛かる状況を示す画像であるものとする。なお、図21(b)に示すVマップVM7は、基準路面の説明を簡便にするために、視差点の図示を省略している。
セグメント設定部403は、処理を下のセグメントから順に実行するものと仮定して、まず、視差画像Ip7上のセグメントSeg_p3aを設定する。このとき、VマップVM7において既に推定された路面は存在しないため、最初は、履歴路面またはデフォルト路面等を推定された路面とした推定路面ER7aを基準路面として使用する。セグメント設定部403は、この推定路面ER7aを基準路面として、視差画像Ip7上で設定したセグメントSeg_p3aから、VマップVM7上でセグメントSeg3aを設定する。
次に、セグメント設定部403は、視差画像Ip7上において、セグメントSeg_p3aの上側にセグメントSeg_p3bを設定する。セグメント設定部403は、このセグメントSeg_p3bに対応するVマップVM7上のセグメントを設定するために、セグメントSeg3aで推定された推定路面ER7aを延長した延長路面EXR7aを基準路面として使用する。セグメント設定部403は、この延長路面EXR7aを基準路面として、視差画像Ip7上で設定したセグメントSeg_p3bから、VマップVM7上でセグメントSeg3bを設定する。
さらに、セグメント設定部403は、視差画像Ip7上において、セグメントSeg_p3bの上側にセグメントSeg_p3cを設定する。セグメント設定部403は、このセグメントSeg_p3cに対応するVマップVM7上のセグメントを設定するために、セグメントSeg3bで推定された推定路面ER7bを延長した延長路面EXR7bを基準路面として使用する。セグメント設定部403は、この延長路面EXR7bを基準路面として、視差画像Ip7上で設定したセグメントSeg_p3cから、VマップVM7上でセグメントSeg3cを設定する。そして、推定部404は、設定されたセグメントSeg3cで推定路面ER7cを求める。すなわち、視差画像Ip7中のy座標は、1つ前に路面推定が行われたセグメントの推定路面の延長路面を基準路面として用いることによって、VマップVM7上のdp座標に変換することができる。
ここで、VマップVM7のセグメントSeg3bで推定された路面(推定路面ER7b)は、他の推定路面よりも傾きが緩やかになっている。したがって、この推定路面ER7bを延長した延長路面EXR7bを使用して設定されたセグメントSeg3cは幅が広いセグメントとなっている。このように、1つ前に路面推定が行われたセグメントの推定路面の延長路面を基準路面としてセグメントを設定することによって、より精度よく路面の勾配を捉えることができる。同様に、上り坂のシーンにおけるセグメントの設定処理を実行すると、今度は推定される路面の傾きが急になるため、急になった路面の視差点の位置に対応するセグメントの幅は狭くなる。
なお、延長路面は、1つ前に路面推定が行われたセグメントの推定路面から延長されたものに限定されるものではなく、例えば、着目セグメントよりも以前に推定された路面のうち、任意の路面から延長された路面を用いてもよい。例えば、1つ前に路面推定が行われたセグメントの推定路面が成否判定で失敗となっている場合、その推定路面の傾きが不適切になっている可能性があるため、直近に成否判定が成功となった推定路面の延長路面を使用してもよい。また、着目セグメント以前の複数のセグメントで推定された路面を平均した路面などを使用してもよい。
また、最初のセグメントについては、一つ前に路面推定が行われたセグメントの推定路面が得られないため、履歴路面またはデフォルト路面等を基準路面として用いるものとしていたが、これに限定されるものではなく、一フレーム前の同セグメントにおける推定路面を使用してもよい。
(路面推定処理)
図22は、第3の実施形態に係る路面推定部の路面推定処理の動作の一例を示すフローチャートである。図22を参照しながら、本実施形態に係る認識処理部5の路面推定部400の路面推定処理の動作の流れについて説明する。
<ステップS31〜S33>
ステップS31〜S33の処理は、それぞれ第1の実施形態の図18に示すステップS11〜S13の処理と同様である。そして、ステップS34へ移行する。
<ステップS34>
推定部404は、後述するようにセグメント設定部403により設定される所定のセグメント数分だけ路面推定および成否判定等の処理(ステップS37〜S41)を繰り返す。そして、ステップS35へ移行する。
<ステップS35>
セグメント設定部403は、Vマップ上のセグメントを、路面に対応する視差点に合わせて設定する場合、まず、視差画像の所定のy座標(第1座標)を2つ選択する。そして、ステップS36へ移行する。
<ステップS36>
セグメント設定部403は、設定しようとするVマップ上のセグメントでの路面推定に使用する基準路面として、1つ前に路面推定が行われたセグメントの推定路面の延長路面を設定する。なお、セグメント設定部403は、最初にVマップ上でセグメントを設定しようとする場合、既に推定された路面は存在しないため、履歴路面またはデフォルト路面等を基準路面として設定する。そして、ステップS37へ移行する。
<ステップS37>
セグメント設定部403は、ステップS36で設定した基準路面において、選択した2つのy座標をそれぞれ有する2つのdp座標(第2座標)を決定し、決定した2つのdp座標で挟まれた部分領域をセグメントとして設定する。なお、設定されるセグメントの横幅(dp方向の幅)は、他のセグメントと同値とならなくてもよい。例えば、遠方の路面を細かく推定したい場合は、遠方になるにつれ(Vマップではdp値が小さくなるにつれ)、セグメント幅が小さくなるように設定していけばよい。また、セグメントを細かく設定することで、より複雑な形状(例えば、平坦な路面から途中でアップダウンするような坂道の形状等)の路面を捉えることができる。そして、ステップS38へ移行する。
<ステップS38〜S41>
ステップS38〜S41の処理は、それぞれ第1の実施形態の図18に示すステップS17〜S20の処理と同様である。そして、ステップS42へ移行する。
<ステップS42>
路面推定部400は、セグメント設定部403および推定部404によってステップS35〜S41の処理を所定のセグメント数分だけ行ったか否かを判定する。所定のセグメント数分だけ処理を行っていない場合、ステップS35へ戻り、所定のセグメント数分だけ処理を行った場合、スムージング部405は、推定部404により推定された路面に対してスムージング処理を行う。そして、出力部406は、スムージング部405によりスムージング処理されたVマップ上の推定路面の情報(路面情報)を、クラスタリング部450に出力して路面推定処理を終了する。なお、スムージング部405によるスムージング処理では、着目するセグメントの推定路面が求められた後、この推定路面と、着目するセグメントの1つ前のセグメントの推定路面とを逐次的にスムージングを行うものとしてもよい。
以上のステップS31〜S42の処理により、本実施形態の路面推定部400による路面推定処理が行われる。
以上のように、1つ前に路面推定が行われたセグメントの推定路面の延長路面を基準路面としてセグメントを設定することによって、より精度よく路面の勾配を捉えることができる。
また、上述の各実施形態では、コスト値Cは非類似度を表す評価値としているが、類似度を表す評価値であってもよい。この場合、類似度であるコスト値Cが最大(極値)となるシフト量dが視差値dpとなる。
また、上述の各実施形態では、車両70としての自動車に搭載される物体認識装置について説明したが、これに限定されるものではない。例えば、他の車両の一例としてバイク、自転車、車椅子または農業用の耕運機等の車両に搭載されるものとしてもよい。また、移動体の一例としての車両だけでなく、ロボット等の移動体であってもよい。
また、上述の各実施形態において、物体認識装置の視差値導出部3および認識処理部5の各機能部の少なくともいずれかがプログラムの実行によって実現される場合、そのプログラムは、ROM等に予め組み込まれて提供される。また、上述の各実施形態に係る物体認識装置で実行されるプログラムは、インストール可能な形式または実行可能な形式のファイルでCD−ROM、フレキシブルディスク(FD)、CD−R(Compact Disk Recordable)、DVD等のコンピュータで読み取り可能な記録媒体に記録して提供するように構成してもよい。また、上述の各実施形態の物体認識装置で実行されるプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、上述の各実施形態の物体認識装置で実行されるプログラムを、インターネット等のネットワーク経由で提供または配布するように構成してもよい。また、上述の各実施形態の物体認識装置で実行されるプログラムは、上述した各機能部のうち少なくともいずれかを含むモジュール構成となっており、実際のハードウェアとしてはCPU52(CPU32)が上述のROM53(ROM33)からプログラムを読み出して実行することにより、上述の各機能部が主記憶装置(RAM54(RAM34)等)上にロードされて生成されるようになっている。