以下、添付図面を参照しながら、本発明に係る情報処理装置、撮像装置、機器制御システム、情報処理方法およびプログラムの実施形態を詳細に説明する。
(第1の実施形態)
図1は、実施形態の移動体制御システム100の概略構成を示す模式図である。図1に示すように、移動体制御システム100は、移動体の一例である自動車等の車両101に設けられる。移動体制御システム100は、撮像ユニット102、解析ユニット103、制御ユニット104及び表示部105を有している。
撮像ユニット102は、車両101のフロントガラス106のルームミラー付近に設けられ、車両101の例えば進行方向等の画像を撮像する。撮像ユニット102の撮像動作で得られる画像データを含む各種データは、解析ユニット103に供給される。解析ユニット103は、撮像ユニット102から供給される各種データに基づいて、車両101が走行中の路面、車両1の前方車両、歩行者、障害物等の認識対象物を解析する。制御ユニット104は、解析ユニット103の解析結果に基づいて、表示部105を介して、車両101の運転者へ警告等を行う。また、制御ユニット104は、解析結果に基づいて、各種車載機器の制御、車両101のハンドル制御又はブレーキ制御等の走行支援を行う。
図2は、撮像ユニット102及び解析ユニット103の概略的なブロック図である。この例では、解析ユニット103は「情報処理装置」として機能し、撮像ユニット102および解析ユニット103の組は「撮像装置」として機能する。なお、上述の制御ユニット104は、「制御部」として機能し、撮像装置の出力結果に基づいて機器(この例では車両101)を制御する。撮像ユニット102は、左目用となる第1のカメラ部1Aと、右目用となる第2のカメラ部1Bとの、2台のカメラ部が平行に組み付けられて構成されている。つまり、撮像ユニット102は、ステレオ画像を撮像するステレオカメラとして構成されている。ステレオ画像とは、複数の視点ごとの撮像で得られる複数の撮像画像(複数の視点と1対1に対応する複数の撮像画像)を含む画像であり、撮像ユニット102は、このステレオ画像を撮像するための装置である(「撮像部」として機能する)。各カメラ部1Aおよび1Bは、それぞれレンズ5、画像センサ6、センサコントローラ7を備えている。画像センサ6は、例えばCCDイメージセンサまたはCMOSイメージセンサとなっている。CCDは、「Charge Coupled Device」の略記である。また、CMOSは、「Complementary Metal-Oxide Semiconductor」の略記である。センサコントローラ7は、画像センサ6の露光制御、画像読み出し制御、外部回路との通信、および画像データの送信制御等を行う。
解析ユニット103は、データバスライン10、シリアルバスライン11、CPU15、FPGA16、ROM17、RAM18、シリアルIF19、およびデータIF20を有している。CPUは、「Central Processing Unit」の略記である。FPGAは、「Field-Programmable Gate Array」の略記である。ROMは、「Read Only Memory」の略記である。RAMは、「Random Access Memory」の略記である。IFは、「interface」の略記である。
上述の撮像ユニット102は、データバスライン10およびシリアルバスライン11を介して解析ユニット103と接続されている。CPU15は、解析ユニット103全体の動作、画像処理、および画像認識処理を実行制御する。第1のカメラ部1Aおよび第2のカメラ部1Bの画像センサ6で撮像された撮像画像の輝度画像データは、データバスライン10を介して解析ユニット103のRAM18に書き込まれる。CPU15またはFPGA16からのセンサ露光値の変更制御データ、画像読み出しパラメータの変更制御データ、および各種設定データ等は、シリアルバスライン11を介して送受信される。
FPGA16は、RAM18に保存された画像データに対してリアルタイム性が要求される処理である。FPGA16は、第1のカメラ部1Aおよび第2のカメラ部1Bでそれぞれ撮像された輝度画像データ(撮像画像)のうち、一方を基準画像とすると共に他方を比較画像とする。そして、FPGA16は、撮像領域内の同一地点に対応する基準画像上の対応画像部分と比較画像上の対応画像部分との位置ズレ量を、対応画像部分の視差値(視差画像データ)として算出する。
図3に、XZ平面上における被写体30と、第1のカメラ部1Aの撮像レンズ5Aと、第2のカメラ部1Bの撮像レンズ5Bとの位置関係を示す。この図3において、各撮像レンズ5A、5Bの間の距離b及び各撮像レンズ5A、5Bの焦点距離fは、それぞれ固定値である。また、被写体30の注視点Pに対する撮像レンズ5AのX座標のズレ量をΔ1とする。また、被写体30の注視点Pに対する撮像レンズ5BのX座標のズレ量をΔ2とする。この場合において、FPGA16は、被写体30の注視点Pに対する各撮像レンズ5A、5BのX座標の差である視差値dを、以下の式1で算出する。
解析ユニット103のFPGA16は、撮像ユニット102から供給される輝度画像データに対して、例えばガンマ補正処理及び歪み補正処理(左右の撮像画像の平行化)等のリアルタイム性が要求される処理を施す。また、FPGA16は、このようなリアルタイム性が要求される処理を施した輝度画像データを用いて上述の式1の演算を行うことで、視差画像データ(視差値D)を生成し、RAM15に書き込む。
図2に戻って説明を続ける。CPU15は、撮像ユニット102の各センサコントローラ7の制御、および解析ユニット103の全体的な制御を行う。また、ROM17には、後述する状況認識、予測、立体物認識等を実行するための立体物認識プログラムが記憶されている。立体物認識プログラムは、画像処理プログラムの一例である。CPU15は、データIF20を介して、例えば自車両のCAN情報(車速、加速度、舵角、ヨーレート等)をパラメータとして取得する。そして、CPU15は、ROM17に記憶されている立体物認識プログラムに従って、RAM18に記憶されている輝度画像および視差画像を用いて、状況認識等の各種処理を実行制御することで、例えば先行車両等の認識対象の認識を行う。CANは、「Controller Area Network」の略記である。
認識対象の認識データは、シリアルIF19を介して、制御ユニット104へ供給される。制御ユニット104は、認識対象の認識データを用いて自車両のブレーキ制御や自車両の速度制御等の走行支援を行う。
図4は、解析ユニット103が有する機能を概略的に説明するための図である。ステレオカメラを構成する撮像ユニット102で撮像されるステレオ画像は解析ユニット103へ供給される。例えば第1のカメラ部1Aおよび第2のカメラ部1Bがカラー仕様の場合、第1のカメラ部1Aおよび第2のカメラ部1Bの各々は、以下の式2の演算を行うことで、RGB(赤緑青)の各信号から輝度(Y)信号を生成するカラー輝度変換処理を行う。第1のカメラ部1Aおよび第2のカメラ部1Bの各々は、カラー輝度変換処理により生成した輝度画像データ(撮像画像)を、解析ユニット103が有する前処理部111へ供給する。第1のカメラ部1Aで撮像された輝度画像データ(撮像画像)と、第2のカメラ部1Bで撮像された輝度画像データ(撮像画像)との組がステレオ画像であると考えることができる。この例では、前処理部111は、FPGA16により実現される。
前処理部111は、第1のカメラ部1Aおよび第2のカメラ部1Bから受け取った輝度画像データの前処理を行う。この例では、前処理としてガンマ補正処理を行う。そして、前処理部111は、前処理を行った後の輝度画像データを平行化画像生成部112へ供給する。
平行化画像生成部112は、前処理部111から供給された輝度画像データに対して、平行化処理(歪み補正処理)を施す。この平行化処理は、第1のカメラ部1A、第2のカメラ部1Bから出力される輝度画像データを、2つのピンホールカメラが平行に取り付けられたときに得られる理想的な平行化ステレオ画像に変換する処理である。具体的には、各画素の歪み量を、Δx=f(x、y)、Δy=g(x、y)という多項式を用いて計算した計算結果を用いて、第1のカメラ部1A、第2のカメラ部1Bから出力される輝度画像データの各画素を変換する。多項式は、例えば、x(画像の横方向位置)、y(画像の縦方向位置)に関する5次多項式に基づく。これにより、第1のカメラ部1A、第2のカメラ部1Bの光学系の歪みを補正した平行な輝度画像を得ることができる。この例では、平行化画像生成部112は、FPGA16により実現される。
視差画像生成部113は、「距離画像生成部」の一例であり、撮像ユニット102により撮像されたステレオ画像から、画素毎に距離情報を備えた距離画像の一例である、画素毎に視差値を備えた視差画像を生成する。ここでは、視差画像生成部113は、第1のカメラ部1Aの輝度画像データを基準画像データとし、第2のカメラ部1Bの輝度画像データを比較画像データとし、上述の式1に示す演算を行うことで、基準画像データと比較画像データの視差を示す視差画像データを生成する。具体的には、視差画像生成部113は、基準画像データの所定の「行」について、一つの注目画素を中心とした複数画素(例えば16画素×1画素)からなるブロックを定義する。一方、比較画像データにおける同じ「行」において、定義した基準画像データのブロックと同じサイズのブロックを1画素ずつ横ライン方向(X方向)へズラす。そして、視差画像生成部113は、基準画像データにおいて定義したブロックの画素値の特徴を示す特徴量と比較画像データにおける各ブロックの画素値の特徴を示す特徴量との相関を示す相関値を、それぞれ算出する。
また、視差画像生成部113は、算出した相関値に基づき、比較画像データにおける各ブロックの中で最も基準画像データのブロックと相関があった比較画像データのブロックを選定するマッチング処理を行う。その後、基準画像データのブロックの注目画素と、マッチング処理で選定された比較画像データのブロックの対応画素との位置ズレ量を視差値Dとして算出する。このような視差値Dを算出する処理を基準画像データの全域又は特定の一領域について行うことで、視差画像データを得る。なお、視差画像の生成方法としては、公知の様々な技術を利用可能である。要するに、視差画像生成部113は、ステレオカメラで撮像されるステレオ画像から、画素毎に距離情報を有する距離画像(この例では視差画像)を算出(生成)していると考えることができる。
マッチング処理に用いるブロックの特徴量としては、例えばブロック内の各画素の値(輝度値)を用いることができる。また、相関値としては、例えば基準画像データのブロック内の各画素の値(輝度値)と、これらの画素にそれぞれ対応する比較画像データのブロック内の各画素の値(輝度値)との差分の絶対値の総和を用いることができる。この場合、当該総和が最も小さくなるブロックが、最も相関があるブロックとして検出される。
このような視差画像生成部113のマッチング処理としては、例えば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(推定誤差補正)等の手法を用いてもよい。
この例では、視差画像生成部113は、FPGA16により実現される。視差画像生成部113により生成された視差画像は、物体検出処理部114へ供給される。この例では、物体検出処理部114の機能は、CPU15が立体物認識プログラムを実行することにより実現される。
図5は、物体検出処理部114が有する機能の一例を示す図である。図5に示すように、物体検出処理部114は、路面検出処理部122、クラスタリング処理部123、トラッキング処理部124を有する。
路面検出処理部122は、視差画像生成部113から入力される視差画像を用いて、オブジェクトの高さの基準となる基準オブジェクトの一例である路面を検出する。図6に示すように、路面検出処理部122は、取得部125と、第1の生成部126と、路面推定部127と、を有する。取得部125は、画素毎に距離情報を有する距離画像の一例である視差画像を取得する。取得部125により取得された視差画像は第1の生成部126および後述のクラスタリング処理部123へ入力される。
第1の生成部126は、「生成部」の一例であり、視差画像に含まれる複数の画素に基づいて、視差画像の縦方向の位置と、ステレオカメラの光軸の方向を示す奥行方向の位置とが対応付けられた対応情報を生成する。この例では、第1の生成部126は、視差画像の各画素を、画像の垂直方向の座標(y)を縦軸、視差値dを横軸とする2次元ヒストグラム上に投票して、上述の対応情報を生成する。以下の説明では、この対応情報を「Vマップ(V−Disparityマップ)」と称する。Vマップは、視差画像の(x座標値、y座標値、視差値d)の組のうち、横軸(x軸)を視差値d、縦軸(y軸)をy座標値、奥行方向の軸(z軸)を頻度とした2次元ヒストグラムである。要するに、Vマップは、縦方向の位置と視差値d(奥行方向の位置に相当)との組み合わせごとに、視差値dの頻度値を記録した情報であると考えることもできる。以下の説明では、Vマップ内の座標点のうち、視差画像に含まれる視差値dを有する画素(視差画素)が投票された座標を視差点と称する場合がある。なお、Vマップの生成において、視差画像のy座標とVマップのy座標とは対応関係にあり、視差画像の特定のy座標の水平ライン上の視差値dは、Vマップの対応するy座標の水平ラインのうち、該視差値dに対応する点(Vマップ上の座標点)に投票される。したがって、視差画像の同じ水平ラインに含まれる視差値dは同値となるものも存在するため、Vマップの任意の座標点には、同値の視差値dの数を示す頻度値が格納されることになる。視差画像の特定の水平ラインにおいては、同じ路面であれば、視差値dは互いに類似する値となるため、Vマップにおける路面に対応する視差画素は密集して投票されることになる。
なお、第1の生成部126は、視差画像中の全ての視差画素を投票してもよいが、図7に示す視差画像Ipのように、所定の領域(例えば、図7に示す投票領域701〜703)を設定し、その領域に含まれる視差画素のみを投票するものとしてもよい。例えば、路面は遠方になるにつれて、消失点に向かって狭くなっていくという性質を利用し、図7に示すように、路面の幅にあった投票領域を所定数設定する方法が考えられる。このように投票領域を制限することによって、路面以外のノイズがVマップに混入することを抑制することができる。また、視差画像中の一水平ラインにおける視差画素を適宜間引いて投票するものとしてもよい。また、間引きに関しては、水平方向だけではなく、垂直方向に対して実行してもよい。
第1の生成部126により生成されたVマップは、図6に示す路面推定部127へ入力される。路面推定部127は、Vマップ内の投票された視差点から所定の方法で標本点を選択し、選択された点群を直線近似(または、曲線近似)する形で路面の形状を推定する。ここでは、オブジェクトの高さの基準となる基準オブジェクトは路面に相当する。路面推定部127の具体的な内容については後述する。路面推定部127による推定結果(路面推定情報)は、クラスタリング処理部123へ入力される。
クラスタリング処理部123は、路面推定情報を用いて、取得部125により取得された視差画像上の物***置を検出する。図8は、クラスタリング処理部123の詳細な構成の一例を示す図である。図8に示すように、クラスタリング処理部123は、第2の生成部130と、孤立領域検出処理部140と、視差画処理部150と、棄却処理部150と、を有する。第2の生成部130は、視差画像のうち、路面(基準オブジェクトの一例)よりも高い範囲に存在する複数の画素を用いて、ステレオカメラの光軸と直交する方向を示す横方向の位置と、ステレオカメラの光軸の方向を示す奥行方向の位置とが対応付けられた第2の対応情報を生成する。この例では、第2の対応情報は、横軸(X軸)を横方向の実際の距離(実距離)、縦軸(Y軸)を視差画像の視差値d、奥行方向の軸(Z軸)を頻度とした2次元ヒストグラムである。第2の対応情報は、実距離と視差値dとの組み合わせごとに、視差の頻度値を記録した情報であると考えることもできる。
ここで、上述の路面推定部127の路面推定により、路面を表す直線式が得られているため、視差dが決まれば、対応するy座標y0が決まり、この座標y0が路面の高さとなる。例えば視差値がdでy座標がy’である場合、y’−y0が視差値dのときの路面からの高さを示す。上述の座標(d,y’)の路面からの高さHは、H=(z×(y’−y0))/fという演算式で求めることができる。なお、この演算式における「z」は、視差値dから計算される距離(z=Bf/(d−offset))、「f」は撮像ユニット102の焦点距離を(y’−y0)の単位と同じ単位に変換した値である。ここで、BFは、撮像ユニット102の基線長Bと焦点距離fを乗じた値、offsetは無限遠のオブジェクトを撮影したときの視差である。
第2の生成部130は、第2の対応情報として、「Adult Large Umap」、「Large Umap」、「Small Umap」のうちの少なくとも1つを生成する。以下、これらのマップについて説明する。まず、「Adult Large Umap」について説明する。視差画像の横方向の位置をx、縦方向の位置をy、画素ごとに設定される視差値をdとすると、第2の生成部130は、視差画像のうち、路面よりも高い第1の範囲内の所定値以上の高さの範囲を示す第2の範囲内に存在する点(x、y、d)を、(x、d)の値に基づいて投票することで、横軸を視差画像のx、縦軸を視差値d、奥行方向の軸を頻度とした2次元ヒストグラムを生成する。そして、この2次元ヒストグラムの横軸を実距離に変換して、Adult Large Umapを生成する。
例えば図9に示す撮像画像においては、大人と子供を含む人グループ1と、大人同士の人グループ2と、ポールと、車両とが映り込んでいる。この例では、路面からの実高さが150cm〜200cmの範囲が第2の範囲として設定され、該第2の範囲の視差値dが投票されたAdult Large Umapは図10のようになる。高さが150cm未満の子供の視差値dは投票されないためマップ上に現れないことになる。なお、縦軸は、距離に応じた間引き率を用いて視差値dを間引き処理した間引き視差となっている。第2の生成部130により生成されたAdult Large Umapは孤立領域検出処理部140に入力される。
次に、「Large Umap」について説明する。視差画像の横方向の位置をx、縦方向の位置をy、画素ごとに設定される視差値をdとすると、第2の生成部130は、視差画像のうち第1の範囲内に存在する点(x、y、d)を、(x、d)の値に基づいて投票することで、横軸を視差画像のx、縦軸を視差値d、奥行方向の軸を頻度とした2次元ヒストグラムを生成する。そして、この2次元ヒストグラムの横軸を実距離に変換して、Large Umapを生成する。図9の例では、0cm〜200cmの範囲(上述の第2の範囲を含んでいる)が第1の範囲として設定され、該第1の範囲の視差値dが投票されたLarge Umapは図11のようになる。また、第2の生成部130は、Large Umapと併せて、Large Umapに投票される視差点(実距離と視差値dとの組)のうち、路面からの高さ(h)が最も高い視差点の高さを記録して、横軸を実距離(カメラの左右方向の距離)、縦軸を視差値dとし、対応する点ごとに高さが記録された高さ情報を生成することもできる。高さ情報は、実距離と視差値dとの組み合わせごとに高さを記録した情報であると考えてもよい。以下の説明では、この高さ情報を、「Large Umapの高さマップ」と称する。「Large Umapの高さマップ」に含まれる各画素の位置はLarge Umapに含まれる各画素の位置に対応している。第2の生成部130により生成されたLarge UmapおよびLarge Umapの高さマップは孤立領域検出処理部140に入力される。
次に、「Small Umap」について説明する。視差画像の横方向の位置をx、縦方向の位置をy、画素ごとに設定される視差値をdとすると、第2の生成部130は、視差画像のうち第1の範囲内に存在する点(x、y、d)を、(x、d)の値に基づいて投票(Large Umapを作成する場合よりも少ない数を投票)することで、横軸を視差画像のx、縦軸を視差値d、奥行方向の軸を頻度とした2次元ヒストグラムを生成する。そして、この2次元ヒストグラムの横軸を実距離に変換して、Small Umapを生成する。Small Umapは、Large Umapと比較して1画素の距離分解能が低い。また、第2の生成部130は、Small Umapと併せて、Small Umapに投票される視差点(実距離と視差値dとの組)のうち、路面からの高さ(h)が最も高い視差点の高さを記録して、横軸を実距離(カメラの左右方向の距離)、縦軸を視差値dとし、対応する点ごとに高さが記録された高さ情報を生成することもできる。高さ情報は、実距離と視差値dとの組み合わせごとに高さを記録した情報であると考えてもよい。以下の説明では、この高さ情報を、「Small Uマップの高さmap」と称する。「Small Umapの高さmap」に含まれる各画素の位置はSmall Umapに含まれる各画素の位置に対応している。第2の生成部130により生成されたSmall UmapおよびSmall Uマップの高さマップは孤立領域検出処理部140に入力される。
この例では、第2の生成部130はLarge Umapを生成し、その生成されたLarge Umapが孤立領域検出処理部140に入力される場合を例に挙げて説明するが、これに限らず、例えば「Adult Large Umap」、「Large Umap」、「Small Umap」を用いて物体検出を行う場合は、第2の生成部130は、「Adult Large Umap」、「Large Umap」、「Small Umap」を生成し、これらのマップが孤立領域検出処理部140に入力されてもよい。
図8に戻って説明を続ける。孤立領域検出処理部140は、前述の第2の対応情報(この例ではLarge Umap)から、視差値dの塊の領域である孤立領域(集合領域)を検出する。例えば図12に示す撮像画像の場合、左右にガードレール81、82があり、車両77及び車両79がセンターラインを挟んで対面通行をしている。各走行車線には、それぞれ1台の車両77又は車両79が走行している。車両79とガードレール82との間には2本のポール80A,80Bが存在している。図13は、図12に示す撮像画像に基づいて得られたLarge Umapであり、枠で囲まれた領域が孤立領域に相当する。
図8に示す視差画処理部150は、孤立領域検出処理部140により検出された孤立領域に対応する視差画像上の領域や実空間での物体情報を検出する視差画処理を行う。図14は、図13に示す孤立領域に対応する視差画像上の領域(視差画処理部150による処理の結果)を示す図であり、図14の領域91はガードレール81に対応する領域であり、領域92は車両77に対応する領域であり、領域93は車両79に対応する領域であり、領域94はポール80Aに対応する領域であり、領域95はポール80Bに対応する領域であり、領域96はガードレール82に対応する領域である。
図8に示す棄却処理部160は、視差画処理部150により検出された視差画上の領域や実空間での物体情報に基づき、出力すべきオブジェクトを選別する棄却処理を行う。棄却処理部160は、物体のサイズに着目したサイズ棄却と、物体同士の位置関係に着目したオーバラップ棄却とを実行する。例えばサイズ棄却では、図15に示すオブジェクトタイプごとに定められたサイズ範囲に当てはまらないサイズの検出結果を棄却する。例えば図16の例では、領域91および領域96は棄却されている。また、オーバラップ棄却では、視差画処理により検出された、視差画上の孤立領域に対応する領域同士に対し、重なりを持つ結果の取捨選択を行う。
クラスタリング処理部123からの出力情報(検出結果)は図5に示すトラッキング処理部124に入力される。トラッキング処理部124は、クラスタリング処理部123による検出結果(検出された物体)が複数のフレームにわたって連続して出現する場合に追跡対象であると判定し、追跡対象である場合には、その検出結果を物体検出結果として制御ユニット104へ出力する。制御ユニット104は、物体検出結果に基づいて、実際に車両101を制御する。
以下では、基準オブジェクトの一例である路面の形状を推定する路面推定部127(図6)の具体的な内容を説明する。図17は、路面推定部127が有する機能の一例を示す図である。図17に示すように、路面推定部127は、分割部171と、推定部172と、棄却部173と、補間部174と、を有する。
分割部171は、第1の生成部126から入力されるVマップ(対応情報)を複数のセグメントに分割する。この例では、分割部171は、Vマップを、奥行方向(視差値dの方向、Vマップの横軸の方向)に連続する複数のセグメントに分割する。ただし、これに限らず、例えば視差画像のy方向(Vマップの縦軸方向)に分割してもよい。また、セグメントの位置は任意の位置に設定することが可能である。通常、セグメント間は連続させることが望ましいが、不連続となっても構わない(例えば、所定距離範囲(d値)での推定をあえて実行しない場合など)。本実施形態では、セグメントは2つ以上設定する。セグメントは、等間隔に設定せずに所定の幅で設定することもできる。例えば、遠方領域は解像度が低い(路面分解能が低い)ことがわかっているため、遠方に行くに連れて、セグメントを細かく分割する方法が考えられる。従って、上記に合わせてセグメント数を決定すれば良い。
例えば、第1の生成部126が、図18の(A)に示す視差画像Ip2から図18の(B)に示すVマップを生成し、このVマップが分割部171に入力される場合を想定する。図18の(A)に示す視差画像Ip2には、路面600と、軽トラック601とが写り込んでいる。この視差画像Ip2内の軽トラック600は、図18の(B)に示すVマップにおいて603で示された投票点群(視差点群)に対応している。分割部171は、図18の(B)に示すVマップを、所定のd座標の範囲で区切られた複数のセグメントに分割する。図19は、分割部171による分割で得られた複数のセグメントの一例を示す図であり、右から順番に、第1セグメントseg1、第2セグメントseg2、第3セグメントseg3、第4セグメントseg4、第5セグメントseg5、第6セグメントseg6、第7セグメントseg7と称する。
図17の説明を続ける。推定部172は、対応情報を分割した複数のセグメントごとに、路面(基準オブジェクトの一例)の形状を推定する。より具体的には、推定部172は、セグメントごとに以下の処理を行う。まず推定部172は、処理対象のセグメント(以下、「対象セグメント」と称する場合がある)における視差値dの方向(奥行方向)の各座標(以下、「d座標」と称する場合がある)の位置から、所定の個数(例えば1点など)の代表点(以下、「標本点」と称する)を選択する。標本点の選択方法としては、例えば、各d座標に対して、その垂直(縦)方向に存在する視差点のうち、単純に頻度の最も多い視差点(最頻点)を選択してもよく、または、着目するd座標とその左右の複数の画素を併せてVマップの下方向から上方向に上げていき、路面の視差点が含まれ得る領域を制限した上で、その中から最頻点を選択するといったように、より正確に路面の視差点を捉える方法を用いてもよい。または、視差点がない位置(座標)を標本点として選択してもよい。例えば、着目している座標(d,y)には視差点は存在していないが、周囲に頻度が多い視差点が集中している場合、偶発的に座標(d,y)の視差点が欠落している可能性があるため、この抜けている位置を標本点として選択することも可能である。
また、推定部172は、以上のようにして選択した標本点のうち、不適切な標本点を除去してもよい。これによって、後述の標本点群に対する直線近似の際に、不適切な標本点(外れ点)の影響を受けて、路面の推定結果が不適切になってしまうことを抑制することができる。外れ点の除去方法としては、例えば、一旦、対象セグメント内の全ての標本点を使って最小二乗法で直線近似し、近似直線から所定の距離離れた標本点を除去するものとしてもよい。この場合、外れ点を除去した状態で、再度、最小二乗法により推定した結果が最終的な推定結果となる。
推定部172は、残った標本点を使って、路面の形状を推定する。路面の形状を推定する方法としては、例えば、最小二乗法等によって標本点群に対して直線近似を行う方法、または、多項式近似等を用いて曲線形状を推定する方法等がある。同時に、後段の成否判定(路面の形状を推定した結果に対する成否判定)に使用するために、これらの手法に基づいた相関係数などの数値尺度を算出しておいても良い。以降の説明では、特に断らない限り、路面の形状推定は直線近似によるものとして説明する。また、路面の形状の推定結果を推定路面と称する場合がある。
ここで、例えば図18の(A)の視差画像Ip2における台形形状の領域711内の視差画素がVマップ生成時の投票対象である場合を想定する。そして、領域711に含まれる2つの領域712および領域713のうち、領域712は路面の視差画素(視差値を有する画素)が存在する領域を表し、領域713は路面の視差画素が存在しない領域を表すものとする。したがって、図18に示す対応関係で、視差画像Ip2のy座標に存在する視差画素はVマップ上の対応する座標(d,y)に投票されたと仮定すると、領域712内の路面に対応する視差画素は路面として投票されるが、領域713には路面に対応する視差画素が存在しないので投票されない。また、軽トラック601は荷台部分612とキャビン部分611とでカメラからの距離が異なるため、それぞれに対応する視差画素は、Vマップ上の異なるセグメントに投票される。さらに、軽トラック601には荷台カバーが存在するため、画像の下から上に向かうにつれて緩やかに距離が変化していくため、Vマップ上では路面の視差分布と類似する。このため、推定される路面は、軽トラックに対応する視差(物体視差)の影響を受けてしまい、正解路面(実際の路面)に比べて高い位置に推定されてしまう。
そこで、本実施形態では、セグメントごとに、該セグメントにおける推定路面を延長して延長路面を設定し、延長路面よりも下方に存在する視差値dの頻度値が一定以上存在する場合には、該延長路面に対応する推定路面は物体視差の影響を受けて引き上がっていると判断し、該当推定路面を棄却する(推定は失敗と判断する)。以下、具体的な内容を説明する。
図17に示す棄却部173は、セグメントごとに、推定部172により推定された推定路面(路面の形状を示す推定形状)に基づいて設定された所定の形状を基準に、投票された画素の視差値dの分布(より具体的には、Vマップ上の投票点の分布(視差値dの頻度値の分布))が所定の基準に合致する場合は、推定路面を棄却する。上記所定の形状は、推定路面に基づく形状を、隣接するセグメントまで延長させた形状を含む。この例では、推定路面を、そのまま隣接するセグメントまで延長させた形状(以下、「延長路面」と称する)を上記所定の形状としているが、これに限らず、上記所定の形状は、後述のマージン線であってもよい。棄却部173は、延長路面よりも下方に存在する視差値dの頻度値の分布に応じて、推定路面を棄却するか否かを決定する。より具体的には、棄却部173は、延長路面よりも下方に存在する視差値dの頻度値が閾値以上の場合、推定路面を棄却する。
通常、図20の第7セグメントseg7における推定路面Bのように正解路面を推定できている場合、該推定路面Bを、隣接する第6セグメントseg6まで延長した延長路面Bの下方に存在する視差値dの頻度値は少量となる(または出現しない)。一方で、第3セグメントseg3における推定路面Aのように物体視差により路面が引き上がってしまっている場合、該推定路面Aを、隣接する第2セグメントseg2まで延長した延長路面Aの下方には物体視差(荷台612に対応する視差)が存在する。したがって、棄却部173は、延長路面Aよりも下方に存在する視差値dの頻度値を計測し、視差値dの頻度値が閾値以上の場合は、推定路面Aを棄却する。このような処理をセグメントごとに実行する。なお、推定路面の成否判定として、上記処理に加えて、角度による成否判定や標本点群の分散による成否判定などの異なる成否判定を併せて適用しても構わない。なお、角度による成否判定の一例として、推定路面の実角度が所定値を超えていた場合に該推定路面を棄却する態様などがある。また、標本点群の分散による成否判定の一例として、ばらついた点群から推定された路面はその形状が信頼できないものとして、該推定路面を棄却する態様などがある。
なお、実際には路面視差は分散する可能性があるので(例えば遠方に向かうほど視差精度は悪くなる)、図20に示すマージン線A、Bのように所定のマージン線を設けて、マージン線よりも下方を計測範囲としてもよい。要するに、上記所定の形状は、推定路面に基づく形状を、隣接するセグメントまで延長させた形状を含む形態であってもよい。「推定路面に基づく形状」とは、推定路面そのものであってもよいし、マージン線であってもよい。また、延長路面に関しては、着目セグメントよりも近方セグメントを使っても良いし、遠方セグメントを使っても良い。無論、両方に延長した路面を使用しても構わない。また、延長する長さも所定の長さを設定することが可能である。例えば、1セグメント分だけ延長してもよいし、それ以上延長しても構わない。また、セグメント単位に限らず、所定の距離分延長しても構わない。また、本処理を適用する範囲を限定してもよい。例えば、近方で路面推定に失敗してしまうと、推定路面が引き上がった場合に目前の物体が未認識になるというリスクを考慮して、所定のセグメントよりも近方のセグメントに対してのみ本処理を実行しても構わない。無論、遠方のセグメントに対してのみ実行してもよいため、適用する範囲は任意である。
次に、延長路面の下方に存在する視差値dの頻度値を計測する方法について説明する。本実施形態では、棄却部173は、奥行方向の位置ごとに(Vマップの視差値dの方向(横軸方向)の位置ごとに)、延長路面よりも下方に存在する視差値dの頻度値をカウントした頻度値を対応付けた頻度ヒストグラムを生成する。そして、頻度ヒストグラムを参照して、対応する頻度値が所定値以上となる奥行方向の位置の数を示すビン数を計測し、セグメントの長さに対するビン数の割合が閾値以上の場合、延長路面に対応する推定路面を棄却する。Vマップの各座標には視差値dの頻度値が格納されているため、頻度ヒストグラムを作成する際には、頻度値の合計値を用いてもよいし、頻度値が所定値以上となっている座標数をカウントしてもよい。そして、ビン判定閾値以上の頻度値が対応付けられた頻度ヒストグラムの座標の数(視差値dの方向の座標の数)をカウントし、セグメントの長さに占める、ビン判定閾値以上のビン数の割合(ビン割合)を算出する。そして、ビン割合が閾値(「割合閾値」と称する)以上の場合は、延長路面(またはマージン線)よりも下方に物体視差が存在すると判定する。
例えば図21の例では、第2セグメントseg2に対応する頻度ヒストグラムAは、ビン判定閾値以上のビン数が2であり、例えば割合閾値を50%とすれば、セグメント長さ(3つのビンに相当)に占める、ビン判定閾値以上のビン数の割合は割合閾値以上になるので、延長路面Aの下方に物体視差が存在すると判定し、延長路面Aに対応する推定路面Aを棄却する。一方で、第6セグメントseg6に対応する頻度ヒストグラムBは、ビン判定閾値を超えているビンが存在しないため、ビン割合は割合閾値未満となり、延長路面Bの下方には物体視差が存在しないと判定し、延長路面Bに対応する推定路面Bを棄却することはしない。ここで、ビン判定閾値を使用する理由は、ノイズに対してロバストにするためである。ビン判定閾値を設けずに、頻度が1以上のビン数をカウントしてしまうと、ノイズが多い雨天などのシーンにおいて、ビン割合が割合閾値を超えやすくなってしまう。無論、このビン判定閾値は設けなくても良い(ビン判定閾値=0であってもよい)。
また、別の方法として、棄却部173は、Vマップのうち、延長路面(またはマージン線)よりも下方の所定領域に占める、所定数(1でもよいし、ノイズ対策として1よりも大きい数であってもよい)以上の視差画素が投票された座標(所定数以上の頻度値を有する座標)の合計数の割合が閾値以上の場合、該延長路面に対応する推定路面を棄却することもできる。所定領域の形状は任意であるが、例えば図22のように、マージン線(または延長路面であってもよい)よりも下方の領域を好適に捉えるために台形としてもよいが、これに限らず、例えば矩形としてもよい。図22の例では、計測領域A内には所定数以上の視差画素が投票された座標が半数以上存在しているため、例えば閾値が50%とすると、棄却部173は、マージン線Aよりも下方に物体視差が存在すると判定し、マージン線Aに対応する推定路面Aを棄却する。一方、計測領域B内には、所定数以上の視差画素が投票された座標が存在しないため、棄却部173は、マージン線Bよりも下方に物体視差は存在しないと判定し、マージン線Bに対応する推定路面Bを棄却することはしない。
図17に戻って説明を続ける。補間部174は、「設定部」の一例であり、棄却部173によりセグメントに対応する推定路面が棄却された場合、該セグメントに対応する路面の形状として、所定の路面(所定の形状)を設定(補間)する。所定の路面の一例としては、平坦な形状と仮定したデフォルト路面(デフォルト形状)、または、過去のフレームで推定した形状を示す履歴路面(履歴形状)などがある。図23の(A)は、車両が平坦な路面を走行している場合の視差画像Ip3を示し、図23の(B)は、視差画像Ip3から生成されたVマップを示している。図23の(B)に示すように、平坦な路面を走行している場合、推定される推定路面ER1は、平坦な路面と仮定した路面であるデフォルト路面DRと、ほぼ一致する。デフォルト路面DRは予めカメラの取付高さとピッチング角度から算出することが可能である。また、履歴路面とは、1フレーム以上前のフレームで推定された過去の推定路面を示し、過去の所定数のフレームで推定された路面を平均した路面であってもよい。
図24は、本実施形態の路面検出処理部122による処理の一例を示すフローチャートである。各ステップの具体的な内容は上述したとおりであるので、詳細な説明については適宜に省略する。まず、取得部125は視差画像を取得する(ステップS1)。取得部125は、視差画像生成部113により生成された視差画像を直接取得してもよいし、視差画像を予めCD、DVD、HDDなどの記録メディアやネットワーク・ストレージに保存しておき、必要時にこれらを読み込んで使用しても構わない。また、視差画像は一枚のみ取得してもよいし、動画像データをフレームごとに逐次取得しても構わない。なお、Vマップを事前に構築しておき、路面検出処理部122へ入力する方法も可能である。この場合、ステップS1および次のステップS2はスキップし、ステップS3から処理が開始する。
次に、第1の生成部126は、ステップS1で取得された視差画像を用いて、Vマップを生成する(ステップS2)。具体的な内容は上述したとおりである。
次に、路面推定部127(分割部171)は、ステップS2で生成されたVマップを複数のセグメントに分割する(ステップS3)。具体的な内容は上述したとおりである。
以下のステップS4〜ステップS7の処理はセグメントの数だけ繰り返し実行される。なお、ここでは、一のセグメントについてステップS4〜ステップS7の処理が完了した後に、次のセグメントについてステップS4〜ステップS7の処理が実行されるが、このような構成に限定されない。例えば、各ステップの処理を全セグメント分実行した後に、次のステップへ移行するという形態であってもよい。例えばステップS4の処理を全セグメント分実行した後に、ステップS5に移行するといった具合である。
ステップS4では、路面推定部127(推定部172)は、各d座標に対して、標本点探索を実施する(ステップS4)。このとき、標本点は1点に限定せず、複数点決定してもよい。また、視差が垂直方向に存在しないd座標も存在することから、標本点を決定しないd座標が存在しても良い。具体的な内容は上述したとおりである。
ステップS5では、路面推定部127(推定部172)は、路面の形状を推定する(ステップS5)。具体的な内容は上述したとおりである。
ステップS6では、路面推定部127(棄却部173)は、推定路面を延長した延長路面を設定し、延長路面より下方に存在する視差値dの頻度値が閾値以上であるか否かを判断する。つまり、路面推定部127(棄却部173)は、推定路面を棄却するか否かを判断する(ステップS6)。具体的な内容は上述したとおりである。
ステップS6の結果が否定の場合(ステップS6:No)、推定路面がそのまま採用されることになる。一方、ステップS6の結果が肯定の場合(ステップS6:Yes)、推定路面は棄却され、路面推定部127(補間部174)は、該セグメントに対応する路面として、上述の所定の路面(例えばデフォルト路面や履歴路面等)を、新たな推定路面として設定(補間)する(ステップS7)。
なお、上記に限らず、例えばステップS4とステップS5との間に上述した外れ点を除去する処理を入れてもよい。また、全てのセグメントについてステップS4〜ステップS7の処理が完了した後に、セグメント間の推定路面が滑らかに連続するように修正するスムージング処理を行う形態であってもよい。スムージング処理の一例として、例えば2つのセグメントの推定路面の内、一方の推定路面の始点に対応するd座標と、他方の推定路面の終点に対応するd座標(セグメント間に切れ目がない場合、終点と始点は同じd座標を指す)が所定のy座標位置を通るように修正する(修正するということは推定路面のVマップにおける傾きと切片が変更されることと同意になる)処理を行ってもよい。このスムージング処理により、全セグメント間で推定路面の連続性が担保される。上記の所定のy座標位置とは、例えば、上記の始点に対応するy座標と終点に対応するy座標との中点のy座標を使用する方法が考えられる。スムージング処理することで、あるセグメントでの推定路面が適していない場合に修正される可能性があるため、路面推定の精度を向上させる効果がある。スムージング処理された推定路面が最終結果となる。また、このスムージング処理は、一つのセグメントに対するステップS4〜ステップS7の処理が完了するたびに、該一つのセグメントに対応する推定路面と、一つ前のセグメントに対応する推定路面とのスムージング処理を行う形態であってもよい。なお、外れ点を除去する処理やスムージング処理を行わない形態であってもよい。
以上に説明したように、本実施形態では、Vマップを複数のセグメントに分割し、セグメントごとに路面を推定する。そして、セグメントごとに、推定路面を延長した延長路面を設定し、延長路面よりも下方に存在する視差値dの頻度値が一定以上存在する場合には、延長路面に対応する推定路面は物体視差の影響を受けて引き上がっていると判断し、該推定路面を棄却する(推定は失敗と判断する)。これにより、実際の路面とは異なる推定路面を用いて物体検出が行われてしまうことを防止できるので、結果として、物体の検出精度を十分に確保することができる。
(第2の実施形態)
次に、第2の実施形態を説明する。上述の第1の実施形態と共通する部分については適宜に説明を省略する。基本的な構成は上述の第1の実施形態と同様であるが、本実施形態では、棄却部173は、上記所定の形状(延長路面またはマージン線)に占める、視差値dを有する画素(視差画像の画素)が投票された座標の合計数の割合が閾値未満の場合、推定路面を棄却する。
ここで、例えば図25の(A)の視差画像Ip4における台形形状の領域811内の視差画素がVマップ生成時の投票対象である場合を想定する。そして、領域811に含まれる3つの領域812、領域813および領域814のうち、領域812および領域814は視差画素が存在する領域を表し、領域813は視差画素が存在しない領域を表すものとする。路面視差が少量、または存在しない場合に、大型のトラック820などの直立する物体が存在する場合、推定路面が物体視差により引き上がってしまう場合がある。例えば、図25のように大型のトラック820が存在すると、Vマップ上の対応するセグメントに、トラック820に対応する視差が縦方向に分布する。通常、路面視差が十分に存在し正しく路面推定できるのであれば、推定路面は路面の視差に対応する投票点群上に存在する。従って、延長路面も路面の視差に対応する投票点群上に存在することになる。しかし、物体視差により推定路面が不適切な傾きを持って引き上がっている場合、延長路面は、視差を持つ画素(視差画像の画素)が投票された座標の分布(投票点群)上から外れた位置に推定されることになる。図25の(B)に示すように、推定路面Bを延長した延長路面Bは、視差を持つ画素が投票された座標の分布上に推定されるが、推定路面Aのように物体視差により不適切に引き上がっている場合、その延長路面Aは、視差を持つ画素が投票された座標の分布上ではない領域に存在することになる。
そこで、本実施形態では、セグメントごとに、推定路面を延長して延長路面を設定し、延長路面の長さに対して、その延長路面上に、視差を持つ画素が投票された座標が何点存在するかをカウントし、その割合(カウント数/延長路面の長さ(セグメントの長さを用いてもよい))が閾値以上であるか否かを判断する。そして、閾値以上である場合は、着目セグメントにおける推定路面は正しく路面視差を拾って路面推定できているとみなして推定成功とする(推定路面の棄却は行わない)。一方、閾値未満の場合は推定失敗と判断して、着目セグメントにおける推定路面を棄却し、デフォルト路面又は履歴路面を設定する。
なお、ここでは、延長路面上の座標点数(視差を持つ画素が投票された座標の数)をカウントすると説明したが、線上の点のみに着目してしまうと多少の傾きの差異に影響を受けて正しく計測できなくなる可能性がある。従って、マージン線を設けて、延長路面とマージン線に挟まれる領域内の座標点数をカウントしてもよい。ここでは、延長路面とマージン線に挟まれる領域が、上記所定の形状(推定路面に基づいて設定された所定の形状)に対応していると考えることができる。なお、マージン線は延長路面の下方向だけに限定されるものではなく、上方向に設けられてもよい。また、マージン線が1本の場合は、マージン線と延長路面に挟まれる領域内の座標点数をカウントし、マージン線が2本の場合は、最も外側に存在する2本に挟まれる領域内の座標点数をカウントする。また、カウントについて補足すると、頻度値が1以上の座標点数をカウントしてもよいし、所定値未満である場合はノイズ視差と見なして、所定値以上の頻度値を持つ座標をカウントしてもよい。また、延長する路面はより近方のセグメント、または、近方の所定距離に対してのみ実行してもよいし、遠方のセグメント、または、遠方の所定距離まで延長してもよい。つまり、延長路面の長さは任意に設定可能である。また、本処理を適用する範囲は、所定のセグメント、または所定の距離間に限定してもよい(例えば、第2セグメントと第3セグメントに対してのみ実行するといった使い方が可能である)。なお、推定路面の成否判定として、上記処理に加えて、角度による成否判定や標本点群の分散による成否判定などの異なる成否判定を併せて適用しても構わない。角度による成否判定の例、および、分散による成否判定の例は上述したとおりである。
本実施形態の路面検出処理部122による処理の流れは図24に示すフローチャートと同様であり、ステップS6の判断処理が上述の第1の実施形態と異なる。より具体的には、棄却部173は、着目したセグメントにおける推定路面を延長した延長路面を設定し、延長路面上に、視差を持つ画素が投票された座標が何点存在するかをカウントし、その割合(カウント数/延長路面の長さ(セグメントの長さを用いてもよい))を算出する。そして、算出した割合が閾値未満の場合に、延長路面に対応する推定路面(着目セグメントに対応する推定路面)を棄却すると判断する。一方、算出した割合が閾値以上の場合は、延長路面に対応する推定路面を棄却しないと判断する。
以上に説明したように、本実施形態では、Vマップを複数のセグメントに分割し、セグメントごとに路面を推定する。そして、セグメントごとに、推定路面を延長した延長路面を設定し、Vマップ上において、延長路面に占める、視差値dを有する画素が投票された座標の合計数の割合が閾値未満の場合は、延長路面に対応する推定路面は物体視差の影響を受けて引き上がっていると判断し、該推定路面を棄却する(推定は失敗と判断する)。これにより、実際の路面とは異なる推定路面を用いて物体検出が行われてしまうことを防止できるので、結果として、物体の検出精度を十分に確保することができる。
なお、上述の第1の実施形態と第2の実施形態とを組み合わせて用いることも可能である。例えば棄却部173は、セグメントごとに、第1の実施形態の棄却判断と第2の実施形態の棄却判断を切り替えることができる形態であってもよい。例えば棄却部173は、着目セグメントにおける推定路面の位置が、デフォルト路面または履歴路面よりも所定値以上高い場合は、該着目セグメントにおける推定路面の棄却判断として第2の実施形態で説明した棄却判断を行い、所定値未満の高さの場合は、第1の実施形態で説明した棄却判断を行う形態であってもよい。また、例えば棄却部173は、着目セグメントに対応する推定路面を延長して設定した延長路面の傾きの絶対値が所定値以上の場合(急峻な場合)は、該着目セグメントに対応する推定路面の棄却判断として第2の実施形態で説明した棄却判断を行い、傾きの絶対値が所定値未満の場合は、第1の実施形態で説明した棄却判断を行う形態であってもよい。
以上、本発明に係る実施形態について説明したが、本発明は、上述の各実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上述の実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。
また、上述した実施形態の移動体制御システム100で実行されるプログラムは、インストール可能な形式または実行可能な形式のファイルでCD−ROM、フレキシブルディスク(FD)、CD−R、DVD(Digital Versatile Disk)、USB(Universal Serial Bus)等のコンピュータで読み取り可能な記録媒体に記録して提供するように構成してもよいし、インターネット等のネットワーク経由で提供または配布するように構成してもよい。また、各種プログラムを、ROM等に予め組み込んで提供するように構成してもよい。