以下、本開示の一実施形態について、図面を参照して説明する。以下の図面において、同一又は類似の構成要素には、同一の符号を付す。なお、以下の説明で用いられる図は模式的なものである。図面上の寸法及び比率等は現実のものとは必ずしも一致していない。カメラによる撮像画像及び視差画像等を表す図は、説明のために作成されたものを含む。これらの画像は、実際に撮像され又は処理された画像とは異なる。また、以下の説明において、「被写体」はカメラに撮像される対象である。「被写体」は、物体、路面及び空等を含む。「物体」は、空間内で具体的な位置及び大きさを有するものである。「物体」は、「立体物」とも呼ばれる。
図1に示すように、物体検出システム1は、ステレオカメラ10と物体検出装置20とを含む。ステレオカメラ10と物体検出装置20とは、有線又は無線通信により通信可能である。ステレオカメラ10と物体検出装置20とは、ネットワークを介して通信してよい。ネットワークは、例えば、有線又は無線のLAN(Local Area Network)、又は、CAN(Controller Area Network)等を含んでよい。ステレオカメラ10と物体検出装置20とは、同一の筺体内に収納され一体的に構成されてよい。ステレオカメラ10及び物体検出装置20は、後述する移動体30内に位置し、移動体30内のECU(Electronic Control Unit)と通信可能に構成されてよい。
本開示において「ステレオカメラ」とは、互いに視差を有し、互いに協働する複数のカメラである。ステレオカメラは、少なくとも2つ以上のカメラを含む。ステレオカメラでは、複数のカメラを協働させて、複数の方向から対象を撮像することが可能である。ステレオカメラは、1つの筐体に複数のカメラが含まれる機器であってよい。ステレオカメラは互いに独立し、且つ、互いに離れて位置する2台以上のカメラを含む機器であってよい。ステレオカメラは、互いに独立した複数のカメラに限られない。本開示では、例えば、離れた2箇所に入射される光を1つの受光素子に導く光学機構を有するカメラをステレオカメラとして採用できる。本開示では、同一被写体を異なる視点から撮像した複数の画像を「ステレオ画像」と呼ぶことがある。
図1に示すように、ステレオカメラ10は、第1カメラ11と第2カメラ12とを備える。第1カメラ11及び第2カメラ12は、それぞれ光軸OXを規定する光学系と撮像素子とを備える。第1カメラ11及び第2カメラ12はそれぞれ異なる光軸OXを有する。本実施形態では、単一の符号OXのみで、第1カメラ11及び第2カメラ12の双方の光軸OXを纏めて表す。撮像素子は、CCDイメージセンサ(Charge-Coupled Device Image Sensor)及びCMOSイメージセンサ(Complementary MOS Image Sensor)を含む。第1カメラ11及び第2カメラ12がそれぞれ備える撮像素子は、それぞれのカメラの光軸OXに垂直な同一面内に存在してよい。第1カメラ11及び第2カメラ12は、撮像素子で結像された画像を表す画像信号を生成する。また、第1カメラ11及び第2カメラ12は、撮像した画像について、歪み補正、明度調整、コントラスト調整及びガンマ補正等の任意の処理を行ってよい。
第1カメラ11及び第2カメラ12の光軸OXは、互いに同一被写体を撮像可能な方向を向いている。第1カメラ11及び第2カメラ12は、撮像した画像に少なくとも同一被写体が含まれるように、光軸OX及び位置が定められる。第1カメラ11及び第2カメラ12の光軸OXは、互いに平行になるように向けられる。この平行は、厳密な平行に限られず、組み立てのずれ、取付けのずれ及びこれらの経時によるずれを許容する。第1カメラ11及び第2カメラ12の光軸OXは、平行に限られず、互いに異なる方向を向いてよい。第1カメラ11及び第2カメラ12の光軸OXが互いに平行でない場合でも、ステレオカメラ10又は物体検出装置20内で、画像を変換することによりステレオ画像を生成可能である。基線長は、第1カメラ11の光学中心と第2カメラ12の光学中心との間の距離である。基線長は、第1カメラ11と第2カメラ12との間のレンズの中心の距離に相当する。基線長方向は、第1カメラ11の光学中心と第2カメラ12の光学中心とを結ぶ方向である。
第1カメラ11及び第2カメラ12は、光軸OXに交わる方向において離れて位置している。複数の実施形態のうちの1つにおいて、第1カメラ11及び第2カメラ12は、左右方向に沿って位置している。第1カメラ11は、前方を向いたときに第2カメラ12の左側に位置する。第2カメラ12は、前方を向いたときに第1カメラ11の右側に位置する。第1カメラ11及び第2カメラ12は、所定のフレームレート(例えば30fps)で被写体を撮像する。第1カメラ11と第2カメラ12との位置の違いにより、各カメラで撮像した2つの画像において、互いに対応する被写体の位置は、異なる。第1カメラ11は、第1画像を撮像する。第2カメラ12は、第2画像を撮像する。第1画像及び第2画像は、異なる視点から撮像されたステレオ画像となる。
図2及び図3に示すように、物体検出システム1は、移動体30に搭載される。図2に示すように、第1カメラ11及び第2カメラ12は、移動体30の前方を撮像可能となるように、第1カメラ11及び第2カメラ12の各光学系の光軸OXが移動体30の前方と略平行となるように配置される。
本開示の移動体30は、道路又は滑走路等を含む走行路の上を走行する。移動体30が走行する走行路の表面は、「路面」とも呼ばれる。
本開示において、移動体30の直進時の進行方向は、「前方」又は「z軸の正方向」とも呼ばれる。前方の反対方向は、「後方」又は「z軸の負方向」とも呼ばれる。z軸の正方向とz軸の負方向とを特に区別しない場合、これらは、纏めて「z方向」とも呼ばれる。移動体30の前方を向いた状態を基準として、左方向及び右方向が定義される。z方向は、「奥行き方向」とも呼ばれる。
本開示において、z方向に直交し、且つ、左方向から右方向へ向かう方向は、「x軸の正方向」とも呼ばれる。z方向に直交し、且つ、右方向から左方向へ向かう方向は、「x軸の負方向」とも呼ばれる。x軸の正方向とx軸の負方向とを特に区別しない場合、これらは、纏めて「x方向」とも呼ばれる。x方向は、基線長方向に一致してよい。x方向は、「水平方向」とも呼ばれる。
本開示において、移動体30の近傍の路面に垂直で、且つ、当該路面から上に向かう方向は、「高さ方向」又は「y軸の正方向」とも呼ばれる。高さ方向の反対方向は、「y軸の負方向」とも呼ばれる。y軸の正方向とy軸の負方向とを特に区別しない場合、これらは、纏めて「y方向」と呼もばれる。y方向は、x方向及びz方向に対して直交してよい。y方向は、「鉛直方向」とも呼ばれる。
本開示における「移動体」は、例えば、車両及び航空機を含んでよい。車両は、例えば自動車、産業車両、鉄道車両、生活車両、及び、滑走路を走行する固定翼機等を含んでよい。自動車は、例えば、乗用車、トラック、バス、二輪車、及び、トロリーバス等を含んでよい。産業車両は、例えば、農業及び建設向けの産業車両等を含んでよい。産業車両は、例えば、フォークリフト及びゴルフカート等を含んでよい。農業向けの産業車両は、例えば、トラクター、耕耘機、移植機、バインダー、コンバイン、及び、芝刈り機等を含んでよい。建設向けの産業車両は、例えば、ブルドーザー、スクレーバー、ショベルカー、クレーン車、ダンプカー、及び、ロードローラ等を含んでよい。車両は、人力で走行するものを含んでよい。車両の分類は、上述した例に限られない。例えば、自動車は、道路を走行可能な産業車両を含んでよい。複数の分類に同一車両が含まれてよい。航空機は、例えば固定翼機及び回転翼機等を含んでよい。
第1カメラ11及び第2カメラ12は、移動体30の種々の場所に搭載され得る。複数の実施形態のうちの1つにおいて、第1カメラ11及び第2カメラ12は、車両である移動体30の内部に搭載され、ウインドシールドを介して移動体30の外部を撮像し得る。例えば、第1カメラ11及び第2カメラ12は、ルームミラーの前方、又は、ダッシュボード上に配置される。複数の実施形態の1つにおいて、第1カメラ11及び第2カメラ12は、車両のフロントバンパー、フェンダーグリル、サイドフェンダー、ライトモジュール及びボンネットの何れかに固定されていてよい。
物体検出装置20は、移動体30内において任意の箇所に位置し得る。例えば、物体検出装置20は、移動体30のダッシュボード内に位置し得る。物体検出装置20は、ステレオカメラ10から、第1画像及び第2画像を取得する。物体検出装置20は、第1画像及び第2画像に基づいて、物体を検出する。物体検出装置20が検出対象とする物体は、移動体30が車両である場合、路面上の物体となり得る。当該路面上の物体の一例として、他車両及び歩行者等が挙げられる。
物体検出装置20は、以下に説明する制御部24が行う処理を、非一時的なコンピュータ可読媒体に記録されたプログラムを読み込んで実装するように構成されてよい。非一時的なコンピュータ可読媒体は、磁気記憶媒体、光学記憶媒体、光磁気記憶媒体、及び、半導体記憶媒体を含むがこれらに限られない。磁気記憶媒体は、磁気ディスク、ハードディスク、及び、磁気テープを含む。光学記憶媒体は、CD(Compact Disc)、DVD、ブルーレイディスク(Blu-ray(登録商標) Disc)等の光ディスクを含む。半導体記憶媒体は、ROM(Read Only Memory)、EEPROM(Electrically Erasable Programmable Read-Only Memory)、フラッシュメモリを含む。
物体検出装置20は、取得部21と、出力部22と、メモリ23と、制御部24(プロセッサ)とを備える。
取得部21は、物体検出装置20の入力インタフェースである。取得部21は、ステレオカメラ10及び他の装置から情報の入力を受付け可能である。取得部21には、物理コネクタ、及び、無線通信機が採用可能である。物理コネクタには、電気信号による伝送に対応した電気コネクタ、光信号による伝送に対応した光コネクタ、及び、電磁波による伝送に対応した電磁コネクタが含まれる。電気コネクタには、IEC60603に準拠するコネクタ、USB規格に準拠するコネクタ、RCA端子に対応するコネクタ、EIAJ CP-1211Aに規定されるS端子に対応するコネクタ、EIAJ RC-5237に規定されるD端子に対応するコネクタ、HDMI(登録商標)規格に準拠するコネクタ、及び、BNCを含む同軸ケーブルに対応するコネクタが含まれる。光コネクタには、IEC 61754に準拠する種々のコネクタが含まれる。無線通信機には、Bluetooth(登録商標)、及び、IEEE802.11を含む各規格に準拠する無線通信機が含まれる。無線通信機は、少なくとも1つのアンテナを含む。
取得部21には、第1カメラ11及び第2カメラ12の各々が撮像した画像の画像データが入力され得る。取得部21は、入力された画像データを、制御部24に出力する。取得部21は、ステレオカメラ10の撮像信号の伝送方式に対応してよい。取得部21は、ネットワークを介してステレオカメラ10の出力インタフェースに接続されてよい。
出力部22は、物体検出装置20の出力インタフェースである。出力部22は、物体検出装置20の処理結果を、移動体30内の他の装置又は移動体30外の他の装置に出力し得る。移動体30内の他の装置は、オートクルーズコントロール等の走行支援装置、及び、自動ブレーキ装置等の安全装置を含んでよい。移動体30外の他の装置、他車両及び路測機等を含んでよい。移動体30内の他の装置又は移動体30外の他の装置は、物体検出装置20から受信した情報を適宜使用し得る。出力部22は、取得部21と同一又は類似に、有線及び無線の通信に対応した種々のインタフェースを含んでよい。例えば、出力部22は、CANのインタフェースを有してよい。この場合、出力部22は、移動体30内の他の装置と通信を行う。
メモリ23は、種々の処理のためのプログラム及び演算中の情報を記憶する。メモリ23は、揮発性メモリ及び不揮発性メモリが含まれる。メモリ23は、プロセッサと独立しているメモリ、及び、プロセッサの内蔵メモリが含まれる。
制御部24は、一つ又は複数のプロセッサを含む。プロセッサには、特定のプログラムを読み込ませて特定の機能を実行する汎用のプロセッサ、特定の処理に特化した専用のプロセッサが含まれる。専用のプロセッサには、特定用途向けIC(ASIC;Application Specific Integrated Circuit)が含まれる。プロセッサには、プログラマブルロジックデバイス(PLD;Programmable Logic Device)が含まれる。PLDには、FPGA(Field-Programmable Gate Array)が含まれる。制御部24は、一つ又は複数のプロセッサが協働するSoC(System-on-a-Chip)、及びSiP(System In a Package)の何れかであってよい。制御部24の実行する処理は、プロセッサが実行する処理と言い換えることができる。
制御部24は、物体検出装置20内の情報処理において、第1視差マップに対して様々な処理を実行する。第1視差マップは、二次元座標に、視差が対応付けられたものである。第1視差マップの二次元座標は、ステレオカメラ10の撮像画像の水平方向に対応する横方向と、横方向に交差する縦方向とから成る。横方向は、第1方向である。縦方向は第2方向である。横方向と縦方向とは互いに直交してよい。横方向は、路面の幅方向に対応し得る。横方向は、ステレオカメラ10の撮像する画像が水平線を含むとき、水平線に平行な方向に対応し得る。縦方向は、実空間における重力の加わる方向に対応し得る。
物体検出装置20内の情報処理において、第1視差マップは、種々の操作を受ける。種々の操作は、演算処理、メモリ23への書き込み及びメモリ23からの読み出し等を含む。第1視差マップを画像化したものは、「第1視差画像」とも呼ばれる。第1視差画像は、横方向と縦方向とから成る2次元平面上に視差を表す画素が配置された画像である。以下、制御部24は、第1視差画像に対して種々の処理を実行するものとして説明する。以下の説明において、第1視差画像に対する処理は、第1視差マップに対する処理と言い換えられ得る。
本開示の物体検出システム1の構成は、図1に示す構成に限定されない。図4に、本開示の他の実施形態に係る物体検出システム1Aを示す。物体検出システム1Aは、ステレオカメラ10と、物体検出装置20と、生成装置25とを備える。生成装置25は、物体検出装置20とは別体のハードウェア上に搭載されてよい。生成装置25は、ステレオカメラ10から出力された第1画像及び第2画像に基づいて、第1視差画像を生成する。生成装置25は、プロセッサを有する。生成装置25に含まれるプロセッサは、ステレオカメラ10の第1カメラ11及び第2カメラ12からそれぞれ出力された第1画像及び第2画像に基づいて、第1視差画像を生成する。取得部21は、生成装置25から、第1視差画像を取得する。物体検出装置20と生成装置25とは、纏めて1つの物体検出装置と見なされてよい。
以下、図5に示すフローチャートを参照して、制御部24が実行する処理を説明する。図5は、図1に示す物体検出装置20が実行する処理の全体の流れの一例を示すフローチャートである。
まず、図5のフローチャートの各ステップで行う処理の詳細な説明に先立ち、各ステップの処理の概要と目的が簡単に説明される。
ステップS101は、第1視差画像を取得又は生成するステップである。ステップS101は、後述する第1処理の前段処理に相当する。図1に示す構成では、制御部24は、第1視差画像を生成する。図4に示す構成では、制御部24は、生成装置25が生成した第1視差画像を、取得部21によって取得する。
ステップS102は、路面の形状を推定するステップである。ステップS102で実行される処理は、「第1処理」とも呼ばれる。路面の形状が推定されることにより、第1視差画像上において、縦方向の座標に対する、路面に対応する視差が推定され得る。路面の形状は、以下の処理において不要な視差を除去するために、及び/又は、実空間上での路面の高さ位置を推定するために用いられ得る。
ステップS103は、第1視差画像から不要な視差を除去することにより、第2視差画像を生成するステップである。ステップS103で実行される処理は、「第2処理」とも呼ばれる。不要な視差は、第1視差画像に含まれ得る、路面の白線に対応する視差及び道路上空に存在する構造物に対応する視差等を含む。第1視差画像から不要な視差を除くことによって、物体検出装置20が、路面の白線及び路面上空に存在する構造物等を、路面上の検出対象の物体であると誤検出する可能性が低減される。これにより、物体検出装置20が物体を検出する精度が高まり得る。
ステップS103は、物体検出装置20内の情報処理において、第1視差マップから不要な視差を除去することにより、第2視差マップを生成するステップとなり得る。上述の第2視差画像は、第2視差マップを画像化したものである。以下の説明において、第2視差画像に対する処理は、第2視差マップに対する処理と言い換えられ得る。
ステップS104は、第2視差画像に基づいて、第1視差及び第2視差を検出するステップである。第1視差は、検出対象の物体に対応する視差とみなして、検出される。第2視差は、検出対象の物体に対応する視差の候補として、検出される。第2視差は、後述の復活処理において検出対象の物体に対応する視差として復活させるか否かが判定され得る。
ステップS105は、画像上における物体の高さを算出するステップである。検出された画像上における物体の高さは、後述の図51に示すような検出枠182の高さとなり得る。画像上における物体の高さは、「検出枠の高さ」とも呼ばれる。ステップS105で実行される処理は、「高さ算出処理」とも呼ばれる。
ステップS106は、第2視差画像において、移動体30の進行方向に平行な物体に対応する視差を検出するステップである。移動体30の進行方向に平行な物体は、「平行物体」とも呼ばれる。平行物体の一例として、ガードレール及び高速道路の遮音壁等の道路端の構造物、又は、他車両の側面等が挙げられる。ガードレール等の平行物体と、他車両等の検出対象の物体は、例えば第2視差画像上で、近接している場合がある。平行物体を検出し、例えば検出した平行物体にフラグを付加しておくことにより、物体検出装置20が、平行物体を、路面上の検出対象の物体であると誤検出する可能性が低減される。このような構成により、物体検出装置20が物体を検出する精度が高まり得る。ステップS106で実行される処理は、「平行物体の検出処理」とも呼ばれる。
ステップS107は、第2視差を、検出対象の物体に対応する視差として復活させるか否かを判定するステップである。
ステップS108は、第1視差及び復活した第2視差の中から、第2視差画像の横方向の各座標において、代表視差を決定するステップである。ステップS108で実行される処理は、「第3処理」とも呼ばれる。ステップS104〜S108で実行される処理は、「第3処理」とも呼ばれる。
ステップS109は、代表視差の情報を実空間上の座標に変換して、代表視差の纏まり(グループ)を抽出することにより、物体を検出するステップである。ステップS109で実行される処理は、「第4処理」とも呼ばれる。ステップS109では、検出対象の物体の位置、及び、ステレオカメラ10側から見た物体の幅の情報が得られる。
ステップS110は、検出された物体の情報を、出力部22から出力するステップである。ステップ110で出力される物体の情報には、ステップS105で算出された画像上の物体の高さ、ステップS109で検出された検出対象の物体の位置、及び、ステップS109で検出されたステレオカメラ10側から観た物体の幅の情報等が含まれ得る。これらの情報は、移動体30内の他の装置に提供され得る。
次に、各ステップの詳細が説明される。
ステップS101の処理において、制御部24は、第1視差画像を取得又は生成する。図1に示す物体検出システム1では、制御部24は、取得部21が取得した第1画像及び第2画像に基づいて、第1視差画像を生成する。図4に示す物体検出システム1Aでは、制御部24は、生成装置25が生成した第1視差画像を、取得部21によって取得する。制御部24は、以降の処理のために、第1視差画像をメモリ23に格納してよい。
第1視差画像の生成方法は、公知であるから、以下に簡単に説明する。以下では、制御部24が第1視差画像を生成するものとする。
制御部24は、第1カメラ11が撮像した第1画像と、第2カメラ12が撮像した第2画像とを取得する。制御部24は、第1画像及び第2画像の一方の画像(例えば、第1画像)を多数の小領域に分割する。小領域は、縦方向及び横方向のそれぞれに複数の画素が配列された矩形の領域となり得る。例えば、小領域は、縦方向に並ぶ3画素と、横方向に並ぶ3画素とにより構成され得る。ただし、小領域の縦方向に並ぶ画素の数及び横方向に並ぶ画素の数は、3つに限定されない。また、小領域の縦方向と横方向とに含まれる画素の数は、異なってよい。制御部24は、分割した複数の小領域のそれぞれの画素を、他方の画像上で1画素ずつ横方向にずらしながら、特徴量を比較することにより、マッチングさせる。例えば第1画像を小領域に分割した場合、制御部24は、第1画像の小領域を第2画像上で1画素ずつ横方向にずらしながら、特徴量を比較することにより、マッチングさせる。特徴量は、例えば、輝度及び色のパターンである。ステレオ画像のマッチングには、SAD(Sum of Absolute Difference)関数を用いる方法が知られている。これは、小領域内の輝度値の差の絶対値の総和を表すものである。SAD関数が最小となるとき、両画像は最も類似すると判断される。ステレオ画像のマッチングは、SAD関数を用いる方法に限定されない。ステレオ画像のマッチングには、他の方法が採用されてよい。
制御部24は、第1画像と第2画像とでマッチングした2つの領域の横方向における画素の位置の違いに基づいて、当該小領域毎の視差を算出する。視差は、同一被写体の、第1画像における位置と、第2画像における位置との差となり得る。視差の大きさは、ステレオ画像上の画素の横方向の幅を単位として表され得る。視差の大きさは、補間処理をすることにより、1画素より小さい精度で算出され得る。視差の大きさは、ステレオカメラ10により撮像された被写体の、実空間上におけるステレオカメラ10との間の距離に対応する。実空間上におけるステレオカメラ10から被写体までの距離が近いほど、当該被写体に対応する視差は、大きくなる。実空間上におけるステレオカメラ10から被写体までの距離が遠いほど、当該被写体に対応する視差は、小さくなる。
制御部24は、算出した視差の分布を示す第1視差画像を生成する。第1視差画像を構成する視差を表す画素は、「視差画素」とも呼ばれる。制御部24は、元の第1画像及び第2画像の画素と同一精細度で第1視差画像を生成してよい。
図6に、第1視差画像40を示す。第1視差画像40は、ステレオカメラ10の横方向(第1方向)と、横方向に直交する縦方向(第2方向)とから成る二次元平面である。第1視差画像40の二次元平面には、視差を表す視差画素が並ぶ。横方向は、「u方向」とも呼ばれる。縦方向は、「v方向」とも呼ばれる。u方向及びv方向からから成る座標系は、「uv座標系」及び「画像座標系」とも呼ばれる。本実施形態では、各図の紙面に向かって左上側の角が、uv座標系の原点(0,0)となる。また、各図の紙面の左側から右側に向かう方向がu軸の正方向となり、その反対方向がu軸の負方向となる。また、各図の紙面の上側から下側に向かう方向がv軸の正方向となり、その反対方向がv軸の負方向となる。v軸の負方向は、実空間上の路面から上に向かう方向に対応する。u座標及びv座標は、視差画素を単位として表記され得る。
図6に示すように、第1視差画像40は、視差画像41と、視差画像42と、視差画像43とを含む。視差画像41は、移動体30の前方の路面に対応する。視差画像42は、移動体30の前方に位置する他車両に対応する。視差画像43は、ガードレールに対応する視差画像である。
制御部24は、第1視差画像の各画素が含む視差情報を、各画素の輝度又は色等によって表示させてよい。図6に示す第1視差画像40では、説明上、各画素の視差は、異なる網掛により表示されている。第1視差画像40では、網掛が濃い領域ほど、その領域内の画素が表す視差は、小さい。網掛が薄い領域ほど、その領域内の画素が表す視差は、大きい。第1視差画像40において、等しい網掛けがされた領域内の画素は、それぞれ所定範囲内の視差を表す。実際の第1視差画像では、一部の領域内の画素は、他の領域内の画素と比較して、視差を算出する上述のマッチング処理においてステレオ画像上の特徴量が少ないことにより、視差が算出され難くなる場合がある。例えば、車両の窓等の空間的に均一な被写体の部分、及び、太陽光の反射による白とびが発生している部分は、視差が算出され難い。第1視差画像では、物体及び構造物に対応する視差が存在する場合、それらは、より遠くに位置する背景に対応する視差とは、異なる輝度又は色で表示され得る。
制御部24は、視差を算出した後に第1視差画像を画像として表示しなくてよい。つまり、制御部24は、第1視差画像の元となる第1視差マップを保持し、第1視差マップに対して適宜処理を実行すればよい。
ステップS101を実行した後、制御部24は、第1視差画像から路面の形状を推定する第1処理を行う(ステップS102)。以下において、制御部24が実行する路面の形状の推定処理を、図7、図8及び図14のフローチャートを用いて説明する。まず、制御部24は、第1視差画像から路面候補視差dcを抽出する(ステップS201)。路面候補視差dcは、第1視差画像から収集される路面視差drに該当する可能性が高い視差である。路面視差drは、路面領域の視差を意味する。路面視差drは、路面上の物体の視差を含まない。路面視差drは、路面上の対応する箇所迄の距離を表す。路面視差drは、同じv座標を有する位置で近い値を有するものとして収集される。
路面候補視差dcの抽出処理の詳細は、図8のフローチャートに示される。図8に示すように、制御部24は、ステレオカメラ10の設置位置に基づいて、路面候補視差算出用の視差の初期値である路面候補視差初期値d0を計算する(ステップS301)。路面候補視差初期値d0は、ステレオカメラ10から最も近い路面候補視差の抽出位置での路面候補視差の初期値である。ステレオカメラ10から最も近い路面候補視差の抽出位置は、例えば、ステレオカメラ10から、1mから10mの範囲から設定することができる。
図9に示すように、ステレオカメラ10において、路面高さYは、撮像される路面41Aからのステレオカメラ10の鉛直方向の高さである。また、路面高さY0は、ステレオカメラ10の設置位置における路面41Aからの高さである。道路の起伏により、路面高さYはステレオカメラ10からの距離により変化することがある。従って、ステレオカメラ10から離れた位置での路面高さYは、ステレオカメラ10の設置位置での路面高さY0に一致しない。複数の実施形態の一つにおいて、ステレオカメラ10の第1カメラ11及び第2カメラ12は、光軸OXを互いに平行に前方に向けて設置されていると仮定される。図9において距離Zは、特定の路面位置までの水平方向の距離を示す。ステレオカメラ10の基線長をB、縦方向の画像サイズをTOTALvとする。この場合、ある縦方向の座標(v座標)において撮像された路面41Aの路面視差dsと路面高さYとの関係は、次の数式で与えられる。
ds=B/Y×(v−TOTALv/2) (1)
数式(1)により算出された路面視差dsは、「幾何推定路面視差」とも呼ばれる。以下において、幾何推定路面視差を符号dsで表記することがある。
路面候補視差初期値d0は、路面41Aが、ステレオカメラ10とステレオカメラ10の位置から最も近い路面候補視差dcの抽出位置との間で、第1カメラ11及び第2カメラ12の光軸OXに平行且つ平坦であるものと仮定して算出される。その場合、ステレオカメラ10の位置から最も近い路面候補視差の抽出位置の、第1視差画像上のv座標が特定の座標(v0)に定まる。座標(v0)は、路面候補視差を抽出するv座標の初期値である。座標(v0)は、TOTALv/2とTOTALvとの間に位置する。座標(v0)は、視差算出が可能な画像座標の範囲内で最も下側(v座標の大きい側)に位置する。座標(v0)は、第1視差画像の最も下の行に対応するTOTALvとしてよい。路面候補視差初期値d0は、数式(1)のvにv0を代入し、YにY0を代入することにより決定することができる。
制御部24は、路面候補視差初期値d0に基づいて、縦方向のv座標が座標(v0)である最初の行の視差収集閾値を計算する(ステップS302)。行は、第1視差画像上で同じv座標を有する横方向に並ぶ画素の配列を意味する。視差収集閾値は、視差を収集する上限の閾値である上限閾値と、視差を収集する下限の閾値である下限閾値とを含む。視差収集閾値は、路面候補視差初期値d0を含むように路面候補視差初期値d0の上下に所定の規則に基づいて設定される。具体的には、路面候補視差初期値d0を算出した状態から、予め定めた路面高さ変化量ΔYだけ路面高さYが上下に変化した場合の路面視差が、視差収集閾値の上限閾値及び下限閾値として定められる。すなわち、視差収集閾値の下限閾値は、路面候補視差初期値d0から路面高さ変化量ΔY分の視差を引いて得られる。視差収集閾値の上限閾値は、路面候補視差初期値d0から路面高さ変化量ΔY分の視差を加えて得られる。具体的な視差収集閾値の下限閾値及び上限閾値は、数式(1)のYの値を変更することにより求められる。
以下において、制御部24は、ステップS303の処理とステップS307の処理とを繰り返し実行する。まず、制御部24は、第1視差画像の最も下側に位置するv座標が座標(v0)である行についての処理を行う(ステップS303)。
制御部24は、視差収集閾値を用いて視差を収集する(ステップS304)。制御部24は、第1視差画像に含まれるv座標が座標(v0)の横方向に並んで位置する各視差画素について、視差収集閾値の下限閾値と上限閾値との間の視差を有する視差画素を路面候補視差dcとして収集する。すなわち、制御部24は、数式(1)を用いて算出された路面候補視差初期値d0を基準とする所定のマージンの範囲に入る視差を有する視差画素を、路面41Aの正しい視差を表す視差画素の候補であると判定する。制御部24は、路面41Aの正しい視差を表す視差画素の候補であると判定された視差画素の視差を路面候補視差dcとする。このような構成により、制御部24は、路面41A上の物体及び構造物等の路面41A以外に対応する視差を、路面41Aに対応する視差として、誤判定する可能性が低減され得る。これにより、路面41Aの検出精度が向上する。
ステップS304の処理においてv座標が座標(v0)の全ての視差画素の判定が終了すると、制御部24は、収集した路面候補視差dcを平均化して路面候補視差dcの平均値である平均路面候補視差davを算出する(ステップS305)。制御部24は、それぞれの路面候補視差dc及びそのu−v座標、並びに、v座標が座標(v0)における平均路面候補視差davを、メモリ23に格納してよい。
ステップS305の処理を実行した後、制御部24は、ステップS306の処理を実行する。ステップS306の処理において、制御部24は、ステップS305の処理で算出したv座標が座標(v0)の平均路面候補視差davから、1行上の行、すなわち、v座標が座標(v0−1)の行の各視差画素について、視差収集閾値を算出する。制御部24は、ステップS304の処理で算出したv座標が座標(v0)のときの平均路面候補視差davに対して、数式(1)が成立するように路面高さYを変更する。制御部24は、路面高さYを変更した数式(1)のv0に代えて、v0−1を代入することにより、v座標が座標(v0−1)のときの幾何推定路面視差dsを算出する。制御部24は、ステップS302の処理と類似に、幾何推定路面視差dsから所定の路面高さ変化量ΔY分の視差を引いた視差を視差収集閾値の下限閾値とすることができる。制御部24は、幾何推定路面視差dsに所定の路面高さ変化量ΔY分の視差を加えた視差を視差収集閾値の上限閾値とすることができる。
ステップS306の処理を実行した後、制御部24は、数式(1)により算出された幾何推定路面視差dsが所定値より大きいか否かを判定する。所定値は、例えば、1画素である。制御部24は、幾何推定路面視差dsが1よりも大きいとき、ステップS303の処理に戻る(ステップS307)。ステップS303の処理において、制御部24は、路面候補視差dcの抽出の対象を、1画素上の行に移動させる。すなわち、路面候補視差dcの抽出の対象が、v座標が座標(v0)の行であったとき、制御部24は、路面検出の対象の行のv座標を、座標(v0−1)に変更する。また、図10に示すように、路面候補視差dcの算出の対象が、n番目の行であったとき、制御部24は、路面検出の対象の行を、n+1番目の行に変更する。図10は、説明のため各行の縦方向の幅を広くしている。実際の各行は、1画素の高さである。この場合、n+1番目の行v座標は、n番目の行のv座標よりも1小さい。
それぞれ、n+1番目の行を対象とするステップS304〜S306の処理は、v座標が座標(v0)の行の処理と同様に行われる。ステップS304の処理において、制御部24は、n番目の行に対するステップS306の処理で算出した視差収集閾値を用いて、路面候補視差dcを収集する。ステップS305の処理において、制御部24は、収集した路面候補視差dcを平均化して平均路面候補視差davを算出する。ステップS306の処理において、制御部24は、平均路面候補視差davを用いて、数式(1)の路面高さYを変更する。制御部24は、路面高さYを変更した数式(1)を用いて、幾何推定路面視差dsを算出する。さらに、制御部24は、n+2番目の行の路面候補視差dcの抽出のために、幾何推定路面視差dsに路面高さ変化量ΔYを考慮して、視差収集閾値を算出する。
制御部24は、路面候補視差dcの抽出対象を、ステレオカメラ10から最も近い路面候補視差dcの抽出位置に対応する行から、順次上方向(v座標の負の方向)にシフトさせながら、当該v座標に対応する路面候補視差dcを抽出する。制御部24は、抽出した路面候補視差dcを、対応するu座標及びv座標及びv座標に対応する平均路面候補視差davと共にメモリ23に格納してよい。
制御部24は、ステップS307の処理において、数式(1)により算出された幾何推定路面視差dsが上述の所定の値以下となったとき、路面候補視差dcの抽出処理を終了して、図7のフローチャートのステップS201の処理に戻る。所定の値は、例えば、1画素とすることができる。
このように、図8のフローチャートでは、路面候補視差dcを抽出するv座標の初期値をステレオカメラ10から見て近距離側の位置に対応するv0に設定し、順次遠距離側の路面候補視差dcを抽出する。ステレオカメラ10は、一般的に遠距離側よりも近距離側の方が、視差の検出精度が高い。このため、近距離側から遠距離側に順次路面候補視差dcを抽出することにより、検出される路面候補視差dcの精度を高めることができる。
上記路面候補視差dcを抽出する図8のフローチャートでは、縦方向の1つの座標ごとに路面候補視差dcを算出した。言い換えると、上記路面候補視差dcを抽出するフローチャートでは、縦方向に1画素の行ごとに路面候補視差dcを算出した。路面候補視差の算出の単位は、これに限られない。縦方向に複数の座標を纏めて路面候補視差dcを算出することも可能である。
ステップS301〜S307の路面候補視差dcの抽出処理に続いて、制御部24は、図7のフローチャートのステップS202の処理に進む。制御部24は、近距離側から遠距離側へ順次路面視差drを推定する際に、路面視差drに順次カルマンフィルタを適用する。そのため、始めに、制御部24は、カルマンフィルタの初期化を行う(ステップS202)。カルマンフィルタの初期値として、ステップS305の処理で算出した、路面視差drの推定を行う行のうち最も下の行(v座標の値がv0の行)に対応する平均路面候補視差davの値を利用することができる。
制御部24は、以下のステップS203〜S210の処理を、路面の近距離側から遠距離側へ対象とする行を変えながら順次実行する(ステップS203)。
まず、制御部24は、第1視差画像内の対象とする行について、実空間における一定幅の範囲内に位置する路面候補視差dcから、路面視差drの値ごとの頻度を表すヒストグラムを生成する(ステップS204)。実空間における一定幅の範囲とは、道路の走行車線の幅を考慮した範囲である。一定幅は、例えば、2.5m又は3.5m等の値に設定できる。視差を取得する範囲は、例えば、図11において実線の枠線45により囲まれた範囲に初期設定される。一定幅は、予め物体検出装置20のメモリ23等に記憶される。視差を取得する範囲を、この範囲に限定することにより、制御部24が路面41A以外の物体又は防音壁等の構造物を路面41Aと誤認して抽出する可能性が低減される。これにより、路面検出の精度を向上することができる。図11に実線で示した視差を取得する範囲は、後述するように、前方の道路上の状況に応じて初期設定された枠線45から順次変更されうる。
制御部24は、カルマンフィルタによる路面視差drの予測値に基づいて、対象とする行について路面視差drの取得範囲を設定する。路面視差drの取得範囲は、カルマンフィルタが次の行の路面視差drを予測する際に算出する信頼度に基づいて決定される範囲である。信頼度は、ガウス分布の分散σ2(σは路面視差drの標準偏差)で表現される。制御部24は、予測値±2σ等により路面視差drの取得範囲を求めることができる。制御部24は、ステップS204の処理で生成した路面候補視差dcのヒストグラムから、カルマンフィルタに基づいて設定された路面視差drの取得範囲内で、頻度が最大となる路面視差drを抽出する。制御部24は、抽出した路面視差drを、対象とする行の路面視差drの観測値とする(ステップS205)。
次に、制御部24は、ステップS205の処理で決定した路面視差drが、物体に対応する視差等を含まず、正しい路面視差drであることを確認する(ステップS206)。制御部24は、現在処理中の行までの各行で検出された全ての路面視差drについて、路面視差drとv座標とを座標軸とするd−v座標空間上にマップしたd−v相関図を生成する。正しく路面41Aが検出されている場合、d−v相関図は、図12に破線で示すようにv座標の値が小さくなるにつれて、路面視差drも直線的に小さくなる。
一方、物体を表す視差が路面41Aを表す視差として誤認識されている場合、図13に示すように、d−v相関図は、物体を表す視差の部分で、縦方向の座標(v座標)の変化に関わらず視差dが略一定となる。一般に、物体は、路面41Aに対して垂直な部分を含むので、第1視差画像上では等距離の視差を多く含むように表示される。図13において、第1部分R1は、v座標の値の変化とともに視差dが減少している。第1部分R1は、路面41Aを表す視差を正しく検出している部分である。第2部分R2は、v座標が変化しても視差dは一定である。第2部分R2は、物体を表す視差を、誤検出した部分と考えられる。制御部24は、視差dが略等しい値の行が所定数続いたとき、物体を表す視差を、路面41Aを表す視差として、誤認識していると判断することができる。
ステップS206の処理で視差が正しい路面視差drではないと判断されると(ステップS206:No)、制御部24は、物体を表す視差が誤検出されたと判断される行から、路面視差drを再探索する(ステップS207)。ステップS207の処理において、制御部24は、v座標の値が変化しても視差dが変化しない行の領域で、路面視差ヒストグラムを再探索する。この領域で、ステップS205の処理で決定された視差dよりも小さい視差の部分に、頻度が高い視差がある場合、制御部24は、この視差を正しい路面視差drの観測値であると判断することができる。
ステップS206の処理において路面視差drが正しいと判断されたとき(ステップS206:Yes)、及び、ステップS207の処理において、路面視差drの再探索が終了したとき、制御部24は、ステップS208の処理に進む。ステップS208の処理において、制御部24は、縦方向に1画素ずらした次の行のヒストグラムを生成する対象となる第1視差画像上の路面に対応する視差画像41の横方向の範囲を決定する。例えば、図11に示すように、路面に対応する視差画像41上に他車両に対応する視差画像42がある場合、路面検出部26は、他車両と重複する部分の路面に対応する視差画像41の正しい路面視差drを取得できない。路面視差drを取得できる路面に対応する視差画像41の範囲が狭くなると、制御部24は、正確な路面視差drを取得し難くなる。このため、制御部24は、図11に破線で示したように路面候補視差dcを取得する範囲を順次横方向に変化させる。具体的には、制御部24は、ステップS206の処理で物体を表す視差が含まれていると判断した場合、物体の横方向の何れの側に正しい路面視差drを表す路面候補視差dcが多いか検出する。次の行において、制御部24は、横方向のより多くの正しい路面視差drを表す路面候補視差dc含まれる側(図11において右側)に視差を取得する範囲を順次ずらす。
次に、制御部24は、ステップS205の処理又はS207の処理で決定した現在の行の路面視差drを用いて、カルマンフィルタを更新する(ステップS209)。すなわち、カルマンフィルタは、現在の行の路面視差drの観測値に基づいて、路面視差drの推定値を算出する。現在の行の推定値が算出されると、制御部24は、現在の行の路面視差drの推定値を過去のデータの一部として加え、次の行の路面視差drの推定値を算出する処理に用いる。路面41Aの高さは、ステレオカメラ10からの水平方向の距離Zに対して、急に上下に変化しないと考えられる。このため、本実施形態のカルマンフィルタを用いる推定では、現在の行の路面視差drの近くに次の行の路面視差drが存在すると推定される。このように、制御部24が現在の行の路面視差drの近くに次の行のヒストグラムを生成する視差の範囲を限定することにより、路面41A以外の物体を誤検出する可能性が低減される。また、制御部24が実行する演算量を減らして、処理を高速化することができる。
ステップS209の処理でカルマンフィルタにより推定された路面視差drが所定値より大きい場合、制御部24は、ステップS203の処理に戻り、ステップS203〜S209の処理を繰り返し実行する。カルマンフィルタにより推定された路面視差drが所定値以下の場合(ステップS210)、制御部24は、次の処理(ステップS211)に進む。所定値は、例えば、1画素とすることができる。
ステップS211の処理において、制御部24は、d−v相関図上で、縦方向の画像座標vと推定された路面視差drとの関係を、2本の直線で近似する。路面視差drは、ステレオカメラ10からの距離Zに関係する。v座標の値は、ステレオカメラ10からの距離Z及び路面高さYに関連する。従って、v座標と路面視差drとの関係を2本の直線で近似することは、ステレオカメラ10からの距離Zと路面41Aの高さとの関係を、2本の直線で近似したものということができる。ステップS211の処理は、図14のフローチャートに詳しく説明される。
まず、図7のステップS210までの処理により、路面視差drとv座標との相関関係が得られる。例えば、v座標と路面視差drとの相関関係は、図15の破線のグラフ51のようにd−v座標空間で示される。実空間において、路面41Aが平坦で傾斜変化が無い場合、グラフ51は直線になる。しかしながら、現実の路面41Aは上り下り等の起伏の変化により、路面41Aの傾斜が変化しうる。路面41Aの傾斜が変化する場合、d−v座標空間のグラフ51は、直線で表現できない。路面41Aの傾斜の変化を3本以上の直線又は曲線で近似しようとすると、物体検出装置20の処理負荷が大きくなる。そこで、本願では2本の直線によりグラフ51を近似する。
図15に示すように、制御部24は、d−v座標空間における下側(近距離側)の推定された路面視差drを、第1直線52により最小二乗法により近似する(ステップS401)。第1直線52による近似は、物体検出装置20が物体検出の対象とする距離範囲の中で、所定の距離に対応する路面視差drまでの範囲で行うことができる。所定の距離は、物体検出装置20が物体検出の対象とする距離範囲の半分の距離とすることができる。例えば、物体検出装置20が、100m先までの物体を検出するように設計される場合、第1直線52はステレオカメラ10が測定可能な最も近い距離から50m先までの範囲で、最小二乗法によりグラフ51に最も近づくように決定されてよい。
次に、制御部24は、ステップS401の処理で近似した第1直線52の表す路面41Aの傾斜が、路面41Aとしてあり得る傾斜か否かを判定する(ステップS402)。第1直線52の傾斜角度は、実空間に変換すると平面になる。第1直線52の傾斜は、ステレオカメラ10の設置位置の路面高さY0及び基線長B等の条件に応じて定まる路面41Aのyz平面内の傾斜角度に対応する。制御部24は、第1直線52に対応する実空間の路面41Aの傾斜が、実空間における水平面を基準とする所定角度の範囲内にあるとき、あり得る傾斜であると判定することができる。制御部24は、第1直線52に対応する実空間の路面41Aの傾斜が、実空間における水平面を基準とする所定角度の範囲外にあるとき、あり得ない傾斜であると判定することができる。所定角度は、移動体30の走行環境を考慮して適宜設定することができる。
ステップS402の処理において、第1直線52の傾斜が路面41Aとしてあり得ない傾斜であると判定した場合(ステップS402:No)、制御部24は、路面41Aが平坦であることを仮定した理論路面に基づき第1直線52を決定する(ステップS403)。理論路面は、ステレオカメラ10の設置位置の路面高さY0、設置角度、及び基線長B等の設置条件に基づいて算出することができる。制御部24は、画像から算出した路面視差drが信用できないとき、理論路面の路面視差を採用する。例えば、制御部24は、路面41A以外の物体又は構造物を表す視差を誤って路面視差drとして抽出した場合、路面41Aを非現実的な傾斜を有するものと判断して、誤りを排除できることがある。これにより、路面41A以外の物体又は構造物を表す視差を路面視差drであると誤判定する可能性を低減することができる。
ステップS402の処理において、制御部24が、第1直線52の傾斜が路面41Aとしてあり得る傾斜であると判定した場合(ステップS402:Yes)、及び、ステップ403の処理を実行した後、制御部24は、ステップS404の処理に進む。ステップS404の処理において、制御部24は、第2直線55の近似を開始する近似開始点53を決定する。制御部24は、第1直線52のv座標の最も小さい側(遠距離側)から大きい側(近距離側)へ、グラフ51との近似誤差を算出し、近似誤差が連続して所定値より小さくなる第1直線52上の座標を、近似開始点53とすることができる。或いは、近似開始点53は、第1直線52のv座標の最も大きい側(近距離画側)から小さい側(遠距離側)へ、グラフ51との近似誤差を算出し、近似誤差が所定値より大きくなったときの第1直線52上の座標として決定してよい。近似開始点53のv座標は特定の値に固定されない。近似開始点53は、第1直線52上で物体検出装置20が物体検出の対象とする距離範囲の半分の距離よりも、ステレオカメラ10側に近い位置に相当するv座標の位置に設定されてよい。例えば、第1直線52が、測定可能な最も近い距離から50m先までの範囲で路面41Aを近似した場合、近似開始点53は、50mよりも手前の40mに相当するv座標の位置に設定されてよい。
ステップS404の処理を実行した後、制御部24は、ステップS405〜S407の処理を繰り返し実行する。図16に示すように、制御部24は、第1直線52との角度差を所定の角度範囲から選択された角度として、近似開始点53を起点とする第2直線55の候補である候補直線54を順次選択する(ステップS405)。所定の角度範囲は、測定対象の距離範囲内で道路の勾配が変化し得る角度として設定される。所定の角度範囲は、例えば±3度とすることができる。例えば、制御部24は、候補直線54の角度を、第1直線52の角度−3度から開始して、第1直線52の角度+3度まで、順次、0.001度ずつ加えた角度に変えることができる。
選択した候補直線54について、制御部24は、d−v座標空間においてグラフ51の近似開始点53よりも上側(遠距離側)の部分との誤差を計算する(ステップS406)。誤差の計算は、v座標に対する視差dの平均二乗誤差により計算できる。制御部24は、候補直線54ごとに計算した誤差を、メモリ23に格納してよい。
制御部24は、角度範囲の全ての候補直線54について誤差の計算が終了すると(ステップS407)、メモリ23に格納された誤差の中から最小の誤差を探索する。図17に示すように、制御部24は、最小の誤差を有する候補直線54を第2直線55として選択する(ステップS408)。
ステップS408の処理で第2直線55が決定されると、制御部24は、第2直線55のグラフ51との誤差が所定値以内か否かを判定する(ステップS409)。所定値は、所望の路面推定の精度を得るために、適宜設定される。
ステップS409の処理において誤差が所定値以内の場合(ステップS409:Yes)、路面視差drは、第1直線52及び第2直線55を用いて近似される。
ステップS409の処理において誤差が所定値を超える場合(ステップS409:No)、制御部24は、第1直線52を上側(遠距離側)に延長して、近似結果を上書きする(ステップS410)。以上のようにして、路面視差drが2本の直線により近似される。
v座標に対する路面視差drが、2本の直線で近似されることにより、路面の形状が、2本の直線で近似される。これによって、路面の形状を曲線又は3本以上の直線で近似する場合に比べて、以降の計算に係る負荷が低減され、且つ、物体検出の処理が高速化される。また、路面を1本の直線で近似する場合に比べて、実際の路面との誤差が小さい。さらに、第2直線55の近似開始点53のv座標を所定の座標に固定しないことにより、近似開始点53の座標を予め固定した場合と比較して、実際の路面との近似の精度を向上することができる。
ステップS409の処理において誤差が所定値以内の場合(ステップS409:Yes)及びステップS410の処理を実行した後、制御部24は、路面視差drを直線近似する処理を終了し、図7のステップS212の処理に戻る。
ステップS212の処理において、第1視差画像から除去する路面視差drの閾値が決定される(ステップS212)。第1視差画像から除去する路面視差drの閾値は、後述する第1高さに相当する。第1高さは、次のステップS103の処理で路面視差drが除去されるように算出され得る。
次に、制御部24は、図5のフローチャートに戻る。上述の処理により、制御部24は、d−v座標空間におけるv座標と路面視差drとの関係を2本の直線で近似した近似式を取得している。d−v座標空間におけるv座標と路面視差drとの関係を表す近似式から、実空間におけるステレオカメラ10の前方の距離Zと路面高さYとの関係が得られる。制御部24は、近似式に基づいて、(第2処理)を実行する(ステップS103)。第2処理は、実空間における路面41Aからの高さが第1高さ以下の範囲に対応する視差と、路面41Aからの高さが第2高さ以上の被写体に対応する視差とを、第1視差画像から除去する処理である。これにより、制御部24は、図6に示す第1視差画像40から、図18に示すような第2視差画像60を生成する。図18は、説明のために作図された図である。ステレオカメラ10から取得した画像に基づく実際の第2視差画像は、例えば、図19に示すようになる。図19では、黒白の濃淡により視差の大きさを表現している。図19に示す第2視差画像は、他車両に対応する視差画像44を含む。
第1高さは、物体検出装置20の検出対象となる物体の高さの最小値よりも小さくなるように、設定されてよい。物体検出装置20の検出対象となる物体の高さの最小値は、子供の伸長(例えば、50cm)であってよい。第1高さは、15cmより大きく50cmよりも小さい値であってよい。図6に示す第1視差画像40にノイズが含まれることにより、前述の処理により路面に対応する視差の検出精度が低下する場合がある。この場合、第1視差画像40から、検出した路面に対応する視差を単に除去すると、視差画像41の一部に、路面に対応する視差が残る場合がある。第1視差画像40から路面41Aからの高さが第1高さ以下の範囲に対応する視差を除去することにより、視差画像41から路面に対応する視差を精度良く除去した第2視差画像が得られる。
図18に示す第2視差画像60では、実空間における路面からの高さが第1高さ以下の範囲に対応する視差の情報が除去されている。このような構成により、路面に対応する視差画像41には、視差の情報が含まれていない。路面に対応する視差画像41と、他車両に対応する視差画像42とは、隣接する。第2視差画像60では、視差画像41に視差の情報が含まれなくなることにより、後の処理において、他車両に対応する視差画像42の視差情報に対する処理が容易になり得る。さらに検出対象の物体とは関連しない不要な視差が除去されることにより、後述の処理速度が高速化され得る。
第2高さは、物体検出装置20の検出対象となる物体の高さの最大値に基づいて、適宜設定されてよい。第2高さは、移動体30が車両である場合、道路上を走行可能な車両の高さの上限値に基づいて設定されてよい。道路上を走行可能な車両の高さは、交通法規等により規定される。例えば、日本の道路交通法では、トラックの高さは原則3.8m以下である。この場合、第2高さは、4mであってよい。第1視差画像から、路面からの高さが第2高さ以上の物体に対応する視差を除去することにより、第1視差画像から、当該物体に対応する視差の情報が除去される。図18に示す第2視差画像60では、路面からの高さが第2高さ以上の物体に対応する視差が除去されることにより、v軸の負方向側に位置する物体に対応する視差画像には、視差の情報が含まれていない。第2高さ以上の物体に対応する視差の情報が除去されることにより、後の処理において、図18に他車両に対応する視差画像42の視差情報に対する処理がより容易になり得る。さらに検出対象の物体とは関連しない不要な視差が除去されることにより、後述の処理速度が高速化され得る。
ステップS103の処理を実行した後、制御部24は、第2視差画像から、第1視差及び第2視差を検出する(ステップS104)。ステップS104の処理の詳細は、図20に示すフローチャートに示される。
ステップS501の処理において、制御部24は、第2視差画像をu方向に沿ってΔu1で分割することにより、複数の部分領域に分割する。図21に、部分領域61を第2視差画像60に重ねて示す。部分領域61は、長辺が短辺よりも著しく長い、長方形となり得る。部分領域61の長辺は、部分領域61の短辺の5倍以上である。部分領域61の長辺は、部分領域61の短辺の10倍以上であってよいし、部分領域61の短辺の20倍以上であってよい。部分領域61の短辺すなわちΔu1は、数画素から数十画素であってよい。部分領域61を基準にして、後述のように第1視差及び第2視差が検出され得る。部分領域101aの短辺すなわちΔu1が短くなるほど、第1視差及び第2視差の検出の分解能が高まり得る。制御部24は、図21に示すu軸の負方向側から正方向側に向けて、部分領域61を順次取得し、以下のステップS502からステップS506の処理を実行してよい。
ステップS502の処理において、制御部24は、部分領域毎に、視差ヒストグラムを生成する。図22に、視差ヒストグラムの一例を示す。図22の横軸は、視差の大きさに対応する。図22の縦軸は、視差の頻度に対応する。視差の頻度は、部分領域に含まれる当該視差を表す視差画素の数である。図21に示すように、部分領域61には、同一物体に対応する視差画像内の複数の視差画素が含まれ得る。例えば、部分領域61−1には、複数の視差画素42aが含まれる。複数の視差画素42aは、他車両に対応する視差画像42内の複数の視差画素のうち、部分領域61−1に含まれる視差画素である。部分領域61において、同一物体に対応する複数の視差画素が表す視差は、同程度になり得る。例えば、部分領域61−1において、複数の視差画素42aが表す視差は、同程度となり得る。つまり、図22に示す視差ヒストグラムにおいて、同一物体に対応する視差の頻度は、高くなり得る。
ステップS502の処理において、制御部24は、図22に示す視差ヒストグラムの区間Snの幅を、視差が小さくなるに連れて広げてよい。区間Snは、視差が小さい方から数えてn番目の視差ヒストグラムの区間である。区間Snの始点は、視差dn−1である。区間Snの終点は、視差dnである。例えば、制御部24は、区間Sn−1の幅を、区間Snの幅よりも、区間Snの幅の10%程度広げてよい。ステレオカメラ10から物体までの距離が遠い場合、当該物体に対応する視差は、ステレオカメラ10から当該物体までの距離が近い場合と比較して、小さくなり得る。ステレオカメラ10から物体までの距離が遠い場合、ステレオ画像上で当該物体が占める画素数は、ステレオカメラ10から当該物体までの距離が近い場合と比較して、少なくなり得る。つまり、ステレオカメラ10から物体までの距離が遠い場合、第2視差画像上で当該物体に対応する視差を表す視差画素の数は、ステレオカメラ10から当該物体までの距離が近い場合と比較して、少なくなり得る。視差が小さくなるに連れて図22に示す視差ヒストグラムの区間Snの幅が広がることにより、ステレオカメラ10から遠い距離にある物体に対応する視差が、後述のステップS503〜S506の処理により検出され易くなり得る。制御部24は、ステップS503〜S506の処理を、視差ヒストグラムの区間毎に順次実行してよい。
ステップS503の処理において、制御部24は、生成した視差ヒストグラムにて、視差の頻度が第1閾値Tr1(所定閾値)を超える区間Snが存在するか否か判定する。制御部24は、視差の頻度が第1閾値Tr1を超える区間Snが存在すると判定するとき(ステップS503:Yes)、区間Snの始点(視差dn−1)から区間Snの終点(視差dn)までの範囲の視差を、第1視差として検出する(ステップS504)。制御部24は、物体に対応する視差とみなして、第1視差を検出する。制御部24は、検出した第1視差をu座標と対応付けて、メモリ23に格納する。一方、制御部24は、生成した視差ヒストグラムにて、視差の頻度が第1閾値Tr1を超える区間Snが存在しないと判定するとき(ステップS503:No)、ステップS505の処理に進む。
第1閾値Tr1は、物体検出装置20の検出対象となる物体の高さの最小値(例えば、子供の伸長50cm)に基づいて、設定されてよい。ただし、上述のように、物体がステレオカメラ10から遠い距離にある場合、当該物体に対応する視差は、当該物体がステレオカメラ10から近い距離にある場合と比較して、小さくなり得る。この場合、第1閾値Tr1を視差に対して一定にすると、ステレオカメラ10から近い距離にある物体と比較して、ステレオカメラ10から遠い距離にある物体に対応する視差が検出し難くなる場合がある。そこで、第1閾値Tr1は、物体検出装置20の検出対象となる物体の高さの最小値に基づきつつ、視差ヒストグラムの視差が小さくなるに連れて大きくなるように、設定されてよい。例えば、第1閾値Tr1は、数式(2)によって算出されてよい。
Tr1=(D×H)/B (2)
数式(2)において、視差dは、視差ヒストグラムの横軸に対応する視差である。高さHは、物体検出装置20の検出対象となる物体の高さの最小値である。基線長Bは、第1カメラ11の光学中心と第2カメラ12の光学中心との間の距離(基線長)である。
ステップS505の処理は、第2視差を検出するか否か判定する処理である。ステップS505の処理を説明する前に、第2視差を検出する理由を説明する。上述のように、視差を算出するマッチング処理において、ステレオ画像上の特徴量が少ないことにより、物体に対応する視差画像の一部の視差が、算出されなかったり、又は、他の部分の視差と比べて小さくなったりする場合がある。例えば、図19に示すように、他車両に対応する視差画像44の下側の中央部の視差は、ステレオ画像上の特徴量が少ないことにより、算出されていない。物体に対応する視差画像の一部が算出されないと、例えば実空間上の実際の高さが50cm以上の物体でも、第2視差画像上において、実空間上の高さが50cm未満(例えば、10cm)となる2つ以上の別個の物体として表示され得る。つまり、実空間上の実際の高さが検出対象の高さ以上の物体でも、当該物体に対応する視差画像の一部が欠けていると、当該物体に対応する視差は、上述の第1閾値Tr1による判定処理により、第1視差として検出されない場合がある。そこで、本実施形態では、このような第1視差として検出されない視差を、物体に対応する視差の候補として、すなわち、2視差として検出しておく。第2視差として検出しておくことにより、後述の図5に示す後述のステップS107の処理において検出対象の物体の視差として復活させるか否かを判定することができる。
ステップS505の処理において、制御部24は、生成した視差ヒストグラムにて、視差の頻度が第1閾値Tr1以下であり且つ第2閾値Tr2(所定閾値)を超える区間Snが存在するか否か判定する。
第2閾値Tr2は、第1閾値Tr1の所定割合であってよい。所定割合は、同一物体に対する視差画像において、視差が算出されない部分と視差が算出される部分との間の比率に基づいて、適宜設定されてよい。例えば、所定割合は、0.2であってよい。
ステップS505の処理において、制御部24は、生成した視差ヒストグラムにて、視差の頻度が第1閾値Tr1以下であり且つ第2閾値Tr2を超える区間Snが存在すると判定するとき(ステップS505:Yes)、ステップS506の処理に進む。一方、制御部24は、生成した視差ヒストグラムにて、視差の頻度が第1閾値Tr1以下であり且つ第2閾値Tr2を超える区間Snが存在しないと判定するとき(ステップS505:No)、図5に示すステップS105の処理に戻る。
ステップS506の処理において、制御部24は、当該区間Snの始点(視差dn−1)から区間Snの終点(視差dn)までの範囲の視差を、第2視差として検出する(ステップS506)。制御部24は、検出した第2視差をu座標と対応付けて、メモリ23に格納する。制御部24は、ステップS506の処理を実行した後、図5に示すステップS105の処理に戻る。
ステップS105の処理において、制御部24は、画像上の物体の高さを算出する。ステップS105の処理の詳細は、図23から図25に示すフローチャートに示される。
以下、制御部24は、物体の高さの算出処理を、視差マップとして第2視差マップすなわち第2視差画像に対して実行するものとする。ただし、制御部24は、uv座標に視差が対応付けられた任意の視差マップに対して、物体の高さの算出処理を実行してよい。物体の高さの算出処理では、制御部24は、探索対象のu座標において、v方向に沿って視差画素を走査することにより、画像上の物体の高さを算出する。例えば、制御部24は、v方向に沿って、物体に対応する視差とみなされる第1視差を表す視差画素、及び/又は、物体に対応する視差の候補となる第2視差を表す視差画像を走査することにより、画像上の物体の高さを算出する。
ステップS601の処理を開始する際、制御部24は、探索対象のu座標として、u座標の最小座標を取得する。本実施形態において、最小座標及び最大座標は、画像上の走査に関して用いられる場合、走査範囲の最小座標及び最大座標を意味する。走査範囲の最小座標及び最大座標は、画像上の最小座標及び最大座標に一致しなくてよい。走査範囲の最小座標及び最大座標は、任意に設定されてよい。
ステップS601の処理において、制御部24は、メモリ23を参照して、探索対象のu座標に対応付けられた、図20に示す処理により検出された第1視差又は第2視差が存在するか否かを判定する。
図26に、第2視差画像70を示す。図26には、第2視差画像70の一部が示されている。第2視差画像70は、図18に示す第2視差画像60の領域62に相当する。第2視差画像70は、他車両の視差画像42を含む。第2視差画像70において、網掛部分は、第1視差又は第2視差を表す視差画素である。制御部24は、探索対象のu座標が座標(u0)であるとき、探索対象のu座標に対応付けられた第1視差及び第2視差が存在しないと判定する。制御部24は、探索対象のu座標が座標(u1)であるとき、探索対象のu座標に対応付けられた第1視差又は第2視差が存在すると判定する。
ステップS601の処理において、制御部24は、探索対象のu座標に対応付けられた第1視差又は第2視差が存在すると判定しないとき(ステップS601:No)、ステップS602の処理に進む。一方、制御部24は、探索対象のu座標に対応付けられた第1視差又は第2視差が存在すると判定するとき(ステップS601:Yes)、ステップS604の処理に進む。
ステップS602の処理において、制御部24は、探索対象のu座標が最大座標であるか否かを判定する。探索対象のu座標が最大座標であるときは、制御部24がu座標を最小座標から最大座標まで探索し切ったときである。制御部24は、探索対象のu座標が最大座標であると判定するとき(ステップS602:Yes)、図23に示す処理を終了して、図5に示すステップS106の処理に戻る。例えば、制御部24は、探索対象のu座標が図26に示す座標(u0)であるとき、探索対象のu座標が最大座標ではないと判定する。一方、制御部24は、探索対象のu座標が最大座標ではないと判定するとき(ステップS602:No)、探索対象のu座標を1つインクリメントする(ステップS603)。制御部24は、ステップS603の処理により1つインクリメントしたu座標に対して、ステップS601の処理を実行する。例えば、制御部24は、探索対象のu座標を図26に示す座標(u0)から始めて、探索対象のu座標に対応付けられた第1視差又は第2視差が存在すると判定するまで、ステップS601〜S603の処理を繰り返し実行し得る。
ステップS604の処理において、制御部24は、対象視差を取得する。対象視差は、物体に対応する視差とみなされて検出された第1視差のみであってよい。換言すると、対象視差は、所定条件としての図20に示すステップS503の判定処理を満たす視差であってよい。又は、対象視差は、第1視差及び第2視差の両方を含んでよい。換言すると、所定条件としての図20に示すステップS503の判定処理及びステップS505の判定処理を満たす視差であってよい。以下、図23から図25に示す処理では、対象視差は、第1視差及び第2視差の両方を含むものとして説明する。
ステップS604の処理において、制御部24は、メモリ23に格納されている、探索対象のu座標に対応付けられた第1視差及び第2視差の中で、最大の視差を対象視差として取得する。
ステップS605の処理において、制御部24は、対象視差に対応する路面のv座標を算出する。例えば、制御部24は、対象視差を、図7に示すステップS211の処理で取得した路面のv座標と路面視差drとの関係を示す近似式(図17)の路面視差drに代入することにより、路面のv座標を算出する。図26において、探索対象のu座標は、座標(u1)であるものとする。この場合、制御部24は、路面のv座標として座標(v1)を算出する。
ステップS606の処理において、制御部24は、算出した路面のv座標から、v軸の負方向に沿って所定範囲以内に、対象視差と略等しい視差が対応付けられた座標が存在するか否かを判定する。本開示において「対象視差と略等しい視差」とは、対象視差と同一の視差、及び、対象視差と実質的に同一の視差を含む。本開示において「対象視差と実質的に同一の視差」は、画像処理において対象視差とみなして扱うことが可能な視差を意味する。例えば、対象視差との差が±10%の範囲にある視差を、対象視差と略等しい視差としてよい。また、ステップS602の処理における所定範囲は、路面から浮いている物体の路面からの高さに基づいて、適宜設定されてよい。路面から浮いている物体の一例として、街路樹、歩道橋及び信号機等が挙げられる。このような路面から浮いている物体は、物体検出装置20の検出対象外である。つまり、このような路面から浮いている物体については、高さを算出しなくてよい。
ステップS606の処理において、制御部24は、路面のv座標からv軸の負方向に沿って所定範囲以内に対象視差と略等しい視差が対応付けられた座標が存在すると判定しないとき(ステップS606:No)、物体の高さを算出せずステップ607の処理に進む。ステップS607の処理において、制御部24は、メモリ23に格納された、ステップS604の処理で取得した対象視差に、走査済みのフラグを付加する。制御部24は、ステップS607の処理を実行した後、ステップS601の処理を再度実行する。再度実行するステップS601の処理では、制御部24は、探索対象のu座標について、走査フラグが付加されていない第1視差又は第2視差が存在するか否かを判定する。再度実行するステップS604の処理では、走査フラグが付加されていない第1視差及び第2視差の中で、最大の視差を対象視差として取得する。
ステップS606の処理において、制御部24は、路面のv座標からv軸の負方向に沿って所定範囲以内に対象視差と略等しい視差が対応付けられた座標が存在すると判定するとき(ステップS606:Yes)、ステップS608の処理に進む。ステップS608の処理において、制御部24は、路面のv座標からv軸の負方向に沿って所定範囲内に存在する、対象視差と略等しい視差が対応付けられた座標を、第1座標として取得する。図26において、探索対象のu座標は、座標(u1)であるものとする。また、視差画素71の座標(u1,v2)には、対象視差と略等しい視差が対応付けられているものとする。つまり、視差画素71は、対象視差と略等しい視差を表すものとする。また、路面のv座標の座標(v0)と視差画素71のv座標の座標(v1)とは、所定範囲内にあるものとする。この場合、制御部24は、第1座標として、視差画素71の座標(u1,v2)を取得する。
ステップS608の処理を実行した後、制御部24は、第1座標のv座標を1つディクリメントした座標に、対象視差と略等しい視差が対応付けられているか否かを判定する(ステップS609)。図26において、第1座標は、視差画素71の座標(u1,v2)であるものとする。視差画素71のv座標を1つディクリメントした座標は、視差画素72の座標(u1,v3)である。視差画素72は、対象視差と略等しい視差を表すものとする。つまり、視差画素72の座標(u1,v3)には、対象視差と略等しい視差が対応付けられているものとする。この場合、制御部24は、第1座標である座標(u1,v2)のv座標を1つディクリメントした視差画素72の座標(u1,v3)に、対象視差と略等しい視差が対応付けられていると判定する。
ステップS609の処理において、制御部24は、第1座標のv座標を1つディクリメントした座標に、対象視差と略等しい視差が対応付けられていると判定するとき(ステップS609:Yes)、ステップS610の処理に進む。ステップS610の処理において、制御部24は、第1座標のv座標を1つディクリメントした座標を、第1座標として更新する。図26において、第1座標が視差画素71の座標(u1,v2)である場合、ステップS610の処理により、第1座標は、視差画素72の座標(u1,v3)に更新される。ステップS610の処理を実行した後、制御部24は、ステップS609の処理に戻る。例えば、制御部24は、図26に示す視差画素73の座標(u1,v4)を第1座標として更新するまで、ステップS609の処理とステップS610の処理とを繰り返し実行する。視差画素73の座標(u1,v4)には、対象視差と略等しい視差が対応付けられている。
ステップS609の処理において、制御部24は、第1座標のv座標を1つディクリメントした座標に、対象視差と略等しい視差が対応付けられていないと判定するとき(ステップS609:No)、図24に示すステップS611の処理に進む。図26において、第1座標は、視差画素73の座標(u1,v4)であるものとする。視差画素73のv座標を1つディクリメントした座標は、視差画素74の座標(u1,v5)である。視差画素74は、対象視差と略等しい視差よりも、小さい視差を表す。つまり、視差画素74の座標(u1,v5)には、対象視差と略等しい視差が対応付けられていない。この場合、制御部24は、第1座標である座標(u1,v4)のv座標を1つディクリメントした視差画素74の座標(u1,v5)には、対象視差と略等しい視差が対応付けられていないと判定する。
ステップS611の処理において、制御部24は、第1座標のv座標が最小座標であるか否かを判定する。第1座標のv座標が最小座標であるときは、制御部24がv軸の負方向に沿って第2視差画像を走査し切ったときである。制御部24は、第1座標のv座標が最小座標であると判定するとき(ステップS611:Yes)、ステップS616の処理に進む。一方、制御部24は、第1座標のv座標が最小座標ではないと判定するとき(ステップS611:No)、ステップS612の処理に進む。例えば、制御部24は、第1座標が図26に示す視差画素73の座標(u1,v4)である場合、第1座標のv座標(座標(v4))は最小座標ではないと判定する。
ステップS612の処理を説明する前に、図26を再び参照されたい。図26において、第1座標は、視差画素73の座標(u1,v4)であるものとする。視差画素73のv軸の負方向側には、視差画素75が存在する。視差画素75は、対象視差と略等しい視差を表すものとする。視差画素73と視差画素75とは、同一物体である他車両に対応する視差画像42の一部である。しかしながら、視差のバラツキ等により、同一物体に対応する視差画像に含まれる視差画素であっても、視差画素73及び視差画素75のように、v方向において、離れて位置する場合がある。
そこで、ステップS612の処理において、制御部24は、第1座標のv座標からv軸の負方向に沿って所定間隔以内に、対象視差と略等しい視差が対応付けられた座標が存在するか否かを判定する。所定間隔は、物体検出装置20の検出対象の物体の高さに基づいて、適宜設定されてよい。例えば、所定間隔は、車両の後面の高さ(例えば、80cm)に基づいて、適宜設定されてよい。図26において、視差画素73と視差画素75のv方向における間隔は、所定間隔以内である。制御部24は、第1座標が視差画素73の座標(u1,v4)である場合、対象視差と略等しい視差が対応付けられた視差画素75の座標(u1,v6)が存在すると判定する。
ステップS612の処理において、制御部24は、第1座標のv座標からv軸の負方向に沿って所定間隔以内に、対象視差と略等しい視差が対応付けられた座標が存在すると判定するとき(ステップS612:Yes)、ステップS613の処理に進む。一方、制御部24は、第1座標のv座標からv軸の負方向に沿って所定間隔以内に、対象視差と略等しい視差が対応付けられた座標が存在しないと判定するとき(ステップS612:No)、ステップS615の処理に進む。
ステップS613の処理は、対象視差と、ステップS612の処理における対象視差と略等しい視差とが、同一物体に対応する視差であるか否かを判定することを目的とする。ステップS613の処理を説明する前に、図27及び図28を参照して、第2視差画像の一例を説明する。
図27に、第2視差画像80を示す。第2視差画像80は、図28に示す第1画像90に基づいて生成されたものである。第1画像90は、他車両に対応する画像91と、街路樹に対応する画像92と、構造物に対応する画像93とを含む。図27に示すように、第2視差画像80は、図28に示す画像91に対応する視差画像81と、図28に示す画像92に対応する視差画像82と、図28に示す画像93に対応する視差画像85と含む。
図27に示すように、視差画像81は、視差画素83を含む。視差画像82は、視差画素84を含む。視差画素83及び視差画素84のu座標は、座標(u2)で同一である。また、実空間において、ステレオカメラ10から図28に示す画像91に対応する他車両までの距離と、ステレオカメラ10から図28に示す画像92に対応する街路樹までの距離とは、略等しい。これら2つの距離が略等しくなることにより、図27に示す視差画像81の視差画素83が表す視差と、図27に示す視差画像82の視差画素84が表す視差は、略等しくなり得る。また、実空間の高さ方向において、図28に示す画像92に対応する他車両と、図28に示す画像92に対応する街路樹との間の距離は、近い。これら2つの距離が近いことにより、図27に示すv方向において視差画像81の視差画素83と、視差画像82の視差画素84との間の間隔は、ステップS612の処理における上述の所定間隔以内となる。
図27に示す構成において、制御部24は、探索対象のu座標を座標(u2)とする場合、視差画素83及び視差画素84が表す視差を、対象視差として取得し得る。また、制御部24は、視差画素83の座標を、第1座標として更新し得る。探索対象のu座標が座標(u2)である場合、画像上の物体の高さとして、視差画像81に対応する高さT1が算出されることが望まれる。想定例として、第1座標が視差画素83の座標である場合、制御部24が視差画素83と視差画素84との間の間隔が上述の所定間隔以内であることにより、視差画素84の座標を、第1座標として更新することを考える。この想定例では、制御部24は、街路樹に対応する視差画像82の視差画素に渡って走査を続け得る。その結果、制御部24は、視差画像82に対する高さ、すなわち、街路樹に対応する高さT2を、物体の高さとして検出してしまう。
ここで、視差画素83と視差画素84との間には、複数の視差画素86が存在する。複数の視差画素86は、視差画像85に含まれる。視差画像85に対応する構造物は、車両及び街路樹よりも、ステレオカメラ10から離れて位置する。従って、視差画像85の複数の視差画素86が表す視差は、視差画素83及び視差画素84が表す視差よりも、小さい。
そこで、ステップS613の処理において、制御部24は、第1座標と第2座標との間に、第3視差に対応付けられた座標が、所定数を超えて存在するか否かを判定する。第2座標は、第1座標からv軸の負方向に沿って所定間隔以内に位置する座標であって、対象視差と略等しい視差が対応付けられた座標である。例えば、第1座標が図27に示す視差画素83の座標である場合、第2座標は、視差画素84の座標となる。第3視差は、対象視差よりも小さい視差である。第3視差は、背景に対応する視差に基づいて、設定されてよい。例えば、第3視差は、図27に示す視差画素86が表す視差を想定して、設定されてよい。所定数は、上述の所定間隔において、第3視差を表す視差画素が含まれる数を想定して、適宜設定されてよい。
ステップS613の処理において、制御部24は、第1座標と第2座標との間に第3視差に対応付けられた座標が、所定数を超えて存在すると判定するとき(ステップS613:Yes)、ステップS616の処理に進む。例えば、制御部24は、第1座標及び第2座標が図27に示す視差画素83及び視差画素84の座標である場合、視差画素83の座標と視差画素84の座標との間に、所定数を超える視差画素86が存在すると判定する。一方、制御部24は、第1座標と第2座標との間に第3視差に対応付けられた座標が、所定数を超えて存在しないと判定するとき(ステップS613:No)、ステップS614の処理に進む。例えば、制御部24は、第1座標及び第2座標が図26に示す視差画素73の座標及び視差画素75の座標である場合、視差画素73の座標と視差画素75の座標との間に、所定数を超える視差画素74が存在しないと判定する。
ステップS614の処理において、制御部24は、第2座標を第1座標として更新する。例えば、制御部24は、第1座標及び第2座標が図26に示す視差画素73の座標及び視差画素75の座標である場合、視差画素75の座標(u1,v6)を、第1座標として更新する。ステップS614の処理を実行した後、制御部24は、図23に示すステップS609の処理に戻る。例えば、図26に示す構成では、制御部24は、視差画素76の座標(u1,v7)を第1座標として更新するまで、ステップS609からの処理を繰り返し実行し得る。
ステップS615の処理において、制御部24は、第1座標からv軸の負方向に沿って所定間隔を超えて、対象視差と略等しい視差が対応付けられた座標が存在するか否かを判定する。例えば、制御部24は、第1座標が図26に示す視差画素76の座標(u1,v7)である場合、座標(u1,v7)からv軸の負方向に沿って所定間隔を、超えて対象視差と略等しい視差が対応付けられた座標が存在しないと判定する。制御部24は、第1座標からv軸の負方向に沿って所定間隔を超えて、対象視差と略等しい視差が対応付けられた座標が存在しないと判定するとき(ステップS615:No)、ステップS616の処理に進む。一方、制御部24は、第1座標からv軸の負方向に沿って所定間隔を超えて、対象視差と略等しい視差が対応付けられた座標が存在すると判定するとき(ステップS615:Yes)、図25に示すステップS618の処理に進む。
ステップS616の処理において、制御部24は、第1座標のv座標から、路面の座標のv座標を減算することにより、画像上の物体の高さを算出する。第1座標が図26に示す視差画素76の座標(u1,v7)である場合、制御部24は、視差画素76のv座標(座標(v7))から、路面の座標のv座標(座標(v1))を減算することにより、物体の高さを算出する。第1座標が図27に示す視差画素83の座標である場合、制御部24は、視差画素83のv座標から、路面のv座標(座標(v8))を減算することにより、物体の高さT1を算出する。ステップS613,S616の処理により、図27に示すように、他車両の視差画像81と、街路樹の視差画像82とが近くに位置する場合であっても、他車両の高さを精度良く算出することができる。ステップS616の処理において、制御部24は、算出した画像上の物体の高さと、第1座標とを関連付けて、メモリ23に格納する。
ステップS616の処理において、制御部24は、算出した画像上の物体の高さを、実空間上の物体の高さに変換してよい。制御部24は、実空間上の物体の高さが、検出対象の物体の高さの最小値よりも小さい場合、算出した物体の高さの情報を破棄してよい。例えば、検出対象の物体の高さの最小値が50cmである場合、制御部24は、実空間上の物体の高さが、40cm未満である場合、算出した物体の高さの情報を破棄してよい。
ステップS616の処理を実行した後、制御部24は、ステップS617の処理を実行する。ステップS617の処理において、制御部24は、対象視差に走査済みのフラグを付加する。ステップS617の処理をした後、制御部24は、図23に示すステップS601の処理に戻る。
ステップS618の処理を説明する前に、図29を参照して第2視差画像の一例について説明する。図29に、第2視差画像100を示す。図29には、第2視差画像100の一部が示されている。視差画像101は、図30に示す第1画像106に基づいて生成された視差画像である。第1画像106は、トラックの後面に対応する画像107を含む。
図29に示すように、第2視差画像100は、視差画像101を含む。視差画像101は、図30に示す画像107に対応する。視差画像101は、視差画素102と、視差画素103と、視差画素104と、視差画素105とを含む。視差画素103は、図30に示す画像107の下部画像107aに対応する。視差画素104及び視差画素105は、図30に示す画像107の上部画像107bに対応する。視差画素103が表す視差と、視差画素104が表す視差と、視差画素105が表す視差とは、同一物体であるトラックに対応する視差であることにより、略等しい。
図29に示すように、複数の視差画素102は、視差画像101の中央部に位置する。複数の視差画素102では、視差が算出されていない。つまり、複数の視差画素102は、視差の情報を含まない。一般的に、トラックの後面の中央部では、ステレオ画像上の特徴量が少ない。トラックの後面の中央部では、ステレオ画像上の特徴量が少ないことにより、視差を算出する上述のマッチング処理において、視差画素102のように、視差が算出されない場合がある。
図29に示す構成において、想定例として、制御部24が、探索対象のu座標を座標(u3)として、v方向に沿って走査する例を考える。想定例では、物体の高さとして、視差画像101に対応する高さT3、すなわち、トラックの高さが算出されることが望まれる。想定例では、制御部24は、視差画素103が表す視差を、対象視差として取得し得る。また、制御部24は、視差画素103の座標(u3,v10)を第1座標として更新し得る。高さT3が算出されるようにするためには、上述のステップS614の処理において、視差画素104の座標(u3,v11)を第1座標として更新することが求められる。視差画素104の座標(u3,v11)を第1座標として更新するためには、上述のステップS613における所定間隔を、視差画素104のv座標(座標(v11))と視差画素103のv座標(座標(v10))との間隔よりも、広げることが求められる。しかしながら、上述のステップS613の処理における所定間隔を広げると、物体の高さを誤算出する可能性が高まり得る。
そこで、制御部24は、ステップS618〜S622の処理を実行することにより、図29に示す高さT4を第1候補高さとして算出しておき、図29に示す高さT3を第2候補高さとして算出しておく。制御部24は、後述の図5に示すステップS107にて、第1候補高さ及び第2候補高さの何れを、物体の高さとして取得するかを判定する。このような構成とすることで、上述のステップS613の処理における所定間隔を広げなくてよい。上述のステップS613の処理における所定間隔を広げないとにより、物体の高さを誤算出する可能性が低減され得る。
ステップS618の処理において、制御部24は、候補座標を取得する。候補座標は、第1座標からv軸の負方向に沿って所定間隔を超えて存在する座標であって、対象視差と略等しい視差が対応付けられた座標である。例えば、制御部24は、第1座標が図29に示す視差画素103の座標(u3,v10)である場合、視差画素104の座標(u3,v11)を、候補座標として取得する。
ステップS619の処理において、制御部24は、第1座標のv座標から、路面の座標のv座標を減算することにより、第1候補高さを算出する。例えば、制御部24は、第1座標が図29に示す視差画素103の座標(u3,v10)である場合、視差画素103のv座標(座標(v10))から、路面のv座標(座標(v9))を減算することにより、第1候補高さT4を算出する。ステップS619の処理において、制御部24は、算出した第1候補高さと、第1座標とを関連付けて、メモリ23に格納する。例えば、制御部24は、図29に示す第1候補高さT4と、第1座標の視差画素103の座標(u3,v10)とを関連付けて、メモリ23に格納する。
ステップS620の処理において、制御部24は、候補座標のv座標を1つディクリメントした座標に、対象視差と略等しい視差が対応付けられているか否かを判定する。制御部24は、候補座標のv座標を1つディクリメントした座標に、対象視差と略等しい視差が対応付けられていると判定するとき(ステップS620:Yes)、ステップS621の処理に進む。ステップS621の処理において、制御部24は、候補座標のv座標を1つディクリメントした座標を、候補座標として更新する。ステップS621の処理を実行した後、制御部24は、ステップS620の処理に戻る。例えば、図29に示す構成では、制御部24は、視差画素105の座標(u3,v12)を候補座標として更新するまで、ステップS620の処理とステップS621の処理とを繰り返し実行する。一方、制御部24は、候補座標のv座標を1つディクリメントした座標に、対象視差と略等しい視差が対応付けられていないと判定するとき(ステップS620:No)、ステップS622の処理に進む。例えば、制御部24は、候補座標が図29に示す視差画素105の座標(u3,v12)である場合、候補座標のv座標を1つディクリメントした座標に、対象視差と略等しい視差が対応付けられていないと判定する。
ステップS622の処理において、制御部24は、候補座標のv座標から、路面のv座標を減算することにより、第2候補高さを算出する。例えば、制御部24は、候補座標が図29に示す視差画素105の座標(u3,v12)である場合、視差画素105のv座標(座標(v12))から、路面のv座標(座標(v9))を減算することにより、第2候補高さT3を算出する。ステップS622の処理において、制御部24は、算出した第2候補高さと、候補座標とを関連付けて、メモリ23に格納する。例えば、制御部24は、図29に示す第2候補高さT3と、候補座標の視差画素105の座標(u3,v12)とを関連関連付けて、メモリ23に格納する。ステップS622の処理を実行した後、制御部24は、ステップS623の処理に進む。
ステップS623の処理において、制御部24は、メモリ23に格納された、ステップS604の処理で取得した対象視差に、走査済みのフラグを付加する。ステップS623の処理を実行した後、制御部24は、図23に示すステップS601の処理に戻る。
ステップS106の処理において、制御部24は、平行物体の検出処理を実行する。ステップS106の処理の詳細は、図31に示すフローチャートに示される。
ステップS701の処理において、制御部24は、UDマップを生成又は取得する。UDマップは、「U−disparity空間」及び「u−d座標空間」とも呼ばれる。UDマップは、u方向と、視差の大きさに対応するd方向とから成る二次元座標に、対象視差が対応付けられたものである。対象視差は、物体に対応する視差とみなされて検出された第1視差のみであってよい。又は、対象視差は、第1視差及び第2視差の両方を含んでよい。以下、対象視差は、第1視差及び第2視差を含むものとする。制御部24は、メモリ23に格納された第1視差及び第2視差を取得して、UDマップを生成してよい。又は、制御部24は、取得部21によって外部からUDマップを取得してよい。
図32に、UDマップ110を示す。UDマップ110の横軸は、u軸に対応する。UDマップ110の縦軸は、視差の大きさを示すd軸に対応する。u座標とd座標とから成る座標系は、「ud座標系」とも呼ばれる。UDマップ110では、図32の紙面に向かって左下側の角が、ud座標系の原点(0,0)となる。図32に示すプロットは、図20に示す処理により検出された第1視差及び第2視差が対応付けられた座標点である。座標点は、単に「点」とも呼ばれる。UDマップ110は、点群111と、点群112と、点群113と、点群114と、点群115とを含む。UDマップ110は、図33に示す第1画像120から生成された第2視差画像に基づいて、生成されたものである。
図33に示すように、第1画像120は、ガードレールに対応する画像121と、他車両に対応する画像122及び画像123と、歩行者に対応する画像124と、側壁に対応する画像125とを含む。画像121〜125の各々から検出された第1視差及び第2視差は、図32に示す点群111〜点群115の各々に対応する。画像121及び画像125は、平行物体に対応する画像となり得る。つまり、図32に示す点群111及び点群115は、平行物体に対応する視差となり得る。平行物体の検出処理の目的の一つは、図32に示す点群111及び点群115のような、平行物体に対応する視差を検出することである。
本実施形態では、図32に示す点群111及び点群115のような平行物体に対応する視差を、後述のステップS704の処理にてハフ(Hough)変換を適用することにより、検出する。しかしながら、図32に示すように、点群111及び点群115の近くには、点群112及び点群113が位置している。点群111及び点群115の近くに、点群112及び点群113が位置していると、後述のステップS704の処理におけるハフ変換により、点群111及び点群115を検出する精度が低下し得る。そこで、ステップS702の処理により、制御部24は、図32に示すような、点群111及び点群115の近くに位置する点群112及び点群113が存在するか否かを判定する。
具体的には、ステップS702の処理において、制御部24は、u方向に略平行な点群が存在するか判定する。図32に示すように点群111及び点群115の近くに位置する点群112及び点群113は、図33に示す他車両に対応する画像122及び123から取得された視差である。他車両は、路面の幅方向に略平行な部分を含む。他車両が路面の幅方向に略平行な部分を含むことにより、点群112及び点群113は、図32に示すように、u方向に略平行な形状となり得る。従って、u方向に略平行な点群が存在するか否かを判定することにより、図32に示すような点群112及び点群113が存在するか否かが判定され得る。
ステップS702の処理の一例として、まず、制御部24は、UDマップのu方向に沿って走査する。例えば、制御部24は、図32に示すUDマップ110のu軸の負方向側からu軸の正方向側に向けて、走査する。制御部24は、UDマップのu方向に沿って走査しながら、u方向に沿って所定範囲連続して並ぶ点が存在するか否かを判定する。所定範囲は、車両に対する画像(例えば、図33に示す画像122及び画像123)のu方向に沿う長さに基づいて、設定されてよい。制御部24は、u方向に沿って所定範囲連続して並ぶ点が存在すると判定するとき、u方向に略平行な点群が存在すると判定する。制御部24は、u方向に沿って所定区間連続して並ぶ視差点を、u方向に略平行な点群として検出する。例えば、制御部24は、図32に示す点群112及び点群113を、u方向に略平行な点群として検出する。
ステップS702の処理において、制御部24は、u方向に略平行な点群が存在すると判定するとき(ステップS702:Yes)、ステップS703の処理に進む。一方、制御部24は、u方向に略平行な点群が存在しないと判定するとき(ステップS702:No)、ステップS704の処理に進む。
ステップS703の処理において、制御部24は、検出したu方向に略平行な点群を、UDマップから除去する。u方向に略平行な点群をUDマップから除去する代わりに、制御部24は、UDマップの座標点のうちの、u方向に略平行な点群を、後述のステップS704の処理におけるハフ変換の適用から単に除外してよい。図34に、u方向に略平行な点群が除去されたUDマップ110を示す。図34に示すUDマップ110では、図32に示す点群112及び点群113が除去されている。
ステップS704の処理において、制御部24は、UDマップに含まれる点に対してハフ変換を適用することにより、直線を検出する。ここで、UDマップを、x−z座標から成る実空間の座標系に変換し、変換後の実空間の座標系に対してハフ変換を適用することにより、直線を検出することも可能である。ただし、第1カメラ11と第2カメラ12との間の基線長Bが短いと、実空間の座標系に含まれる座標点の間隔が、UDマップに含まれる座標点の間隔よりも、疎になってしまう場合がある。座標点の間隔が疎になると、ハフ変換により、直線を精度良く検出できない場合がある。本実施形態では、UDマップに対してハフ変換を適用することにより、第1カメラ11と第2カメラ12との間の基線長Bが短い場合であっても、直線を精度良く検出することができる。
ステップS704の処理の一例を、図35及び図36を参照して説明する。
図35には、UDマップの一部が示されている。点131,132,133,134は、UDマップ上の座標点である。ハフ変換を、点131を例に説明する。UDマップ上の点131のuv座標は、座標(u131,d131)である。点131を通る直線L1は、無限に定義され得る。例えば、uv座標の原点(0,0)から、直線L1−1に下した法線の長さは、長さrである。当該法線は、u軸からd軸の正方向に向けて、角度θ傾いている。制御部24は、長さr及び角度θを変数とすることにより、点131を通る直線L1の一般式として、次の数式(3)を取得する。
r=u131×cosθ+d131×sinθ (3)
制御部24は、直線L1の式(数式(3))を、図36に示すような、ハフ空間としてのrθ平面に投影する。図36に示すrθ平面の横軸は、r軸である。図36に示すrθ平面の縦軸は、θ軸である。図36に示す曲線131Lは、数式(3)で示される曲線である。曲線131Lは、rθ平面では、正弦曲線として表される。点131と類似にして、制御部24は、図35に示す点132〜134を通る直線の式を取得する。点131と類似にして、制御部24は、取得した点132〜134を通る直線の式を、図36に示すような、ハフ空間としてのrθ平面に投影する。図36に示す曲線132L〜134Lは、それぞれ取得した図35に示す点132〜134を通る直線に対応する。図36に示すように、曲線131L〜134Lは、点PLで交わり得る。制御部24は、点PLのrθ座標(座標(θL,rL))を取得する。制御部24は、点PLの座標(θL,rL)に基づいて、図35に示す点131〜134を通る直線の式を検出する。制御部24は、図35に示す点131〜点134を通る直線として、次の数式(4)を検出する。
rL=u×cosθL+d×sinθL (4)
ステップS704の処理を実行することにより、制御部24は、図34に示すように点群111に対応する直線111L、及び、点群115に対応する直線115Lを検出し得る。
ところで、図33に示すように、平行物体に対応する画像121及び画像125は、消失点120VPに向けて延在する。画像121及び画像125が消失点120VPに向けて延在することにより、図34に示すように、点群111及び点群115も、消失点120VPに対応する消失点110VPに向けて延在する。点群111及び点群115も消失点110VPに向けて延在することにより、直線111L及び直線115Lも、消失点110VPに向けて延在し得る。
そこで、ステップS704の処理において、制御部24は、UDマップ上の点を通る直線の式を取得する際、当該点を通る直線のうち、消失点に基づく所定範囲を通る直線の式を取得してよい。例えば、制御部24は、図35に示す点131を通る直線L1の式を取得する際、点131を通る無限に存在する直線L1のうち、点131と、所定範囲ΔuVPとを通る直線の式を取得してよい。所定範囲ΔuVPは、消失点に基づく範囲である。所定範囲ΔuVPは、点135を含む。点135は、移動体30の進行方向が直進であるときの、消失点であってよい。点135のd座標は、無限遠方の視差がゼロとなることにより、ゼロであってよい。点135のu座標(座標uVP)は、移動体30の進行方向が直進であるときに、消失点のu座標がu座標の最大座標の二分の一となることにより、u座標の最大座標の二分の一であってよい。所定範囲ΔuVPは、移動体30がカーブを走行している際の、点135からの図34に示す消失点110VPのずれ量に基づいて、適宜設定されてよい。このような処理により、図36に示すように、ハフ空間のrθ平面において、曲線131L〜134Lをプロットするθ軸の範囲が範囲ΔθVPに絞られ得る。曲線131L〜134Lをプロットするθ軸の範囲が範囲ΔθVPに絞られることにより、ハフ変換の演算量が低減され得る。ハフ変換の演算量が低減されることにより、ハフ変換の処理が高速化され得る。
ステップS705の処理において、制御部24は、ステップS704の処理により検出した直線の長さが所定長を超えるか否かを判定する。所定長は、路面に沿って設けられる構造物すなわち平行物体の長さに基づいて、適宜設定されてよい。制御部24は、直線の長さが所定長以下であると判定するとき(ステップS705:No)、図5に示すステップS107の処理に戻る。一方、制御部24は、直線の長さが所定長を超えると判定するとき(ステップS705:Yes)、当該直線に対応する点群に平行物体フラグを付加する(ステップS706)。例えば、制御部24は、図34に示す点群111及び点群115に平行物体フラグを付加する。ステップS706の処理を実行した後、制御部24は、図5に示すステップS107の処理に進む。
ステップS107の処理において、制御部24は、復活処理を実行する。ステップS107の処理の詳細は、図37に示すフローチャートに示される。
ステップS801の処理において、制御部24は、図31に示すステップS701の処理と同一又は類似にして、UDマップを生成又は取得する。図31に示すステップS701の処理においてUDマップを生成している場合、制御部24は、図31に示すステップS701の処理で生成したUDマップを取得してよい。
図38に、UDマップ140を示す。UDマップ140は、図34に示すようなUDマップ110の一部を拡大したものである。UDマップ140の横軸は、u軸に対応する。UDマップ140の縦軸は、視差の大きさを示すd軸に対応する。図38において、UDマップ140は、画像として示されている。UDマップ140の画素は、視差を表す。ハッチングが施された画素は、第1視差を表す画素である。第1視差を表す画素、すなわち、第1視差が対応付けられた座標は、「第1視差点」とも呼ばれる。ドットが施された画素は、第2視差を表す画素である。第2視差を表す画素、すなわち、第2視差が対応付けられた座標は、「第2視差点」とも呼ばれる。UDマップ140は、第1視差点141と、第1視差点142と、第2視差点143とを含む。UDマップ140は、車両の後面に対応する視差画像を含む第2視差画像に基づいて生成されたものである。車両の後面の中央部では、リアガラス等が位置することにより、ステレオ画像上の特徴量が少ない。他車両の後面の中央部では、ステレオ画像上の特徴量が少ないことにより、他の部分の視差と比較して、図19に示す視差画像44のように、取得可能な視差の情報が少なくなる場合がある。例えば、図38に示すように、第1視差点141と第1視差点142との間には、第2視差点143が存在する。
ステップS802の処理において、制御部24は、UDマップのu方向において、第1視差点に挟まれた第2視差点が所定範囲を超えて存在するか否かを判定する。例えば、制御部24は、UDマップのu軸の負方向側からu軸の正方向側に向けて、走査する。制御部24は、u方向に沿って走査することにより、UDマップのu方向において第1視差点に挟まれた第2視差点が所定範囲を超えて存在するか否かを判定する。所定範囲は、実空間上の車両の後面の幅(例えば、1m)に基づいて、適宜設定されてよい。第1視差点に挟まれた第2視差点が所定範囲を超えて存在する場合、これらの第2視差点は、例えば並走する異なる車両といった、異なる物体にそれぞれ対応する視差である可能性が高い。これに対し、第1視差点に挟まれた第2視差点が所定範囲内に存在する場合、これらの第2視差点は、同一物体に対応する視差である可能性が高い。図38に示すUDマップ140のu方向において、第1視差点141と第1視差点142とに挟まれた複数の第2視差点143は、所定範囲内に存在する。UDマップ140のu方向において、制御部24は、第1視差点141と第1視差点142とに挟まれた第2視差点143が所定範囲を超えて存在すると判定しない。
ステップS802の処理において、制御部24は、UDマップのu方向において、第1視差点に挟まれた第2視差点が所定範囲を超えて存在すると判定するとき(ステップS802:Yes)、ステップS805の処理に進む。一方、制御部24は、UDマップのu方向において、第1視差点に挟まれた第2視差点が所定範囲を超えて存在すると判定しないとき(ステップS802:No)、ステップS803の処理に進む。
ステップS803の処理において、制御部24は、第2視差点を挟む2つの第1視差点のそれぞれに対応付けられた第1視差を取得する。例えば、制御部24は、図38に示す第1視差点141に対応付けられた第1視差と、第1視差点142に対応付けられた第1視差とを取得する。さらに、ステップS802の処理において、制御部24は、取得した2つの第1視差のそれぞれに対応する実空間上の高さの差分が所定高さ以内であるか否かを判定する。例えば、制御部24は、図38に示す第1視差点141の第1視差に対応する実空間上の高さと、第1視差点142の第1視差に対応する実空間上の高さとの差分が、所定高さ以下であるか否かを判定する。所定高さは、実空間上の車両の高さ(例えば、1m)に基づいて、適宜設定されてよい。
ステップS803の処理において、制御部24は、取得した2つの第1視差のそれぞれに対応する実空間上の高さの差分が所定高さ以内であると判定するとき(ステップS803:Yes)、ステップS804の処理に進む。ステップS804の処理において、制御部24は、第1視差点に挟まれた所定範囲を超える第2視差点に、復活フラグを付加する。上述のように、第2視差点は、第2視差を表すud座標である。つまり、ステップS804の処理は、第2視差と、当該第2視差が対応付けられたu座標とに、復活フラグを付加する処理とも言い換えられ得る。図39に、復活フラグが付加されたUDマップ140を示す。図39に示す粗いハッチングが施された画素は、復活フラグが付加された第2視差点である。
ステップS803の処理において、制御部24は、取得した2つの第1視差のそれぞれに対応する実空間上の高さの差分が所定高さを超えると判定するとき(ステップS803:No)、ステップS805の処理に進む。
ステップS805以降の処理は、図25に示すステップS619の処理で算出された第1候補高さ、及び、図25に示すステップS622の処理で算出された第2候補高さの何れを、物体の高さとして取得するかを判定する処理である。ステップS805以降の処理を説明する前に、図40及び図41を参照して第2視差画像の一例を説明する。
図40に、第2視差画像150を示す。図41に、第2視差画像160を示す。図40及び図41には、第2視差画像150及び第2視差画像160の一部が示されている。第2視差画像150及び第2視差画像160において、白色の視差画素は、視差の情報を含まない画素である。粗いハッチングが施された視差画素は、視差の情報を含む画素である。細かいハッチングが施された視差画素は、図25に示すステップS622の処理における第2候補高さの算出に用いられた視差画素である。細かいハッチングが施された視差画素の座標は、図25に示すステップS622の処理において、候補座標として、第2候補高さに関連付けられている。粗いドットが施された視差画素は、図25に示すステップS619の処理における第1候補高さの算出に用いられた視差画像である。粗いドットが施された視差画素の座標は、図25に示すステップS619の処理において、第1座標として、当該第1候補高さに関連付けられている。細かいドットが施された視差画素は、図24に示すステップS616の処理における物体の高さの算出に用いられた視差画素である。細かいドットが施された視差画素の座標は、図24に示すステップS616の処理において、第1座標として、物体の高さと関連付けられている。
図40に示す第2視差画像150は、図29に示す第2視差画像100と類似に、図30に示すトラックの後面の画像107に基づいて生成されたものである。第2視差画像150の中央部には、白色の視差画素が位置する。つまり、第2視差画像150では、中央部の視差画素の視差が算出されていない。第2視差画像150では、中央部を囲む視差画素の視差は算出されている。
図40に示す第2視差画像150は、視差画素151,152,153,154を含む。視差画素151は、第2候補高さの算出に用いられた視差画素である。視差画素151の座標は、候補座標として、第2候補高さに関連付けられている。視差画素152及び視差画素153は、物体の高さの算出に用いられた視差画素である。視差画素152及び視差画素153の座標のそれぞれは、第1座標として、物体の高さに関連付けられている。視差画素154は、第1候補高さの算出に用いられた視差画素である。視差画素154の座標は、第1座標として、第1候補高さに関連付けられている。
視差画素151は、図29に示す視差画素105と類似に、図30に示すトラックの後面の画像107の上部画像107bに対応する。視差画素154は、図29に示す視差画素103と類似に、図30に示すトラックの後面の画像107の下部画像107aに対応する。図40に示す構成では、視差画素151に基づく第2候補高さ、及び、視差画素154に基づく第1候補高さのうち、視差画素151に基づく第2候補高さが、物体の高さすなわち図30に示すトラックの高さとして、取得されることが求められる。
図41に示す第2視差画像160は、図42に示す第1画像170に基づいて生成された視差画像である。第1画像170は、他車両の上部の画像171と、街路樹に対応する画像172とを含む。画像171と画像172から生成される視差は、略等しい。画像172は、部分画像172aと、部分画像172bとを含む。部分画像172aと、車両の画像171とは、第1画像170のu方向の中央部に位置する。部分画像172aのu座標は、他車両の画像171のu座標の一部と同一である。部分画像172aは、他車両の画像171よりも、v軸の負方向側に位置する。部分画像172bは、部分画像172a及び画像171よりも、u軸の負方向側に位置する。
図41に示す第2視差画像160は、視差画素161と、視差画素162と、視差画素163とを含む。視差画素161は、第2候補高さの算出に用いられた視差画素である。視差画素161の座標によって図42に示す街路樹の部分画像172aの高さが、第2候補高さとして算出されている。視差画素161の座標は、候補座標として、第2候補高さに関連付けられている。視差画素162は、物体の高さの算出に用いられた視差画素である。視差画素162の座標によって図42に示す街路樹の部分画像172bの高さが、物体の高さとして算出されている。視差画素162の座標は、候補座標として、物体の高さに関連付けられている。視差画素163は、第1候補高さの算出に用いられた視差画素である。視差画素163の座標によって図42に示す車両の画像171の高さが、第1候補高さとして算出されている。視差画素163の座標は、第1座標として、第1候補高さに関連付けられている。
図41に示す構成では、視差画素163に基づく第1候補高さ、及び、視差画素161に基づく第2候補高さのうち、視差画素163に基づく第1候補高さが、物体の高さすなわち図42に示す車両の画像171の高さとして、取得されることが求められる。
ステップS805〜S807の処理において、制御部24は、候補座標を挟む2つの座標に対応付けられた視差に基づいて、第1候補高さ及び第2候補高さのうちの何れを、物体の高さとして取得するかを判定する。
具体的には、ステップS805の処理において、制御部24は、第2視差画像をu方向に沿って走査することにより、u方向において候補座標を挟む2つの第1座標が存在するか否かを判定する。上述のように、第1座標には、図23を参照して上述したように、対象視差と略等しい視差が対応付けられている。つまり、ステップS805の処理は、u方向において候補座標を挟む2つの座標にそれぞれ対応付けられた視差が対象視差であるか否かを判定する処理とも言い換えられ得る。
例えば、図40に示す第2視差画像150のu方向において、視差画素151の候補座標は、視差画素152の第1座標と視差画素153の第1座標とによって挟まれている。図40に示す構成では、制御部24は、視差画素151の候補座標を挟む、視差画素152の第1座標と視差画素153の第1座標とが存在すると判定する。
例えば、図41に示す第2視差画像160のu方向の方向において、視差画素161の候補座標のu軸の負方向側には、視差画素162の第1座標が位置する。一方、視差画素161の候補座標のu軸の正方向側には、第1座標が位置しない。図41に示す構成では、制御部24は、視差画素161の候補座標を挟む2つの第1座標が存在しないと判定する。
ステップS805の処理において、制御部24は、第2視差画像のu方向において第1座標を挟む2つの候補座標が存在すると判定するとき(ステップS805:Yes)、ステップS806の処理に進む。一方、制御部24は、第2視差画像のu方向において第1座標を挟む2つの候補座標が存在すると判定するとき(ステップS805:No)、ステップS807の処理に進む。
ステップS806の処理において、制御部24は、第1候補高さ及び第2候補高さのうちの、第2候補高さを物体の高さとして取得すると判定する。ステップS805,S806の処理によって、制御部24は、候補座標を挟む2つの座標にそれぞれ対応付けられた視差が対象視差であると判定するとき、第2候補高さを、物体の高さとして取得すると判定する。例えば、制御部24は、図40に示す視差画素154の座標に基づく第1候補高さ、及び、視差画素151の座標に基づく第2候補高さのうち、視差画素151の座標に基づく第2候補高さを、物体の高さとして取得すると判定する。図43に、図40に示す第2視差画像150おいて、物体の高さ判定に用いた視差画素を示す。図43では、細かいハッチングが施された視差画素の座標に基づいて物体の高さが算出されている。図43に示すように、視差画素151に基づく第2候補高さ、及び、視差画素154に基づく第1候補高さのうち、視差画素151に基づく第2候補高さが、物体の高さすなわち図30に示すトラックの高さとして、取得されている。
ステップS807の処理において、制御部24は、第1候補高さ及び第2候補高さのうちの、第1候補高さを物体の高さとして取得すると判定する。ステップS805,S807の処理によって、制御部24は、候補座標を挟む2つの座標にそれぞれ対応付けられた視差が対象視差であると判定しないとき、第1候補高さを、物体の高さとして取得すると判定する。例えば、制御部24は、図41に示す視差画素163の座標に基づく第1候補高さ、及び、視差画素161の座標に基づく第2候補高さのうち、視差画素163の座標に基づく第1候補高さを、物体の高さとして取得すると判定する。図44に、図41に示す第2視差画像160において、物体の高さ判定に用いた視差画素を示す。図44では、細かいハッチングが施された視差画素の座標に基づいて物体の高さが算出されている。図44に示すように、視差画素163に基づく第1候補高さ、及び、視差画素161に基づく第2候補高さのうち、視差画素163に基づく第1候補高さが、物体の高さすなわち図42に示す車両の画像171の高さとして、取得されている。
ステップS806,S807の処理を実行した後、制御部24は、図5に示すステップS108の処理に進む。
ステップS108の処理において、制御部24は、代表視差の決定処理を実行する。ステップS108の処理の詳細は、図45に示すフローチャートに示される。
ステップS901の処理において、制御部24は、図31に示すステップS701の処理と同一又は類似にして、UDマップを生成する。図31に示すステップS701の処理においてUDマップを生成している場合、制御部24は、図31に示すステップS701の処理で生成したUDマップを取得してよい。
ステップS902の処理において、制御部24は、UDマップの各u座標において、第1視差、及び、図36に示すステップS804の処理により復活フラグが付加された第2視差の中から、代表視差を取得する。制御部24は、図31に示すステップS706の処理により平行物体フラグが付加されていない、第1視差及び復活フラグが付加された第2視差の中から、代表視差を取得する。
ここで、ステレオカメラ10から物体までの距離が近い場合、ステレオ画像上で当該物体が占める画素数は、ステレオカメラ10から当該物体までの距離が遠い場合と比較して、多くなり得る。また、ステレオカメラ10から遠い距離に位置する物体ほど、ノイズ等の影響を受けることにより、当該物体に対応する視差を検出する精度が悪化する。つまり、ステレオカメラ10から近い距離に位置する物体ほど、当該物体に対応する視差を検出する精度が高まり得る。
そこで、ステップS902の処理において、制御部24は、UDマップの各u座標において、第1視差及び復活フラグが付加された第2視差の中から、ステレオカメラ10から近い距離に位置する物体に対応する視差すなわち最大の視差を、代表視差として取得する。さらに、制御部24は、ステレオカメラ10から近い距離に位置する物体であって、物体検出装置20の検出対象となる物体の高さの最小値(例えば、50cm)よりも大きい物体に対応する視差を、代表視差として取得してよい。
図46に、u方向に対応する取得された代表視差の一例を示す。図46に示す例では、各u座標に対する代表視差のバラツキが大きい。各u座標に対する代表視差のバラツキが大きいと、ステップS109の処理におけるグルーピング処理の演算量が増加する可能性がある。
そこで、ステップS903の処理において、制御部24は、所定範囲で代表視差を平均化してよい。所定範囲で代表視差を平均化することにより、ステップS109の処理におけるグルーピング処理の演算量が低減され得る。所定範囲は、後述のステップS109の処理等の演算負荷等を考慮して、適宜設定されてよい。平均化において、制御部24は、所定範囲の中央値の代表視差を取得してよい。制御部24は、所定範囲内において、抽出した中央値から所定割合(例えば5%)ずれた代表視差を除去して、代表視差の平均値を算出してよい。図47に、u方向に対応する平均化された代表視差の一例を示す。ステップS903の処理を実行した後、制御部24は、図5に示すステップ109の処理に進む。
制御部24は、図5に示すステップS104〜S108の処理すなわち第3処理を実行した後、1つ又は複数の座標を含む横方向の座標(u座標)の所定範囲毎に、代表視差de及び物体の高さ情報を関連付けて、メモリ23に格納してよい。図48に示すように、メモリ23に格納された複数の代表視差deは、u座標及び視差dをそれぞれ横軸及び縦軸とする2次元空間(u−d座標空間)上の点群の分布として表され得る。
ステップS109の処理において、制御部24は、u−d座標空間の代表視差deの情報をx−z座標から成る実空間の座標系に変換して、代表視差deの纏まり(グループ)を抽出することにより、物体を検出する処理(第4処理)を実行する。図49及び図50を参照して、ステップS109の処理の一例を説明する。
図49は、実空間上の構成の一例である。図49には、道路の路面41A上を走行する物体検出システム1を搭載した移動体30と、他車両42Aとが示されている。図49において、移動体30は、車両である。
移動体30に搭載された物体検出装置20の制御部24は、図48に示すようなu−d座標空間の複数の代表視差deを、図50に示すような実空間(x−z座標空間)の点群に変換する。図50では、u−d座標空間の代表視差deを表す各点は、x−z座標空間の点として表示される。制御部24は、点群の分布に基づいて点群の纏まりを抽出する。制御部24は、所定条件に従い近接する複数の点を纏めて点群の纏まりとして抽出する。点群の纏まりは、代表視差deの纏まり(グループ)を表す。
物体がステレオカメラ10の基線長方向に平行な面を有するとき、x−z座標空間上で点群はx方向に並ぶ。制御部24は、x−z座標空間上でx方向に並ぶ点群の纏まり180があるとき、これを物体として認識することができる。図50において、点群の纏まり180は、図29に示す他車両42Aの車体の後面に対応する。
物体が平行物体であるとき、x−z座標空間上で点群はz方向に並ぶ。制御部24は、x−z座標空間上でz方向に並ぶ点群の纏まり181があるとき、これを、平行物体として認識することができる。上述のように、平行物体の一例として、ガードレール及び高速道路の遮音壁等の道路端の構造物、又は、図49に示す他車両42Aの側面等が挙げられる。x−z座標空間上でz方向に並ぶ点群の纏まり181は、移動体30の進行方向と平行に並ぶ物体、又は、物体の移動体30の進行方向に平行な面に対応する。制御部24は、z方向に並ぶ点群の纏まり181を、物体検出処理の対象から除外することができる。ここで、上述のクラスタリング処理で検出された平行物体に対応する視差は、図45に示すステップS902の処理における代表視差deの取得処理の対象外とされている。ただし、クラスタリング処理において平行物体に対応する視差を完全に検出しきれない場合がある。この場合、x−z座標空間上において、平行物体に対応する視差、例えば点群の纏まり181が存在し得る。x−z座標空間上に、点群の纏まり181のような、平行物体に対応する視差が存在する場合でも、ステップS109の処理において、平行物体に対応する視差、物体検出処理の対象から除外することができる。
制御部24は、物体として認識した点群の纏まり180のx方向に並ぶ幅から、物体の幅を検出することができる。制御部24は、図45に示す処理により取得した代表視差deに関連付けられた高さ情報に基づいて、物体の高さを決定することができる。従って、制御部24は、認識した物体のx−z座標空間上での位置、横幅及び高さを認識することができる。
ステップS110の処理において、制御部24は、ステップS109の処理により認識した物体の位置、横幅及び高さの情報を、出力部22によって、移動体30内の他の装置に出力することができる。例えば、制御部24は、移動体30内の表示装置にこれらの情報を出力することができる。移動体30内の表示装置は、図51に示すように、第1カメラ11又は第2カメラ12の画像に、物体検出装置20から取得した情報に基づいて、他車両に対応する画像を囲む検出枠182を表示してよい。検出枠182は、検出された物体の位置及び画像内に占める範囲を示す。
以上のように、本開示の物体検出装置20は、速い処理速度と高い精度の物体検出を可能にする。すなわち、本開示の物体検出装置20及び本開示の物体検出方法は、物体を検出する性能を向上することができる。また、物体検出装置20は、検出する対象の物体を特定の種類の物体に限定しない。物体検出装置20は、路面上に存在するあらゆる物体を検出することができる。物体検出装置20の制御部24は、第1処理、第2処理、第3処理及び第4処理を、第1視差画像以外の前記ステレオカメラ10により撮像された画像の情報を用いずに実行することができる。このため、物体検出装置20は、第1視差画像及び第2視差画像の処理に加えて、撮像した画像から別途物体を認識する処理を行わなくてよい。従って、本開示の物体検出装置20は、物体認識に係る制御部24の処理負荷を低減することができる。このことは、本開示の物体検出装置20が、第1カメラ11又は第2カメラ12から直接得られた画像に対する画像処理と組み合わせることを排除しない。物体検出装置20は、テンプレートマッチング等の画像処理技術と組み合わせることも可能である。
上述の制御部24の実行する処理の説明において、本開示の理解を助けるため、種々の画像を用いた判定及び操作等を含む処理が説明された。これらの画像を用いた処理は、実際に画像を描画する処理を含まなくてよい。これらの画像を用いた処理と実質的に同じ内容の処理が、制御部24の内部の情報処理で実行される。
本開示に係る実施形態について、諸図面及び実施例に基づき説明してきたが、当業者であれば本開示に基づき種々の変形又は修正を行うことが容易であることに注意されたい。従って、これらの変形又は修正は本開示の範囲に含まれることに留意されたい。例えば、各構成部又は各ステップ等に含まれる機能等は論理的に矛盾しないように再配置可能であり、複数の構成部又はステップ等を1つに組み合わせたり、或いは分割したりすることが可能である。本開示に係る実施形態について装置を中心に説明してきたが、本開示に係る実施形態は装置の各構成部が実行するステップを含む方法としても実現し得るものである。本開示に係る実施形態は装置が備えるプロセッサにより実行される方法、プログラム、又はプログラムを記録した記憶媒体としても実現し得るものである。本開示の範囲にはこれらも包含されるものと理解されたい。
本開示において「第1」及び「第2」等の記載は、当該構成を区別するための識別子である。本開示における「第1」及び「第2」等の記載で区別された構成は、当該構成における番号を交換することができる。例えば、第1レンズは、第2レンズと識別子である「第1」と「第2」とを交換することができる。識別子の交換は同時に行われる。識別子の交換後も当該構成は区別される。識別子は削除してよい。識別子を削除した構成は、符号で区別される。本開示における「第1」及び「第2」等の識別子の記載のみに基づいて、当該構成の順序の解釈、小さい番号の識別子が存在することの根拠に利用してはならない。
本開示において、x方向、y方向、及び、z方向は、説明の便宜上設けられたものであり、互いに入れ替えられてよい。本開示に係る構成は、x方向、y方向、及び、z方向を各軸方向とする直交座標系を用いて説明されてきた。本開示に係る各構成の位置関係は、直交関係にあると限定されるものではない。画像の座標を示すu座標及びv座標は、説明の便宜上設けられたものであり、互いに入れ替えられてよい。u座標及びv座標の原点及び方向は、本開示のものに限定されない。
上記実施形態において、ステレオカメラ10の第1カメラ11及び第2カメラ12は、x方向に並んで位置していた。第1カメラ11及び第2カメラ12の配置はこれに限られない。第1カメラ11及び第2カメラ12は、路面に垂直な方向(y方向)又は路面41Aに対して傾いた方向に並んで位置してよい。ステレオカメラ10を構成するカメラの数は2つに限られない。ステレオカメラ10は、3つ以上のカメラを含んでよい。例えば、路面に水平方向に並ぶ2台のカメラ及び垂直方向に並ぶ2台のカメラの合計4台のカメラを用いて、より精度の高い距離情報を得ることも可能である。
上記実施形態において、ステレオカメラ10及び物体検出装置20は、移動体30に搭載されていた。ステレオカメラ10及び物体検出装置20は、移動体30に搭載されるものに限られない。例えば、ステレオカメラ10及び物体検出装置20は、交差点等に設置される路側機に搭載され路面を含む画像を撮像するように配置されてよい。例えば、路側機は、交差点で交差する道路の一方から接近する第1の車両を検出し、他方の道路上を走行して接近する第2の車両に対して第1の車両の接近を知らせる情報提供をすることができる。