以下、添付図面を参照しながら、本発明に係る情報処理装置、撮像装置、機器制御システム、移動体、情報処理方法およびプログラムの実施形態を詳細に説明する。図1は、実施形態の機器制御システム100の概略構成を示す模式図である。図1に示すように、機器制御システム100は、移動体の一例である自動車等の車両101に設けられる。機器制御システム100は、撮像ユニット102、解析ユニット103、制御ユニット104および表示部105を有している。
撮像ユニット102は、移動体の一例としての車両101のフロントガラス106のルームミラー付近に設けられ、車両101の例えば進行方向等の画像を撮像する。撮像ユニット102の撮像動作で得られる画像データを含む各種データは、解析ユニット103に供給される。解析ユニット103は、撮像ユニット102から供給される各種データに基づいて、車両101が走行中の路面、車両101の前方車両、歩行者、障害物等の認識対象物を解析する。制御ユニット104は、解析ユニット103の解析結果に基づいて、表示部105を介して、車両101の運転者へ警告等を行う。また、制御ユニット104は、解析結果に基づいて、各種車載機器の制御、車両101のハンドル制御又はブレーキ制御等の走行支援を行う。なお、以下、移動体の一例として車両101について説明するが、本実施の形態の機器制御システム100は、船舶、航空機、ロボット等にも適用可能である。
図2は、撮像ユニット102および解析ユニット103の概略的なブロック図である。この例では、解析ユニット103は「情報処理装置」として機能し、撮像ユニット102および解析ユニット103の組は「撮像装置」として機能する。なお、上述の制御ユニット104は、「制御部」として機能し、撮像装置の出力結果に基づいて機器(この例では車両101)を制御する。撮像ユニット102は、左目用となる第1のカメラ部1Aと、右目用となる第2のカメラ部1Bとの、2台のカメラ部が平行に組み付けられて構成されている。つまり、撮像ユニット102は、ステレオ画像を撮像するステレオカメラとして構成されている。ステレオ画像とは、複数の視点ごとの撮像で得られる複数の撮像画像(複数の視点と1対1に対応する複数の撮像画像)を含む画像であり、撮像ユニット102は、このステレオ画像を撮像するための装置である。第1のカメラ部1Aおよび第2のカメラ部1Bは、それぞれ撮像レンズ5A,5B、画像センサ6A,6B、センサコントローラ7A,7Bを備えている。画像センサ6A,6Bは、例えばCCDイメージセンサまたはCMOSイメージセンサとなっている。CCDは、「Charge Coupled Device」の略記である。また、CMOSは、「Complementary Metal-Oxide Semiconductor」の略記である。センサコントローラ7A,7Bは、画像センサ6A,6Bの露光制御、画像読み出し制御、外部回路との通信、および画像データの送信制御等を行う。
解析ユニット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の画像センサ6A,6Bで撮像された撮像画像の輝度画像データは、データバスライン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の注視点Gに対する撮像レンズ5AのX座標のズレ量をΔ1とする。また、被写体30の注視点Gに対する撮像レンズ5BのX座標のズレ量をΔ2とする。この場合において、FPGA16は、被写体30の注視点Gに対する各撮像レンズ5A,5BのX座標の差である視差値dを、以下の式1で算出する。
解析ユニット103のFPGA16は、撮像ユニット102から供給される輝度画像データに対して、例えばガンマ補正処理および歪み補正処理(左右の撮像画像の平行化)等のリアルタイム性が要求される処理を施す。また、FPGA16は、このようなリアルタイム性が要求される処理を施した輝度画像データを用いて上述の式1の演算を行うことで、視差画像データを生成し、RAM18に書き込む。
図2に戻って説明を続ける。CPU15は、撮像ユニット102の各センサコントローラ7A,7Bの制御、および解析ユニット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は、取得部121、路面検出処理部122、クラスタリング処理部123、トラッキング処理部124を有する。取得部121は、視差画像生成部113により生成された視差画像を取得する。取得部121は、ステレオカメラで撮像されるステレオ画像から算出された、画素毎に距離情報を有する距離画像(この例では視差画像)を取得する機能を有していると考えることができる。取得部121により取得された視差画像は路面検出処理部122およびクラスタリング処理部123へ入力される。
図6に示すように、路面検出処理部122は、路面推定部131と、生成部132と、を有する。路面推定部131は、視差画像を用いて、画像の垂直方向(ステレオカメラの光軸と直交する上下方向)を示す縦方向の位置と、ステレオカメラの光軸の方向を示す奥行方向の位置とが対応付けられた対応情報を生成する。この例では、路面推定部131は、視差画像の各画素(視差値)を、画像の垂直方向の座標(y)を縦軸、視差値dを横軸とするマップ(以下、「Vマップ(V-Disparityマップ)」と称する)に投票し、投票された視差点から所定の方法で標本点を選択し、選択された点群を直線近似(または、曲線近似)する形で路面形状を推定する。この路面推定の方法としては公知の様々な技術を利用可能である。Vマップとは、視差画像の(x座標値、y座標値、視差値d)の組のうち、x軸を視差値d、y軸をy座標値、z軸を頻度とした2次元ヒストグラムである。要するに、上記対応情報(この例ではVマップ)は、縦方向の位置と視差値d(奥行方向の位置に相当)との組み合わせごとに、視差の頻度値を記録した情報であると考えることもできる。路面推定部131による推定結果(路面推定情報)は、生成部132、クラスタリング処理部123へ入力される。
生成部132は、視差画像に基づいて、ステレオカメラの光軸と直交する方向を示す横方向の位置と、ステレオカメラの光軸の方向を示す奥行方向の位置とが対応付けられた第1の対応情報を生成する。このとき、ノイズを除去するため、視差画像のうち、路面(オブジェクトの高さの基準となる基準オブジェクトの一例)よりも高い範囲に対応する複数の画素に基づいて、第1の対応情報を生成するのが好ましい。なお、この例では、第1の対応情報は、横軸を横方向の実際の距離(実距離)、縦軸を視差画像の視差値d、奥行方向の軸を頻度とした2次元ヒストグラムである。第1の対応情報は、実距離と視差値dとの組み合わせごとに、視差の頻度値を記録した情報であると考えることもできる。
ここで、上述の路面推定部131の路面推定により、路面を表す直線式が得られているため、視差値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は無限遠のオブジェクトを撮影したときの視差である。
生成部132は、第1の対応情報として、「High Umap」、「Standard Umap」、「Small Umap」のうちの少なくとも1つを生成する。以下、これらのマップについて説明する。まず、「High Umap」について説明する。視差画像の横方向の位置をx、縦方向の位置をy、画素ごとに設定される視差値をdとすると、生成部132は、視差画像のうち、路面よりも高い第1の範囲内の所定値以上の高さの範囲を示す第2の範囲内に対応する点(x、y、d)を、(x、d)の値に基づいて投票することで、横軸を視差画像のx、縦軸を視差値d、奥行方向の軸を頻度とした2次元ヒストグラムを生成する。そして、この2次元ヒストグラムの横軸を実距離に変換して、High Umapを生成する。
例えば図7に示す撮像画像においては、大人と子供を含む人グループ1と、大人同士の人グループ2と、ポールと、車両とが映り込んでいる。この例では、路面からの実高さが150cm~200cmの範囲が第2の範囲として設定され、該第2の範囲の視差値dが投票されたHigh Umapは図8のようになる。高さが150cm未満の子供の視差値dは投票されないためマップ上に現れないことになる。なお、縦軸は、距離に応じた間引き率を用いて視差値dを間引き処理した間引き視差となっている。生成部132により生成されたHigh Umapはクラスタリング処理部123に入力される。
次に、「Standard Umap」について説明する。視差画像の横方向の位置をx、縦方向の位置をy、画素ごとに設定される視差値をdとすると、生成部132は、視差画像のうち第1の範囲内に対応する点(x、y、d)を、(x、d)の値に基づいて投票することで、横軸を視差画像のx、縦軸を視差値d、奥行方向の軸を頻度とした2次元ヒストグラムを生成する。そして、この2次元ヒストグラムの横軸を実距離に変換して、Standard Umapを生成する。図7の例では、0cm~200cmの範囲(上述の第2の範囲を含んでいる)が第1の範囲として設定され、該第1の範囲の視差値dが投票されたStandard Umapは図9のようになる。また、生成部132は、Standard Umapと併せて、Standard Umapに投票される視差点(実距離と視差値dとの組)のうち、路面からの高さ(h)が最も高い視差点の高さを記録して、横軸を実距離(カメラの左右方向の距離)、縦軸を視差値dとし、対応する点ごとに高さが記録された高さ情報を生成することもできる。高さ情報は、実距離と視差値dとの組み合わせごとに高さを記録した情報であると考えてもよい。以下の説明では、この高さ情報を、「Standard Umapの高さマップ」と称する。「Standard Umapの高さマップ」に含まれる各画素の位置はStandard Umapに含まれる各画素の位置に対応している。生成部132により生成されたStandard UmapおよびStandard Umapの高さマップはクラスタリング処理部123に入力される。なお、本処理は物体を検出しやすくするために俯瞰的なマップ(鳥瞰画像、俯瞰画像)を生成するものであるため、横軸は実距離でなくとも実距離に相当するものであればよい。
次に、「Small Umap」について説明する。視差画像の横方向の位置をx、縦方向の位置をy、画素ごとに設定される視差値をdとすると、生成部132は、視差画像のうち第1の範囲内に対応する点(x、y、d)を、(x、d)の値に基づいて投票(Standard Umapを作成する場合よりも少ない数を投票)することで、横軸を視差画像のx、縦軸を視差値d、奥行方向の軸を頻度とした2次元ヒストグラムを生成する。そして、この2次元ヒストグラムの横軸を実距離に変換して、Small Umapを生成する。Small Umapは、Standard Umapと比較して1画素の距離分解能が低い。また、生成部132は、Small Umapと併せて、Small Umapに投票される視差点(実距離と視差値dとの組)のうち、路面からの高さ(h)が最も高い視差点の高さを記録して、横軸を実距離(カメラの左右方向の距離)、縦軸を視差値dとし、対応する点ごとに高さが記録された高さ情報を生成することもできる。高さ情報は、実距離と視差値dとの組み合わせごとに高さを記録した情報であると考えてもよい。以下の説明では、この高さ情報を、「Small Umapのマップ高さ」と称する。「Small Umapの高さマップ」に含まれる各画素の位置はSmall Umapに含まれる各画素の位置に対応している。生成部132により生成されたSmall UmapおよびSmall Umapの高さマップはクラスタリング処理部123に入力される。
この例では、生成部132はStandard Umapを生成し、その生成されたStandard Umapがクラスタリング処理部123に入力される場合を例に挙げて説明するが、これに限らず、例えば「High Umap」、「Standard Umap」、「Small Umapの高さマップ」を用いて物体検出を行う場合は、生成部132は、「High Umap」、「Standard Umap」、「Small Umap」を生成し、これらのマップがクラスタリング処理部123に入力されてもよい。
図5に戻って説明を続ける。クラスタリング処理部123は、路面検出処理部122から受け取った各種の情報を用いて、取得部121により取得された視差画像上の物体位置を検出する。図10は、クラスタリング処理部123の詳細な機能の一例を示す図である。図10に示すように、クラスタリング処理部123は、孤立領域検出処理部140、面検出処理部141、視差画処理部150、棄却処理部160を有する。
孤立領域検出処理部140は、「検出部」の一例であり、前述の第1の対応情報(この例ではStandard Umap)から、視差値dの塊の領域である孤立領域(集合領域)を検出する。以下の説明では、この検出処理を「孤立領域検出処理」と称する。例えば図11に示す撮像画像の場合、左右にガードレール81,82があり、車両77および車両79がセンターラインを挟んで対面通行をしている。各走行車線には、それぞれ1台の車両77又は車両79が走行している。車両79とガードレール82との間には2本のポール80A,80Bが存在している。図12は、図11に示す撮像画像に基づいて得られたStandard Umapであり、枠で囲まれた領域が孤立領域に相当する。
面検出処理部141は、孤立領域検出処理部140により検出された孤立領域(集合領域)の輪郭から面情報を算出し、検出結果に3次元構造として情報化する。また、検出された孤立領域が、同一方向の側面を複数持つと判断した場合は、該孤立領域を分離する処理を行う。以下の説明では、面検出処理部141による処理を「面検出処理」と称する。より具体的な内容については後述する。
視差画処理部150は、孤立領域検出処理部140により検出された孤立領域に対応する視差画像上の領域や実空間での物体情報を検出する視差画処理を行う。図13は、図12に示す孤立領域に対応する視差画像上の領域(視差画処理部150による処理の結果)を示す図であり、図13の領域91はガードレール81に対応する領域であり、領域92は車両77に対応する領域であり、領域93は車両79に対応する領域であり、領域94はポール80Aに対応する領域であり、領域95はポール80Bに対応する領域であり、領域96はガードレール82に対応する領域である。
棄却処理部160は、視差画処理部150により検出された視差画上の領域や実空間での物体情報に基づき、出力すべきオブジェクトを選別する棄却処理を行う。棄却処理部160は、物体のサイズに着目したサイズ棄却と、物体同士の位置関係に着目したオーバラップ棄却とを実行する。例えばサイズ棄却では、図14に示す物体(オブジェクト)タイプごとに定められたサイズ範囲に当てはまらないサイズの検出結果を棄却する。例えば図15の例では、領域91および領域96は棄却されている。また、オーバラップ棄却では、視差画処理により検出された、視差画上の孤立領域(リアルUマップ上の検出結果)に対応する領域同士に対し、重なりを持つ結果の取捨選択を行う。
図16は、クラスタリング処理部123による処理の一例を示すフローチャートである。この例では、Standard Umap、Standard Umapの高さマップ、視差画像、路面推定情報が入力情報として入力され、視差画像上の検出結果が出力情報として出力される。まず孤立領域検出処理部140は孤立領域検出処理を行う(ステップS1)。次に、面検出処理部141は、面検出処理を行う(ステップS2)。視差画処理部150は、視差画処理を行う(ステップS3)。そして、棄却処理部160は、ステップS3の視差画処理の結果を用いて棄却処理を行い(ステップS4)、最終的な視差画像上の検出結果を出力情報として出力する。なお、ステップS2の面検出処理は、ステップS3の視差画処理とステップS4の棄却処理との間に行われてもよい。
なお、クラスタリング処理部123からの出力情報(検出結果)は図5に示すトラッキング処理部124に入力される。トラッキング処理部124は、クラスタリング処理部123による検出結果(検出された物体)が複数のフレームにわたって連続して出現する場合に追跡対象であると判定し、追跡対象である場合には、その検出結果を物体検出結果として制御ユニット104へ出力する。
次に、孤立領域検出処理の具体的な内容を説明する。図17は、孤立領域検出処理の一例を示すフローチャートである。この例では、Standard Umapが入力情報として入力される。出力情報については後述の説明で明らかになる。まず、孤立領域検出処理部140は、Standard Umap内の視差の塊ごとにグルーピングしてIDを付与するラベリング処理を行う(ステップS21)。具体的には、孤立領域検出処理部140は、Standard Umapに含まれる複数の画素ごとに着目していき、着目画素、および、該着目画素の近傍に存在する8画素(右方向、右斜め上方向、上方向、左斜め上方向、左方向、左斜め下方向、下方向、右斜め下方向の8つの方向と1対1に対応する8つの画素)のうち、頻度値を含む画素の画素値を「1」に設定し、頻度値を含まない画素の画素値を「0」に設定して二値化する。なお、二値化の方法はこれに限らず任意であり、例えば近傍8画素のうち閾値以上の視差の頻度値を含む画素の画素値を「1」とし、それ以外の画素の画素値を「0」とする形態であってもよい。そして、画素値「1」の集合で形成される閉領域を視差の塊(1つのグループ)とし、該閉領域に含まれる各画素に対してIDを付与する。なお、IDは、各グループを識別可能な値に設定される。
図18は、二値化処理後の一例を示す図であり、領域200に含まれる5つの画素の各々に対して、同一のIDが付与されることになる。
図17に戻って説明を続ける。ステップS21の後、孤立領域検出処理部140は、検出矩形作成処理を行う(ステップS22)。具体的には、孤立領域検出処理部140は、同一のIDが割り振られた画素の集合領域に外接する矩形を算出し、算出した外接矩形を検出矩形とする。なお、ここでいう検出矩形とは、矩形の位置および大きさを示す情報のことをいい、例えば矩形の角の座標と高さおよび幅をいう。次に、孤立領域検出処理部140は、ステップS22で作成した検出矩形のサイズをチェックするサイズチェック処理を行う(ステップS23)。例えば孤立領域検出処理部140は、ステップS22で作成した検出矩形のサイズが、ノイズに相当するサイズとして予め定められた閾値以下の場合、該検出矩形を破棄する処理を行う。次に、孤立領域検出処理部140は、ステップS22で作成した検出矩形に含まれる各画素の頻度値(視差の頻度値)をチェックする頻度チェック処理を行う(ステップS24)。例えば孤立領域検出処理部140は、ステップS22で作成した検出矩形に含まれる頻度値(視差の頻度値)の累積値が、物体を表すのに必要な数として予め定められた閾値以下の場合、該検出矩形を破棄する処理を行う。
以上の孤立領域検出処理により、Standard Umap上の検出矩形を示す情報が出力情報として出力される。なお、Standard Umap上の検出矩形に含まれる各画素に対しては、グループを識別するIDが割り当てられている。つまり、Standard Umap上でグルーピングされたIDのマップを示す情報(「Standard Umap上のID Umap」、他と区別しない場合は単に「IDマップ」と称する場合がある)が出力情報として出力されることにもなる。
次に、面検出処理の具体的な内容を説明する。図19に示すように、面検出処理部141は、補間処理部142と、抽出部143と、分離部144と、を有する。孤立領域検出処理部140による検出結果は面検出処理部141に入力されることになり、面検出処理部141は、孤立領域検出処理部140による検出結果を用いて面検出処理を行う。
図20は、面検出処理の流れを示すフローチャートである。ここでは、孤立領域検出処理による検出結果(Standard Umap上の検出矩形)ごとに、図20に示す処理が繰り返される。まず補間処理部142は補間処理を行う(ステップS100)。次に、抽出部143は輪郭抽出処理を行う(ステップS101)。次に、分離部144は分離処理を行う(ステップS102)。各ステップの具体的な内容は後述する。
図19に示す補間処理部142は、孤立領域検出処理部140による検出結果に対して、ノイズを平滑化するための補間処理を行う。補間処理により追加された画素に対しては新たにIDを付与する。
図19に示す抽出部143は、集合領域の輪郭を抽出する。本実施形態では、抽出部143は、輪郭を構成する複数の画素ごとに、繋がりの方向を示す方向情報を設定する。より具体的には以下のとおりである。図21は、抽出部143による輪郭抽出処理の一例を示すフローチャートである。以下、図21のフローチャートの内容を説明する。
図21に示すように、抽出部143は、開始画素を探索する開始画素探索処理を行う(ステップS111)。より具体的には、図22に示すように、抽出部143は、検出矩形の左下から右上へIDを持つ画素を探索し、最初に見つかった画素を着目画素とする。
図21に戻って説明を続ける。開始画素が見つかった場合(ステップS112:Yes)、抽出部143は、輪郭を抽出する処理を行う(ステップS113)。開始画素が見つからなかった場合(ステップS112:No)、そのまま処理は終了する。
以下、上述のステップS113の処理の具体的な内容を説明する。この例では、抽出部143は、着目画素に隣接する8画素について、図23に示すような左回りの探索順位でIDを持つ画素を探索していく。図23に示す探索順位は、着目画素に隣接する8画素のうち、左下に隣接する画素を第1番目に探索し、真下に隣接する画素を第2番目に探索し、右下に隣接する画素を第3番目に探索し、右に隣接する画素を第4番目に探索し、右上に隣接する画素を第5番目に探索し、真上に隣接する画素を第6番目に探索し、左上に隣接する画素を第7番目に探索し、左に隣接する画素を第8番目に探索することを表している。探索の結果、IDを持つ画素が見つかった場合は、そのときの探索順を着目画素に記録し、発見した画素を次の着目画素として探索を繰り返していく。例えば図24に示すように、着目画素の右上に隣接する画素が、IDを持つ画素として最初に発見された場合、そのときの探索順である「4」を着目画素に記録し、該着目画素の右上に隣接する画素を次の着目画素として探索を続ける。このとき、着目画素に記録された「4」を示す探索順は、輪郭の繋がりの方向を示す(着目画素から右上の方向に繋がることを示す)情報であり、方向情報に対応している。
そして、図25に示すように、新たな着目画素に隣接する8画素について、図23に示すような左回りの探索順位でIDを持つ画素を探索していく。なお、処理後の画素(探索順が記録済みの画素)については、再び探索されても探索順が記録されることはない。図25の例では、着目画素の左下に隣接する画素(「4」を示す探索順が記録された直前の着目画素)は既に探索順が記録済みであるので、着目画素の右に隣接する画素が、IDを持つ対象画素として発見される。したがって、このときの探索順である「3」を着目画素に記録し、該着目画素の右に隣接する画素を次の着目画素として探索を続ける。以上のようにして、図26に示すように、集合領域(IDを付与された画素の集合)の輪郭を構成する画素ごとに、探索順を示す情報(方向情報に対応)が記録(設定)されていく。つまり、集合領域の輪郭は、探索順を示す情報が記録された画素を連結したものとなる。抽出部143は、以上のようにして抽出した輪郭の特徴(すなわち、ここでは物体の輪郭を構成する画素が並ぶ方向)に基づいて、背面位置、側面位置を算出することができる。例えば輪郭抽出の経路(着目画素の探索順)が左回りの場合(図23の場合)、右から左へ向かう方向を示す方向情報(この例では「7」を示す探索順)が設定された画素が最も多いY座標値(奥行方向(視差値dの方向)の座標値)から背面の距離を算出することができる。また、上から下へ向かう方向を示す方向情報(この例では「1」を示す探索順)が設定された画素が最も多いY座標値を左側面の位置として算出し、下から上へ向かう方向を示す情報(この例では「5」を示す探索順)が設定された画素が最も多いY座標値を右側面の位置として算出することができる。
図19に戻って説明を続ける。分離部144は、抽出部143により抽出された輪郭の特徴に基づいて、集合領域を分離する。より具体的には、分離部144は、抽出部143により抽出された輪郭が同一方向の複数の側面を有する場合に、集合領域を分離する。本実施形態では、分離部144は、輪郭を構成する複数の画素の各々に設定された方向情報に基づいて、同一方向の複数の側面が存在する状態を判別する。より具体的には、分離部144は、孤立領域検出処理部140により検出された集合領域を含む関心領域(第1の対応情報であるStandard Umap上の領域)の行ごとに横方向(Standard Umapの横軸(X軸)方向)にサーチしていき、繋がりの方向として同一の縦方向を示す方向情報が2回目以降にカウントされる画素を対象画素として特定していく。
そして、分離部144は、横方向の位置と、奥行方向(Standard Umapの縦軸(Y軸)方向)にわたって対象画素をカウントした頻度値と、が対応付けられた第2の対応情報を生成する。分離部144は、この第2の対応情報に基づいて、2つ目の側面に対応する頻度値が閾値を超えるか否かを判断し、該2つ目の側面に対応する頻度値が閾値を超える場合に、該2つ目の側面を分離対象とする。さらに、分離部144は、分離対象の2つ目の側面に対応する横方向の位置から1つ目の側面に対応する横方向の位置へ向かう方向において、最も遠い奥行方向の位置に対応する横方向の位置を分離位置として特定する。そして、分離部144は、特定した分離位置を境界として1つの集合領域を2つの集合領域に分離し、IDを振り直す(別々のIDを割り当てる)。
より具体的には以下のとおりである。図27は、分離部144による処理(分離処理)の一例を示すフローチャートである。分離部144は、抽出部143により輪郭が抽出された集合領域ごとに、図27の処理を繰り返す。以下、図27のフローチャートの内容を説明する。
分離部144は、集合領域(物体)の位置は、右または左であるか否かを判断する(ステップS11)。より具体的には、分離部144は、集合領域の左端位置と右端位置から、集合領域がStandard Umap上の中心のX座標に対して左側か右側かを判断する。ここでは、図28に示すように、Standard Umap上の中心のX座標から、集合領域の左端のX座標までの距離をDiff_Left、中心のX座標から、集合領域の右端のX座標までの距離をDiff_Rightと表記する。そして、分離部144は、Diff_Leftが、Diff_Rightよりも所定数の画素分(左寄りか右寄りかを判別可能な数であればよい。この例では50cmに相当する4つ分)だけ大きい場合、集合領域の位置は左であると判断する。また、分離部144は、Diff_Rightが、Diff_Leftよりも所定の画素数分だけ大きい場合、集合領域の位置は右であると判断する。上記の何れの条件にも該当しない場合、分離部144は、集合領域の位置は中心であると判断する。この場合、ステップS11の結果は否定となり、そのまま処理は終了する。一方、集合領域の位置が右または左であると判断した場合、ステップS11の結果は肯定となり、処理はステップS12に移行する。
ステップS12では、分離部144は、上述の第2の対応情報を生成する。この例では、分離部144は、集合領域を含む関心領域(例えばStandard Umap上の検出矩形であってもよい)の行ごとに横方向にサーチし、繋がりの方向として同一の縦方向を示す方向情報が2回目以降にカウントされる画素を対象画素として特定していく。そして、分離部144は、横方向(Standard Umapの横軸の方向)の位置と、奥行方向(Standard Umapの縦軸の方向)にわたって対象画素をカウントした頻度値とが対応付けられた第2の対応情報を生成する。例えば集合領域の位置が右である場合、サーチの開始位置は関心領域の左端であり、サーチ方向は左から右へ向かう方向であり、分離部144は、上から下へ向かう方向を示す方向情報(この例では「1」を示す探索順)が2回目以降にカウントされる画素を対象画素として特定する。
例えば図29のように下の行から順番にサーチする場合において、第3番目のサーチで「1」を示す探索順が設定された画素が発見されているが、「1」を示す探索順が設定された画素は1回しか発見されていないので(「1」を示す探索順が設定された画素のカウント数は1なので)、対象画素は存在しないことになる。また、例えば図30のように、第4番目のサーチでは、「1」を示す探索順が設定された画素が2回発見されているので(「1」を示す探索順が設定された画素のカウント数は2なので)、対象画素は存在することになり、2回目にカウントされた画素が対象画素として特定される。そして、分離部144は、横方向(Standard Umapの横軸の方向)の位置ごとに、以上のようにして特定した対象画素の数を奥行方向(Standard Umapの縦軸の方向)にわたってカウントしていき、そのカウント数に対応する頻度値を対応付ける。図31の例では、横方向の位置Pに対して、カウント数「5」(奥行方向にわたってカウントされた対象画素の数)を示す頻度値が対応付けられる。このようにして第2の対応情報が生成されることになる。
また、例えば集合領域が斜めの形状を持つ場合に対応するために、第2の対応情報は、横方向の位置ごとに、該横方向の位置を含む横方向の所定の範囲内における対象画素の数を奥行方向にわたってカウントした数の総数を頻度値として対応付けた情報であってもよい。例えば図32において、横方向の位置Pを含む所定の範囲は左右に隣接する位置Q、位置Rを含む範囲であり、この所定の範囲内における対象画素の数を奥行方向にわたってカウントした数は「5」となる。同様に、横方向の位置Qを含む所定の範囲は左右に隣接する位置S、位置Pを含む範囲であり、この所定の範囲内における対象画素の数を奥行方向にわたってカウントした数は「5」となる。同様に、横方向の位置Rを含む所定の範囲は左右に隣接する位置P、位置Tを含む範囲であり、この所定の範囲内における対象画素の数を奥行方向にわたってカウントした数は「5」となる。この場合、第2の対応情報は、位置Qに対してカウント数「5」を示す頻度値が対応付けられ、位置Pに対してカウント数「5」を示す頻度値が対応付けられ、位置Rに対してカウント数「5」を示す頻度値が対応付けられた情報となる。
図27に戻って説明を続ける。ステップS12で第2の対応情報を生成した後、分離部144は、集合領域(第2の対応情報の生成元の集合領域)が分離対象であるか否かを判断する(ステップS13)。この例では、第2の対応情報の最大の頻度値(最大頻度)は2つ目の側面の長さと考えることができ、分離部144は、第2の対応情報の最大頻度が、もともとの奥行きに比べて十分な長さを有しているか否かを判断する。ここでは、分離部144は、第2の対応情報の最大頻度が、もともとの奥行きに比べて十分な長さを有しているか否かを判断するための第1の閾値よりも大きいか否かを判断(第1の条件を満たすか否かを判断)する。また、分離部144は、検出物体の距離(奥行方向の距離)に着目し、第2の対応情報の最大頻度(2つ目の側面の長さに対応)が、視差誤差による側面らしい形状をした集合領域を2つ目の側面として検出していないか否かを判断するための第2の閾値よりも大きいか否かを判断(第2の条件を満たすか否かを判断)する。ここでは、分離部144は、第1の条件および第2の条件を満たす場合、集合領域は分離対象であると判断する。要するに、分離部144は、第2の対応情報に基づいて、2つ目の側面に対応する頻度値が閾値を超えるか否かを判断し、2つ目の側面に対応する頻度値が閾値を超える場合に、該2つ目の側面を分離対象とする。見方を変えれば、第2の対応情報において閾値を超える頻度値は、分離対象とする2つ目の側面に対応する頻度値となる。
ステップS13の結果が肯定の場合(ステップS13:Yes)、分離部144は集合領域を分離する処理を行う(ステップS14)。一方、ステップS13の結果が否定の場合(ステップS13:No)、そのまま処理は終了する。以下、上述のステップS14の処理の具体的な内容について説明する。分離部144は、第2の対応情報の最大頻度値に対応付けられた横方向の位置を、2つ目の側面の位置と判断する。例えば図32の態様の場合は、最大頻度値に対応付けられた3つの横方向の位置(P、Q、R)のうち、奥行方向の位置が最も近い対象画素(視差値が最も大きい対象画素(この例では「1」を示す探索順が設定された画素))が対応付けられた位置Pを、2つ目の側面に対応する位置として判断することができる。そして、2つ目の側面に対応する横方向の位置から1つ目の側面に対応する横方向の位置へ向かう方向において、最小視差を持つ画素(奥行方向に最も遠い画素)を特定する。集合領域の位置が右である場合、図33に示すように、分離部144は、2つ目の側面に対応する位置から左へ向かう方向において、最小視差を持つ画素の横方向の位置を分離位置として特定する。つまり、奥行方向の空白領域が最も大きい画素の横方向の位置を分離位置として特定する。そして、図34に示すように、分離部144は、以上のようにして特定した分離位置を境界として、1つの集合領域を2つの集合領域(図34の例では、第1の集合領域と第2の集合領域)に分離する。
以上に説明したように、本実施形態では、抽出部143により抽出された集合領域の輪郭の特徴に基づいて集合領域を分離する。より具体的には、分離部144は、抽出部143により抽出された集合領域の輪郭が同一方向の複数の面を有する場合に、該集合領域を分離する。これは通常、同一の物体であれば、その物体を囲む面は同一方向に複数存在しないので、同一方向の面が複数ある場合には、複数の物体が連結して誤検出されていると判断できるためである。これにより、複数の物体を結合した1つの物体として誤検出されることを防止できる。すなわち、本実施形態によれば、物体の検出精度を十分に確保することができる。
以上、本発明に係る実施形態について説明したが、本発明は、上述の各実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上述の実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。
また、上述した実施形態の機器制御システム100で実行されるプログラムは、インストール可能な形式または実行可能な形式のファイルでCD-ROM、フレキシブルディスク(FD)、CD-R、DVD(Digital Versatile Disk)、USB(Universal Serial Bus)等のコンピュータで読み取り可能な記録媒体に記録して提供するように構成してもよいし、インターネット等のネットワーク経由で提供または配布するように構成してもよい。また、各種プログラムを、ROM等に予め組み込んで提供するように構成してもよい。