本発明の実施形態を図面を参照しつつ説明する。
(オプティカルフローの検出処理)
本実施形態では、カメラの撮像画像を基に移動体を示すオプティカルフローを検出している。そして、本実施形態では、SAD(Sum of Absolute Difference(絶対差分総和))を用いたブロックマッチング処理によってオプティカルフローを検出している。
具体的には、本実施形態では、ブロックマッチング処理において、動画像を撮像して時系列的に入力された2つ撮像画像それぞれを複数のブロックに分割する。そして、本実施形態では、ブロックマッチング処理において、後画像の移動体を探索したい範囲に予め設定された広さの探索範囲を設定し、前画像内の任意の一のブロックと後画像内における前記探索範囲内の全てのブロックそれぞれとの絶対差分値を求め総和することでSADを算出する。
ここで、前画像は、時系列的に入力された2つ撮像画像のうちの時系列で前の撮像画像である。また、後画像(又は次画像)は、時系列的に入力された2つ撮像画像のうちの時系列で後の撮像画像である。
なお、本実施形態では、このようなブロックマッチング処理においてこのようなSADを用いることに限定されないことは言うまでもない。
ここで、図1は、撮像画像中の探索範囲(例えば、21×21の画素範囲)内のSADの一例を示す図である。すなわち、各升は、探索範囲内の各画素の位置を示す。また、各升内の数字は、その画素を中心として有するブロック(例えば、9×9の画素範囲)のSADを示す。
探索範囲内に示すSADが最小となるブロック(すなわち、SADが最小値を示す画素を中心に有するブロック)は、後画像の探索範囲内の全てのブロックのうち、前画像の任意の一のブロックと最も形状が近い(一致度が高い)ブロックとなる。以降、SADが最小となる画素を一致箇所と呼ぶことにする。また、ブロックのSADを表示する当該ブロックの中心の画素をブロック中心画素とも呼ぶことにする。
そして、図1に示すように、本実施形態では、図1に示すように、探索範囲の中心を始点とし、一致箇所を終点とするベクトルとしたオプティカルフローを検出する。ここで、探索範囲の中心又は始点は、前画像中の探索対象の代表位置(探索対象のブロックの中心の画素位置)に相当し、一致箇所又は終点は、後画像中の探索範囲内で探索対象と最も形状が近いブロックの代表位置(当該ブロックの中心の画素位置)に相当する。
本実施形態では、以上のような処理によって検出されるオプティカルフローの検出精度を向上させることを目的としている。具体的には、本実施形態では、撮像環境に外乱が加わっても、移動体を示すオプティカルフローを検出する精度を向上させることを目的としている。
(本実施形態におけるオプティカルフローに対する処理)
本実施形態においてオプティカルフローに対して行う処理を説明する。
本実施形態では、探索範囲内で一致箇所のSADと同程度のSADを持つ画素を類似箇所の画素(以下、単に類似箇所と言う。)としている。そして、本実施形態では、探索範囲内における類似箇所の分布傾向を基に、前述のようなブロックマッチング処理によって検出したオプティカルフローについて、移動体以外を示すオプティカルフローを誤検出のオプティカルフローとして取り除いている。特に、本実施形態では、撮像環境に外乱が加わることによって移動体を示すオプティカルフローと類似した特性を持つ移動体以外を示すオプティカルフロー(以下、移動体類似特性オプティカルフローという。)を、誤検出のオプティカルフローとして取り除いている。
(1)類似箇所の分布傾向
先ず、撮像環境に外乱(又はノイズ)が加わることによって移動体類似特性オプティカルフローが検出される撮像画像中の箇所(すなわち、探索範囲相当)には、大きく分けて次のように2つある。
・繰り返しパターン(例えば、白線、壁面境界等)
・路面や空等
ここで、図2には、撮像画像の例を示す。この図2において、Aに対応している丸で囲まれている箇所は、移動体を示す箇所となる。すなわち、Aに対応している丸で囲まれている箇所では、移動体を示すオプティカルフローが検出される。また、Bに対応している丸で囲まれている箇所は、移動体類似特性オプティカルフローが検出される箇所であり、繰り返しパターンとなる白線を示す箇所となる。また、Cに対応している丸で囲まれている箇所は、移動体類似特性オプティカルフローが検出される箇所であり、路面を示す箇所となる。
図3乃至図8は、図2に示すA、B、及びCの箇所を探索範囲としたSADの一例を示す。具体的には、図3は、図2中のAの箇所を探索範囲とした当該探索範囲内のSADを示す。また、図4は、図2に示す画像に外乱を加えた場合のAの探索範囲内のSADを示す。また、図5は、図2中のBの箇所を探索範囲とした当該探索範囲内のSADを示す。また、図6は、図2に示す画像に外乱を加えた場合のBの探索範囲内のSADを示す。また、図7は、図2中のCの箇所を探索範囲とした当該探索範囲内のSADを示す。また、図8は、図2に示す画像に外乱を加えた場合のCの探索範囲内のSADを示す。
ここで、図2に示す画像に外乱が加えられた状況として画像に西日が差し込んだ状況を模擬することとして、図3に示す探索範囲内の全SADにノイズとして700を加算して、外乱が加えられた状態の図4に示すSADを得ている。同様に、図5に示す探索範囲内の全SADにノイズとして700を加算して、外乱が加えられた状態の図6に示すSADを得ている。また、図7に示す探索範囲内の全SADにノイズとして700を加算して、外乱が加えられた状態の図8に示すSADを得ている。
そして、このような探索範囲内における類似箇所の分布傾向は次のようになる。ここで、例えば、一致箇所のSAD(探索範囲内で最小値のSAD)との偏差が1000以下となる画素を類似箇所としている。
先ず、探索範囲が移動体になっている場合には、図3及び図4に示すように、外乱(又はノイズ)を付加する前後とも、探索範囲内において、類似箇所が、探索範囲の中心に対して一致箇所と同じ方向に位置する。すなわち、探索範囲が移動体になっている場合には、外乱(又はノイズ)を付加する前後とも、探索範囲内における類似箇所の分布に偏りがある。
なお、補足すると、図3では、一致箇所は、SADが1486となる箇所であり、類似箇所は、グレー表示したSADが1737、1717となる箇所である。また、図4では、探索範囲内の全SADに700を加算しているため、一致箇所は、SADが2186となる箇所であり、類似箇所は、グレー表示したSADが2437、2417となる箇所である。
また、探索範囲が白線になっている場合には、図5及び図6に示すように、外乱(又はノイズ)を付加する前後とも、探索範囲内において、類似箇所が、探索範囲の中心に対して点対称となるように二方向に分かれて位置する。すなわち、探索範囲が白線になっている場合には、外乱(又はノイズ)を付加する前後とも、探索範囲内における類似箇所の分布に対称性がある。
なお、補足すると、図5及び図6では、類似箇所は、グレー表示したように、左下から右上に斜め方向に分布し、探索範囲の中心に対して点対称となるように二方向に分かれて位置する。
また、探索範囲が路面になっている場合には、図7及び図8に示すように、外乱(又はノイズ)を付加する前後とも、探索範囲内において、類似箇所が、探索範囲の中心に対して全方向に位置する。すなわち、探索範囲が路面になっている場合には、外乱(又はノイズ)を付加する前後とも、探索範囲内における類似箇所の分布に対称性がある。
以上のようなことから、移動体と、繰り返しパターンや路面等の移動体以外のものとでは、探索範囲内における類似箇所の分布傾向が異なることがわかる。さらに、外乱の付加前後ではそのような類似箇所の分布傾向に違いがないことから、外乱が加わったとしても、類似範囲の分布傾向を基に、移動体以外のオプティカルフローを誤検出のオプティカルフローとして取り除くことができるといえる。
(2)類似箇所の分布の評価方法
以上のように、類似範囲の分布傾向を用いることは、移動体以外のオプティカルフローを誤検出のオプティカルフローとして取り除くのに有効であることがわかる。次に、類似範囲の分布傾向を評価するための評価方法について説明する。
例えば、類似箇所の分布傾向の評価については、探索範囲の中心を始点とし一致箇所を終点とするオプティカルフロー(以下、一致箇所を示すオプティカルフローという。)と、探索範囲の中心を始点とし類似箇所を終点とするオプティカルフロー(以下、類似箇所を示すオプティカルフローという。)とが、始点(すなわち、探索範囲の中心)を頂点としてなす角度を算出することによって行うことができる。
また、類似箇所の分布傾向の評価については、これら2つのオプティカルフロー(一致箇所を示すオプティカルフローと類似箇所を示すオプティカルフロー)の内積を算出することによって行うことができる。
また、類似箇所の分布傾向の評価については、これら2つのオプティカルフローの内積の符号を算出することによって行うことができる。
以下にこれらの評価方法をさらに詳しく説明する。
(a)2つのオプティカルフローがなす角度に基づく評価方法
この(a)の評価方法では、一致箇所を示すオプティカルフローを座標a=(a1,a2)(ここで、(a1,a2)は、一致箇所を示すオプティカルフローの終点の座標となる。)とし、類似箇所を示すオプティカルフローを座標b=(b1,b2)(ここで、(b1,b2)は、類似箇所を示すオプティカルフローの終点の座標となる。)として、一致箇所を示すオプティカルフローと類似箇所を示すオプティカルフローとが始点(0,0)においてなす角度を下記(1)式によって算出する。
cosθ=a・b/(|a|・|b|)=(a1・b1+a2・b2)/((a12+b12)1/2・(a22+b22)1/2) ・・・(1)
そして、この評価方法では、前記(1)式によって算出したcosθを基に2つのオプティカルフローの方向を判定する。具体的には、この評価方法では、cosθ>ζの場合、探索範囲内において2つのオプティカルフローが同じ方向になっている、すなわち、探索範囲内において、類似箇所が一致箇所側に偏っていると判定する。また、この評価方法では、cosθ≦ζの場合、探索範囲内において2つのオプティカルフローが異なる方向になっている、すなわち、探索範囲内において、探索範囲の中心について類似箇所が一致箇所に対して対称性をもっていると判定する。ここで、ζは、判定用しきい値である。例えば、ζは、実験的、経験的、又は理論的に予め設定された値である。
そして、この評価方法では、探索範囲内の全ての類似箇所について、以上のような判定を行い、探索範囲内における類似箇所の分布傾向(偏り傾向や対称性を有する傾向)を評価する。
(b)2つのオプティカルフローの内積に基づく評価方法
この(b)の評価方法では、一致箇所を示すオプティカルフローを座標a=(a1,a2)とし、類似箇所を示すオプティカルフローを座標b=(b1,b2)として、一致箇所を示すオプティカルフローと類似箇所を示すオプティカルフローとの内積を下記(2)式によって算出する。
a・b=a1・b1+a2・b2 ・・・(2)
そして、この評価方法では、前記(2)式によって算出した内積を基に2つのオプティカルフローの方向を判定する。具体的には、この評価方法では、a1・b1+a2・b2<0の場合(すなわち、内積が負値の場合)、探索範囲内において2つのオプティカルフローが同じ方向になっていると判定する。また、この評価方法では、a1・b1+a2・b2≧0の場合(すなわち、内積が正値の場合)、探索範囲内において2つのオプティカルフローが異なる方向になっていると判定する。
そして、この評価方法では、探索範囲内の全ての類似箇所について、以上のような判定を行い、正である内積値の総和と負である内積値の総和とを基に、探索範囲内における類似箇所の分布傾向を評価する。
このような内積による評価方法は、処理負荷の高い除算やルートがないため、前述の
(a)の評価方法と比べて、低スペックなシステムに実装可能となる。
(c)2つのオプティカルフローの内積の符号に基づく評価方法
この(c)の評価方法では、前述の(2)式によって算出した2つのオプティカルフローの内積が正となる数と前記内積が負となる数とを基に、探索範囲内における類似箇所の分布傾向を評価する。
さらに、内積が正となる場合には、指標値にf1を加算、内積が負となる場合には、指標値にf2を加算するようにしても良い。さらに、指標値が正でかつ内積が正である場合には、指標値にf1を加算、指標値が正でかつ内積が負である場合には、指標値にf2を加算、指標値が負でかつ内積が正である場合には、指標値にg1を加算、指標値が負でかつ内積が負である場合には、指標値にg2を加算するようにしても良い。
(本実施形態における具体的な構成)
次に、本実施形態における前述の処理を実現している具体的な構成を説明する。
(第1の実施形態)
先ず、第1の実施形態を説明する。
図9は、第1の実施形態に係る移動体検出装置1の構成例を示すブロック図である。
図9に示すように、移動体検出装置1は、カメラ2、表示装置3、及び移動体検出部10を有している。
カメラ2は、車両に搭載されたカメラである。カメラ2は、時系列データとして撮像画像を移動体検出部10に出力する。また、表示装置3は、種々の情報を表示する。本実施形態では、表示装置3は、例えば、移動体検出部10によって抽出(又は判定)された撮像画像上の移動体の位置に枠を合成し、移動体を枠で囲って移動体を強調した画像表示を行う。
移動体検出部10は、例えば、ECU(Electronic Control Unit)であって、マイクロコンピュータ及びその周辺回路を備えるコントローラにおいて構成されている。例えば、移動体検出部10は、CPU、ROM、RAM等によって構成されている。そして、ROMには、各種処理を実現する1又は2以上のプログラムが格納されている。CPUは、ROMに格納されている1又は2以上のプログラムに従って各種処理を実行する。
この移動体検出部10は、オプティカルフローの検出処理等の移動体検出に係る各種の処理を行う。そのため、図9に示すように、移動体検出部10は、差分値算出部11、一致箇所検出部12、オプティカルフロー検出部13、類似箇所特定部14、指標値算出部15、及びオプティカルフロー抽出部16を有している。
図10乃至図12は、図9に示す構成を有する移動体検出部10による処理手順の一例を示すフローチャートである。
ここで、図10は、画像内において移動体を検出しようとする各探索範囲について、図11に示す処理及び図12に示す処理を完了したか否かを判定する処理の処理手順の一例を示すフローチャートである。そして、図11は、一致箇所を示すオプティカルフローを検出するための処理(以下、一致箇所検出処理という。)の処理手順の一例を示すフローチャートである。また、図12は、一致箇所を示すオプティカルフローが移動体を示すオプティカルフローか、移動体以外のオプティカルフローか否かを判定する処理(以下、オプティカルフロー判定処理という。)の処理手順の一例を示すフローチャートである。この図10乃至図12の処理手順を説明しつつ、図9に示す移動体検出部10の各部の処理をあわせて詳しく説明する。
先ず、図10に示す処理の処理手順について説明する。
図10に示すように、先ずステップS1では、移動体検出部10は、一致箇所検出処理(図11の処理)を実行する。
次に、ステップS2では、移動体検出部10は、オプティカルフロー判定処理(図12の処理)を実行する。
次に、ステップS3では、移動体検出部10は、前記ステップS1の一致箇所検出処理及び前記ステップS2のオプティカルフロー判定処理を全ての探索範囲について完了したか否かを判定する。移動体検出部10は、前記ステップS1の一致箇所検出処理及び前記ステップS2のオプティカルフロー判定処理を全ての探索範囲について完了したと判定すると、当該図10に示す処理を終了する。また、移動体検出部10は、前記ステップS1の一致箇所検出処理及び前記ステップS2のオプティカルフロー判定処理を全ての探索範囲について完了していないと判定すると、ステップS4に進む。
ステップS4では、移動体検出部10は、次に一致箇所検出処理及びオプティカルフロー判定処理を行うべき探索範囲を設定する。そして、移動体検出部10は、前記ステップS1から再び処理を行う。
次に、図11に示す一致箇所検出処理の処理手順について説明する。
図11に示すように、先ずステップS11では、差分値算出部11は、探索範囲(前記図10で順次設定されている探索範囲)内における暫定一致箇所の座標(a1,a2)に座標(0,0)を設定する。すなわち、差分値算出部11は、暫定一致箇所を示すオプティカルフローの情報となる座標(0,0)を座標(a1,a2)に設定する。
ここで、以降の処理では、各ブロックのSADを算出しつつ一致箇所を探索することが実現されるが、暫定一致箇所は、その一致箇所の探索の過程で算出されるSADが最小値となるブロックのブロック中心画素の位置である。また、座標(0,0)は、探索範囲の中心の座標である。このようなことから、ステップS11では、差分値算出部11は、先ず、暫定一致箇所の座標を探索範囲の中心の座標で初期化していることになる。
次に、ステップS12では、差分値算出部11は、前記ステップS11で設定した座標(a1,a2)(=(0,0))のSADを算出する。すなわち、差分値算出部11は、座標(a1,a2)の画素を中心に有するブロックのSADを算出する。ここでは、SADの演算方法は、従来と同様であるため、その説明を省略する。以下の説明でも、同様に省略する。
次に、ステップS13では、差分値算出部11は、前記ステップS12で算出したSADを、座標(a1,a2)、すなわち座標(0,0)に対応するバッファに保存する。すなわち、差分値算出部11は、前記ステップS12で算出したSADを、当該SADを算出したブロックのブロック中心画素の座標(0,0)に対応するバッファに保存する。
次に、ステップS14では、差分値算出部11は、前記ステップS12で算出したSADを値Aに設定する。具体的には、差分値算出部11は、値Aを格納するためのバッファに、前記ステップS12で算出したSADを保存する。ここで、値Aは、探索範囲内における暫定一致箇所のSADが設定される値(以下、暫定一致箇所SAD値という。)である。
このステップS14の処理によって、差分値算出部11は、先ず暫定一致箇所のSADに探索範囲の中心のSADを設定する初期化を行っている。
次に、ステップS15では、差分値算出部11は、探索中の画素の座標を示す座標(b1,b2)に次に探索する画素の座標を設定する((b1,b2)=次画素の座標)。具体的には、差分値算出部11は、座標(b1,b2)を格納するためのバッファに、次に探索する画素の座標を保存する。ここで、画素の探索順序は予め設定されている。
図13は、探索範囲内における画素の探索順序の一例を示す図である。図13において、各升は、探索範囲の各画素の位置を示す。そして、各升内の数値は、当該升の画素を探索する順序を示す。なお、図13において、100以上の探索順序は、「##」として省略されている。
また、図14は、探索範囲内における画素の探索順序を探索テーブルとして表した一例の図である。図14における探索テーブルのテーブルNoの欄の値は、図13における各升内の数値に相当する。すなわち、探索テーブルのテーブルNo=0は、探索範囲の中心に相当する。また、図14における探索テーブルのX移動量は、X座標方向の移動量を示し、Y移動量は、Y座標方向の移動量を示す。ここで、X座標は、図13では、右側が正の領域になり、左側が負の領域になる。また、Y座標は、図13では、下側が正の領域になり、上側が負の領域になる。このような探索テーブルを用いることで、差分値算出部11は、探索範囲の中心を基点として、X移動量及びY移動量に応じて画素を探索する。
また、図13における升内に示す数値又は図14の探索テーブルに示す数値によれば、探索範囲内での画素の探索順序は、探索範囲の中心に位置する画素から探索を開始して、探索済みの画素が探索範囲の中心を円の中心とした同心円状に位置するような順序になる。このようなことから、探索順序が1〜4の画素については、探索範囲の中心からの距離が1となる。また、探索順序が5〜8の画素については、探索範囲の中心からの距離が21/2となる。また、探索順序が9の画素については、探索範囲の中心からの距離が2となる。すなわち、探索順序が早いほど(すなわち、図14の探索テーブルではテーブルNoが小さいほど)、探索する画素と探索範囲の中心との距離は短くなる。
次に、ステップS16では、差分値算出部11は、前記ステップS15で設定した探索中の画素の座標(b1,b2)のSADを算出する。すなわち、差分値算出部11は、座標(b1,b2)の画素を中心に有するブロックのSADを算出する。
次に、ステップS17では、差分値算出部11は、前記ステップS16で算出したSADを、座標(b1,b2)、すなわち、探索中の画素の座標に対応するバッファに保存する。
次に、ステップS18では、差分値算出部11は、前記ステップS16で算出したSADを値Bに設定する。具体的には、差分値算出部11は、値Bを格納するためのバッファに、前記ステップS16で算出したSADを保存する。ここで、値Bは、探索中の画素のSADが設定される値(以下、探索中画素SAD値という。)である。
次に、ステップS19では、一致箇所検出部12は、前記ステップS18で設定した探索中画素SAD値B(すなわち、探索中の画素のSAD)が前記ステップS14で設定した暫定一致箇所SAD値A(すなわち、暫定一致箇所のSAD)よりも小さいか否かを判定する。一致箇所検出部12は、探索中画素SAD値Bが暫定一致箇所SAD値Aよりも小さいと判定すると(B<A)、ステップS20に進む。また、一致箇所検出部12は、探索中画素SAD値Bが暫定一致箇所SAD値A以上であると判定すると(B≧A)、ステップS21に進む。
ステップS20では、一致箇所検出部12は、座標(a1,a2)に探索中の画素の座標(b1,b2)を設定する((a1,a2)=(b1,b2))。具体的には、一致箇所検出部12は、座標(a1,a2)を格納するためのバッファに、探索中の画素の座標(b1,b2)を保存する。
さらに、ステップS20では、一致箇所検出部12は、暫定一致箇所SAD値Aに探索中画素SAD値Bを設定する(A=B)。具体的には、一致箇所検出部12は、暫定一致箇所SAD値Aを格納するバッファに、探索中画素SAD値Bを保存する。
このステップS20によって、一致箇所検出部12は、暫定一致箇所及びそのSADの値である暫定一致箇所SAD値Aを、探索中画素SAD値Bが得られた画素の座標及び当該探索中画素SAD値Bで更新する。
次に、ステップS21では、一致箇所検出部12は、探索範囲内の全画素に対して処理を完了したか否かを判定する。一致箇所検出部12は、探索範囲内の全画素に対して処理を完了したと判定すると、ステップS22に進む。また、一致箇所検出部12は、探索範囲内の全画素に対して処理を完了していないと判定すると、前記ステップS15から再び処理を行う。
ステップS22では、一致箇所検出部12は、探索範囲内の全画素に対して処理を完了した時点で座標(a1,a2)に設定されている座標を一致箇所の座標として保存する。具体的には、一致箇所検出部12は、座標(a1,a2)に設定されている座標を一致箇所の座標を格納するためのバッファに保存する。ここで、一致箇所の座標は、一致箇所を示すオプティカルフローとなる。よって、一致箇所を示すオプティカルフローは、探索範囲の中心座標を始点とし、探索範囲内の全画素に対して処理を完了した時点で座標(a1,a2)に設定されている座標を終点とするベクトル相当である。
次に、図12に示すオプティカルフロー検出処理について説明する。
図12に示すように、先ずステップS31では、移動体検出部10(例えば、類似箇所特定部14)は、第1加算値X1及び第2加算値X2を0に初期化する(X1=0、X2=0)。具体的には、移動体検出部10は、第1加算値X1及び第2加算値X2それぞれに格納するためのバッファに0を保存する。ここで、各加算値X1、X2は、それぞれ一致箇所を示すオプティカルフローと類似箇所を示すオプティカルフローとの内積総和を示す値である。
次に、ステップS32では、類似箇所特定部14は、図11に示す一致箇所検出処理によって取得した一致箇所の座標(前記ステップS22で保存した座標、すなわち、一箇所を示すオプティカルフロー)を座標(a1,a2)に設定する((a1,a2)=一致箇所の座標)。具体的には、類似箇所特定部14は、探索範囲内における一致箇所の座標(a1,a2)を格納するためのバッファに、一致箇所検出処理によって取得した一致箇所の座標を保存する。
さらに、ステップS32では、類似箇所特定部14は、図11に示す一致箇所検出処理によって取得した一致箇所の座標のSADを値A1に設定する(A1=一致箇所のSAD)。具体的には、一致箇所検出部12は、値A1を格納するためのバッファに、一致箇所検出処理によって取得した一致箇所の座標のSADを保存する。ここで、値A1は、探索範囲内における一致箇所のSADが設定される値(以下、一致箇所SAD値という。)である。
次に、ステップS33では、類似箇所特定部14は、探索中の画素の座標を示す座標(b1,a2)に次の画素の座標を設定する((b1,b2)=次画素の座標)。具体的には、類似箇所特定部14は、座標(b1,a2)を格納するためのバッファに、次の画素の座標を保存する。
さらに、ステップS33では、類似箇所特定部14は、図11に示す一致箇所検出処理によって取得した、次の画素に対応するSAD(次の画素に対応するバッファに記憶されているSAD)を、探索中画素SAD値Bに設定する(B=次画素のSAD)。このとき、具体的には、類似箇所特定部14は、探索中画素SAD値Bを格納するためのバッファに、次の画素のSADを保存する。
ここでいう次の画素は、画素の探索順序によって予め設定されている。例えば、その探索順序は、図13や図14に示すような探索順序である。
次に、ステップS34では、類似箇所特定部14は、探索中の画素が類似箇所であるか否かを判定する。そのために、類似箇所特定部14は、前記ステップS32で設定した一致箇所SAD値A1から前記ステップS33で設定した探索中画素SAD値Bを減算した値の絶対値(|A1−B|)が類似箇所特定判定値α以下であるか否かを判定する。すなわち、類似箇所特定部14は、一致箇所SAD値A1と探索中画素SAD値Bとの偏差が類似箇所特定判定値α以下であるか否かを判定する。ここで、類似箇所特定判定値αは、一致箇所SAD値A1と探索中画素SAD値Bとが同程度の値を有するか否かを判定するための値、すなわち、探索中画素SAD値Bを取得した画素が類似箇所になり得るか否かを判定するための値である。例えば、類似箇所特定判定値αは、実験的、経験的、又は理論的に予め設定された値である。
例えば、図3乃至図8は、この類似箇所特定判定値αを1000とした例となる。
このステップS34の判定処理によって、類似箇所特定部14は、一致箇所SAD値A1から探索中画素SAD値Bを減算した値の絶対値が類似箇所特定判定値α以下であると判定すると(|A1−B|≦α)、座標(b1,b2)が類似箇所になるとして、ステップS35に進む。また、類似箇所特定部14は、一致箇所SAD値A1から探索中画素SAD値Bを減算した値の絶対値が類似箇所特定判定値αよりも大きいと判定すると(|A1−B|>α)、座標(b1,b2)が類似箇所にならないとして、ステップS39に進む。
ステップS35では、指標値算出部15は、前記ステップS32で設定した座標(a1,a2)と前記ステップS33で設定した座標(b1,b2)との内積X(=a1・b1+a2・b2)を算出する。すなわち、指標値算出部15は、一致箇所を示すオプティカルフローと類似箇所を示すオプティカルフローとの方向についての関係を示す指標として内積を算出する。
次に、ステップS36では、指標値算出部15は、前記ステップS35で算出した内積Xが0以上であるか否かを判定する。指標値算出部15は、内積Xが0以上であると判定すると(X≧0)、すなわち、内積Xが正値であると判定すると、つまり、一致箇所を示すオプティカルフローと類似箇所を示すオプティカルフローとが異なる方向であると判定すると、ステップS37に進む。また、指標値算出部15は、内積Xが0未満であると判定すると(X<0)、すなわち、内積Xが負値であると判定すると、つまり、一致箇所を示すオプティカルフローと類似箇所を示すオプティカルフローとが同じ方向であると判定すると、ステップS38に進む。
ステップS37では、指標値算出部15は、第1加算値(すなわち、正値用加算値)X1に、前記ステップS35で算出した内積Xを加算する(X1=X1+X)。そして、指標値算出部15は、ステップS39に進む。
ステップS38では、指標値算出部15は、第2加算値(すなわち、負値用加算値)X2に、前記ステップS35で算出した内積Xを加算する(X2=X2+X)。そして、指標値算出部15は、ステップS39に進む。
ステップS39では、移動体検出部10(例えば、類似箇所特定部14又は指標値算出部15)は、探索範囲内の全画素に対して処理を完了したか否かを判定する。移動体検出部10は、探索範囲内の全画素に対して処理を完了したと判定すると、ステップS40に進む。また、移動体検出部10は、探索範囲内の全画素に対して処理を完了していないと判定すると、前記ステップS33から再び処理を行う。
ステップS40では、指標値算出部15は、探索範囲内における類似箇所の分布傾向を評価する。具体的には、指標値算出部15は、第2加算値X2の絶対値(|X2|)に対して分布傾向判定値βを加減算した値の範囲内に第1加算値X1の絶対値(|X1|)が含まれているか否かを判定する(|X2|−β≦|X1|≦|X2|+β)。指標値算出部15は、第2加算値X2の絶対値(|X2|)に対して分布傾向判定値βを加減算した値の範囲内に第1加算値X1の絶対値(|X1|)が含まれていると判定すると、すなわち、第1加算値X1の絶対値(|X1|)と第2加算値X2の絶対値(|X2|)とが同程度の値であると判定すると、探索範囲内における類似箇所の分布傾向に対称性があるとして、ステップS41に進む。また、指標値算出部15は、そうでない場合(|X1|<|X2|−β又は|X1|>|X2|+β)、探索範囲内における類似箇所の分布傾向に偏りがある(非対称である)として、ステップS42に進む。
ここで、前記ステップS34乃至前記ステップS38、及び前記ステップS40の処理は、前記(b)2つのオプティカルフローの内積に基づく評価方法を実現している。
ステップS41では、オプティカルフロー抽出部16は、図11に示す一致箇所検出処理によって検出した一致箇所を示すオプティカルフローが、繰り返しパターン又は路面や空等のものであると決定する。そして、オプティカルフロー抽出部16は、当該図12に示す処理を終了する。
ステップS42では、オプティカルフロー抽出部16は、図11に示す一致箇所検出処理によって検出した一致箇所を示すオプティカルフローが、移動体のものであると決定する。そして、オプティカルフロー抽出部16は、当該図12に示す処理を終了する。
(動作、作用等)
次に、第1の実施形態における移動体検出部10の動作、その作用等の一例を説明する。
先ず、移動体検出部10は、一致箇所検出処理として次のような処理を行う。
移動体検出部10は、現在の探索範囲内における暫定一致箇所の座標(a1,a2)に座標(0,0)を設定するとともに、その座標(a1,a2)のSADを算出する(前記ステップS11、前記ステップS12)。そして、移動体検出部10は、算出したSADを座標(a1,a2)に対応するバッファに保存するとともに暫定一致箇所SAD値Aに設定する(前記ステップS13、前記ステップS14)。
また、移動体検出部10は、前記図13や図14に示す例の探索順序に従って読み出した画素の座標を座標(b1,b2)に設定するとともに、その座標(b1,b2)のSADを算出する(前記ステップS15、前記ステップS16)。そして、移動体検出部10は、後で行うオプティカルフロー検出処理で類似箇所の特定にSADを用いるため、その算出したSADを、座標(b1,b2)に対応するバッファに保存する(前記ステップS17)。さらに、移動体検出部10は、そのSADを探索中画素SAD値Bに設定する(前記ステップS18)。
そして、移動体検出部10は、探索中画素SAD値Bが暫定一致箇所SAD値Aよりも小さい場合に、暫定一致箇所及びそのSADの値を、探索中画素SAD値Bが得られた座標及び当該探索中画素SAD値Bで更新する(前記ステップS19、前記ステップS20)。
それから、移動体検出部10は、探索範囲内の全画素に対して前述のような処理を実施し、その処理が完了すると、座標(a1,a2)に最終的に設定されている座標を、一致箇所の座標を格納するためのバッファに保存する(前記ステップS21、前記ステップS22)。
そして、移動体検出部10は、以上のような一致箇所検出処理の後に、オプティカルフロー判定処理として、次のような処理を行う。
移動体検出部10は、第1加算値X1及び第2加算値X2を0に初期化する(前記ステップS31)。
それから、移動体検出部10は、先の一致箇所検出処理によって取得した一致箇所の座標を座標(a1,a2)に設定するとともに、先の一致箇所検出処理によって取得した当該一致箇所の座標のSADを一致箇所SAD値A1に設定する(前記ステップS32)。また、移動体検出部10は、探索する画素の座標を座標(b1,a2)に設定するとともに、当該探索する画素の座標に対応するSADを探索中画素SAD値Bに設定する(前記ステップS33)。
そして、移動体検出部10は、一致箇所SAD値A1から探索中画素SAD値Bを減算した値の絶対値(|A1−B|)が類似箇所特定判定値α以下である場合に、座標(a1,a2)と座標(b1,b2)との内積X(=a1・b1+a2・b2)を算出するとともに、内積Xが0以上であるか否かを判定する(前記ステップS34乃至ステップS36)。この判定の結果、移動体検出部10は、内積Xが0以上である場合、当該内積Xを第1加算値X1に加算し、移動体検出部10は、内積Xが0未満である場合、当該内積を第2加算値に加算する(前記ステップS36乃至前記ステップS38)。
それから、移動体検出部10は、探索範囲内の全画素に対して前述のような処理を実施し、その処理が完了した場合、第2加算値X2の絶対値(|X2|)に対して分布傾向判定値βを加減算した値の範囲内に第1加算値X1の絶対値(|X1|)が含まれているか否かを判定する(前記ステップS39、前記ステップS40)。この判定の結果、移動体検出部10は、第2加算値X2の絶対値(|X2|)に対して分布傾向判定値βを加減算した値の範囲内に第1加算値X1の絶対値(|X1|)が含まれている場合には、一致箇所を示すオプティカルフローが繰り返しパターン又は路面や空等のものであるとの決定を行う(前記ステップS40、前記ステップS41)。また、移動体検出部10は、そうでない場合には、一致箇所を示すオプティカルフローが移動体のものであるとの決定を行う(前記ステップS40、前記ステップS42)。
そして、移動体検出部10は、以上のような処理を全ての探索範囲について実施する(図10)。
(第1の実施形態における効果)
前述のように、探索範囲内での画素の探索順序は、探索範囲の中心に位置する画素から探索を開始して、探索済みの画素が探索範囲の中心を円の中心とした同心円状に位置するような順序になっている。よって、本実施形態では、探索範囲の中心からの距離が短い画素順に探索することになる。これによって、本実施形態では、移動体を示すオプティカルフローの検出精度を向上させることができる。
また、本実施形態では、従来の一致度判定処理の判定条件を緩くし、又は一致度判定処理自体を省略することができる。この点について、図15及び図16を参照しつつ以下に説明する。
図15は、移動体を示すオプティカルフローを検出するための従来の処理手順の一例を示す図である。図15において、点線内は、ブロックマッチング処理に基づくオプティカルフローの検出処理を示す。
図15に示すように、従来の処理では、ブロックマッチング処理によって画像中の全ての探索範囲においてオプティカルフローを検出する。その後、従来の処理では、後処理として、一致度判定(又は一致度の評価)、フロー長さ判定(又はフロー長さの評価)、フロー方向判定(又はフロー方向の評価)等の種々の判定を行い、移動体以外を示すオプティカルフローを誤検出のオプティカルフローとして取り除いている。
しかし、移動体以外を示すオプティカルフローが、撮像環境に外乱が加わることによって(例えば、画像に西日が差し込むことによって)、移動体を示すオプティカルフローと類似した特性を持つ場合がある。
この場合に、判定条件(又は評価条件)を緩くすると、移動体以外を示すオプティカルフローであるにもかかわらず、誤検出のオプティカルフローとして取り除くことができないオプティカルフローが増加してしまう。その一方で、判定条件を厳しくすると、カメラ(すなわち、自車両)から遠く離れた移動体を示すオプティカルフローも誤検出のオプティカルフローとして取り除いてしまうことがある。
例えば、外乱が加わると、そのランダム特性から、移動体以外を示すオプティカルフローが、移動体を示すオプティカルフローと見分けがつかない長さや方向をもつ場合がある。このような場合、フロー長さ判定やフロー方向判定では、移動体以外のオプティカルフローを誤検出のオプティカルフローを取り除くことができない。
しかし、そのために、残る判定処理である一致度判定の判定条件を厳しくすると、カメラから遠く離れた移動体を示すオプティカルフローも誤検出のオプティカルフローとして取り除いてしまうことがある。他方、一致度判定の判定条件を緩くすると、移動体以外を示すオプティカルフローであるにもかかわらず、誤検出のオプティカルフローとして取り除くことができないオプティカルフローが増加してしまう。
一方、図16は、第1の実施形態における移動体検出部10を適用した、移動体を示すオプティカルフローを検出するための処理の処理手順の一例を示す図である。図16において、一点鎖線内は、第1の実施形態における移動体検出部10によって実現される処理を示す。
前述のように、第1の実施形態において、移動体検出部10は、撮像環境に外乱が加わる場合でも、移動体を示すオプティカルフローを適切に検出することができる。よって、図16に示すように、このような移動体検出部10を適用した処理では、撮像環境に外乱が加わる場合にフロー長さ判定やフロー方向判定で移動体以外のオプティカルフローを誤検出のオプティカルフローを取り除くことができなくなること等を考慮して一致度判定の判定条件を厳しくするような対処を講ずる必要はない。この結果、移動体検出部10を適用した処理では、一致判定の判定条件を緩くしたり、さらには一致判定をなくしたりすることができるようになる。
また、本実施形態に係る処理では、以上のように一致度判定の判定条件を厳しくすることを要しないため、カメラから遠く離れた移動体を示すオプティカルフローを誤検出のオプティカルフローとして取り除いてしまうようなことも防止できる。すなわち、本実施形態に係る処理では、移動体を示すオプティカルフローを検出できる遠方距離の限界(すなわち、検出限界距離)を延長できる。
(第2の実施形態)
次に、第2の実施形態を説明する。
前述の第1の実施形態では、一致箇所検出処理(前記ステップS1の処理又は前記図11に示す処理)を行った後、その一致箇所検出処理の処理結果を用いて、オプティカルフロー判定処理(前記ステップS2の処理又は前記図12に示す処理)を行っている。これに対して、第2の実施形態では、いわば、一致箇所検出処理とオプティカルフロー判定処理とを同時進行で行っている。
図17及び図18は、その処理手順の一例を示すフローチャートである。ここで、図17は、前半の処理を示す図である。また、図18は、後半の処理を示す図である。
図17に示すように、先ずステップS61では、差分値算出部11は、前記ステップS11と同様に、探索範囲内における暫定一致箇所の座標(a1,a2)に座標(0,0)を設定する。
次に、ステップS62では、差分値算出部11は、前記ステップS12と同様に、前記ステップS61で設定した座標(a1,a2)(=(0,0))のSADを算出する。
次に、ステップS63では、差分値算出部11は、前記ステップS14と同様に、前記ステップS62で算出したSADを暫定一致箇所SAD値Aに設定する。
次に、ステップS64では、移動体検出部10(例えば、差分値算出部11)は、第1加算値X1及び第2加算値X2それぞれを0に初期化する(X1=0、X2=0)。ここで、各加算値X1、X2は、前述のように、一致箇所を示すオプティカルフローと類似箇所を示すオプティカルフローとの内積総和を示す値である。
次に、ステップS65では、移動体検出部10は、前記ステップS15と同様に、探索中の画素の座標を示す座標(b1,b2)に次に探索する画素の座標を設定する。ここで、画素の探索順序は、図13や図14の一例のように予め設定されている。
次に、ステップS66では、差分値算出部11は、前記ステップS16と同様に、前記ステップS66で設定した探索中の画素の座標(b1,b2)のSADを算出する。
次に、ステップS67では、差分値算出部11は、前記ステップS18と同様に、前記ステップS66で算出したSADを探索中画素SAD値Bに設定する。
次に、ステップS68では、移動体検出部10(例えば、一致箇所検出部12)は、前記ステップS19と同様に、前記ステップS67で設定した探索中画素SAD値B(すなわち、探索中の画素のSAD)が、前記ステップS63又は後述のステップS71で設定した暫定一致箇所SAD値A(すなわち、暫定一致箇所のSAD)よりも小さいか否かを判定する。すなわち、移動体検出部10は、探索中の画素の座標が暫定一致箇所であるか否かを判定する。移動体検出部10は、探索中画素SAD値Bが暫定一致箇所SAD値Aよりも小さいと判定すると(B<A)、ステップS69に進む。また、移動体検出部10は、探索中画素SAD値Bが暫定一致箇所SAD値A以上であると判定すると(B≧A)、ステップS73に進む。
ステップS69では、移動体検出部10は、前記ステップS67で設定した探索中画素SAD値Bが、前記ステップS63又は後述のステップS71で設定した暫定一致箇所SAD値Aから初期化判定値γを減算した値以下であるか否かを判定する。ここで、初期化判定値γは、第1加算値X1及び第2加算値X2を初期化するか否かを判定するための値である。初期化判定値γは、例えば、実験的、経験的、又は理論的に予め設定された値である。移動体検出部10は、探索中画素SAD値Bが、暫定一致箇所SAD値Aから初期化判定値γを減算した値以下であると判定すると(B≦A−γ)、これまで算出した各加算値X1、X2の誤差が大きいと推定し、ステップS70に進む。また、探索中画素SAD値Bが、暫定一致箇所SAD値Aから初期化判定値γを減算した値よりも大きいと判定すると(B>A−γ)、ステップS71に進む。
ステップS70では、移動体検出部10は、これまで算出した第1加算値X1及び第2加算値X2をともに0に初期化する(X1=0、X2=0)。そして、移動体検出部10は、ステップS71に進む。
ステップS71では、移動体検出部10は、暫定一致箇所の座標(a1,a2)と探索中の画素の座標(b1,b2)とを入れ替える。さらに、移動体検出部10は、暫定一致箇所のSADとなる暫定一致箇所SAD値Aと探索中の画素のSADとなる探索中画素SAD値Bとを入れ替える。そして、移動体検出部10は、ステップS72に進む。
このような入れ替え処理は、暫定一致箇所の座標及び暫定一致箇所のSADを、探索中の画素の座標及び探索中の画素のSADで更新する処理を実現している。さらには、この入れ替え処理は、これまでの暫定一致箇所が類似箇所であるか否かを判定するための前処理を実現しており、そのために、座標(b1,b2)にこれまでの暫定一致箇所の座標(a1,a2)を設定し、探索中画素SAD値Bにこれまでの暫定一致箇所のSAD(暫定一致箇所SAD値A)を設定している。
ステップS72では、移動体検出部10は、探索中の画素のSAD(探索中画素SAD値B)が、暫定一致箇所のSAD(暫定一致箇所SAD値A)よりも小さい場合の処理として、フラグSをクリアする(S=0)。そして、移動体検出部10は、ステップS74に進む。
また、ステップS73では、移動体検出部10は、探索中の画素のSAD(探索中画素SAD値B)が、暫定一致箇所のSAD(暫定一致箇所SAD値A)以上である場合の処理として、フラグSをセットする(S=1)。そして、移動体検出部10は、ステップS74に進む。
次に、図18に示すステップS74では、類似箇所特定部14は、前記ステップS34と同様に、探索中の画素の座標が類似箇所であるか否かを判定する。そのために、類似箇所特定部14は、暫定一致箇所SAD値Aから探索中画素SAD値Bを減算した値の絶対値(|A−B|)が類似箇所特定判定値α以下であるか否かを判定する。
ここでいう暫定一致箇所SAD値Aは、前記ステップS63で設定された暫定一致箇所SAD値A又は前記ステップS71の入れ替え処理によって得られた暫定一致箇所SAD値Aである。また、ここでいう探索中画素SAD値Bは、前記ステップS67で設定された探索中画素SAD値B又は前記ステップS71の入れ替え処理によって得られた探索中画素SAD値Bである。
このステップS74の判定処理によって、類似箇所特定部14は、暫定一致箇所SAD値Aから探索中画素SAD値Bを減算した値の絶対値が類似箇所特定判定値α以下であると判定すると(|A−B|≦α)、座標(b1,b2)が類似箇所になり得るとして、ステップS75に進む。また、類似箇所特定部14は、暫定一致箇所SAD値Aから探索中画素SAD値Bを減算した値の絶対値が類似箇所特定判定値αよりも大きいと判定すると(|A−B|>α)、座標(b1,b2)が類似箇所にならないとして、ステップS80に進む。
ステップS75では、移動体検出部10は、フラグSが1でありかつ座標(a1,a2)が座標(0,0)以外であるか否か、又は、フラグSが0でありかつ座標(b1,b2)が座標(0,0)以外であるか否かを判定する。移動体検出部10は、フラグSが1でありかつ座標(a1,a2)が座標(0,0)以外であると判定すると(S=1かつ(a1,a2)!=(0,0))、ステップS76に進む。また、移動体検出部10は、フラグSが0でありかつ座標(b1,b2)が座標(0,0)以外であると判定すると(S=0かつ(b1,b2)!=(0,0))、ステップS76に進む。移動体検出部10は、これら以外であると判定すると、ステップS80に進む。
ここで、暫定一致箇所の座標が探索範囲の中心の座標である場合には、オプティカルフローの始点と終点とが同一座標となるため、暫定一致箇所を示すオプティカルフローを設定することはできない。同様な観点から、類似箇所の座標が探索範囲の中心の座標である場合には、オプティカルフローの始点と終点とが同一座標となるため、類似箇所を示すオプティカルフローを設定することはできない。
このようなことから、フラグSが1でありかつ座標(a1,a2)が座標(0,0)である場合(S=1かつ(a1,a2)=(0,0))、暫定一致箇所の座標が探索範囲の中心の座標となるため、移動体検出部10は、後述の類似箇所の分布傾向を判定する処理(ステップS76乃至ステップS79)を行うことなく、ステップS80に進む。同様に、フラグSが0でありかつ座標(b1,b2)が座標(0,0)である場合(S=0かつ(b1,b2)=(0,0))、類似箇所の座標が探索範囲の中心の座標となるため、移動体検出部10は、後述の類似箇所の分布傾向を判定する処理(ステップS76乃至ステップS79)を行うことなく、ステップS80に進む。
ステップS76では、指標値算出部15は、前記ステップS35と同様に、座標(a1,a2)と座標(b1,b2)の内積X(=a1・b1+a2・b2)を算出する。すなわち、指標値算出部15は、暫定一致箇所を示すオプティカルフローと類似箇所を示すオプティカルフローとの方向についての関係を示す指標として内積を算出する。
次に、ステップS77では、指標値算出部15は、前記ステップS36と同様に、前記ステップS76で算出した内積Xが0以上であるか否かを判定する。指標値算出部15は、内積Xが0以上であると判定すると(X≧0)、すなわち、内積Xが正値であると判定すると、つまり、暫定一致箇所を示すオプティカルフローと類似箇所を示すオプティカルフローとが異なる方向であると判定すると、ステップS78に進む。また、指標値算出部15は、内積Xが0未満であると判定すると(X<0)、すなわち、内積Xが負値であると判定すると、つまり、暫定一致箇所を示すオプティカルフローと類似箇所を示すオプティカルフローとが同一方向であると判定すると、ステップS79に進む。
ステップS78では、指標値算出部15は、前記ステップS37と同様に、前記ステップS76で算出した内積を第1加算値X1に加算する(X1=X1+X)。そして、指標値算出部15は、ステップS80に進む。
ステップS79では、指標値算出部15は、前記ステップS38と同様に、前記ステップS76で算出した内積を第2加算値X2に加算する(X2=X2+X)。そして、指標値算出部15は、ステップS80に進む。
ステップS80では、移動体検出部10(例えば、類似箇所特定部14又は指標値算出部15)は、前記ステップS39と同様に、探索範囲内の全画素に対して処理を完了したか否かを判定する。移動体検出部10は、探索範囲内の全画素に対して処理を完了したと判定すると、ステップS81に進む。また、移動体検出部10は、探索範囲内の全画素に対して処理を完了していないと判定すると、図17に示す前記ステップS65から再び処理を行う。
ステップS81では、指標値算出部15は、前記ステップS40と同様に、探索範囲内における類似箇所の分布傾向を評価する。具体的には、指標値算出部15は、第2加算値X2の絶対値(|X2|)に対して分布傾向判定値βを加減算した値の範囲内に第1加算値X1の絶対値(|X1|)が含まれているか否かを判定する(|X2|−β≦|X1|≦|X2|+β)。指標値算出部15は、第2加算値X2の絶対値(|X2|)に対して分布傾向判定値βを加減算した値の範囲内に第1加算値X1の絶対値(|X1|)が含まれていると判定すると、すなわち、第1加算値X1の絶対値(|X1|)と第2加算値X2の絶対値(|X2|)とが同程度の値であると判定すると、探索範囲内における類似箇所の分布傾向に対称性があるとして、ステップS82に進む。また、指標値算出部15は、そうでない場合(|X1|<|X2|−β又は|X1|>|X2|+β)、探索範囲内における類似箇所の分布傾向に偏りがある(非対称である)として、ステップS83に進む。
ここで、前記ステップS76乃至前記ステップS79、及び前記ステップS81の処理は、前記(b)2つのオプティカルフローの内積に基づく評価方法を実現している。
ステップS82では、オプティカルフロー抽出部16は、一致箇所を示すオプティカルフローが繰り返しパターン又は路面や空等のものであると決定する。そして、オプティカルフロー抽出部16は、当該図17及び図18に示す処理を終了する。
ステップS83では、オプティカルフロー抽出部16は、一致箇所を示すオプティカルフローが移動体のものであると決定する。そして、オプティカルフロー抽出部16は、当該図17及び図18に示す処理を終了する。
ここで、このステップS83及び前記ステップS82でいう一致箇所を示すオプティカルフローは、前記ステップS80及び前記ステップS81に進んだとき、すなわち、探索範囲内の全画素に対して処理を完了したときに座標(a1,a2)に設定されている座標に基づくオプティカルフローである。つまり、暫定一致箇所によって逐次更新され、探索範囲内の全画素に対して処理を完了したときに最終的に得られている暫定一致箇所が一致箇所になる。
(動作、作用等)
次に、第2の実施形態における移動体検出部10の動作、その作用等を説明する。
移動体検出部10は、現在の探索範囲内における暫定一致箇所の座標(a1,a2)に座標(0,0)を設定するとともに、その座標(a1,a2)のSADを算出する(前記ステップS61、前記ステップS62)。そして、移動体検出部10は、算出したSADを暫定一致箇所SAD値Aに設定する(前記ステップS63)。また、移動体検出部10は、第1加算値X1及び第2加算値X2をそれぞれ0に初期化する(前記ステップS64)。
また、移動体検出部10は、前記図13や図14に示す例の探索順序に従って読み出した画素の座標を座標(b1,b2)に設定するとともに、その座標(b1,b2)のSADを算出する(前記ステップS65、前記ステップS66)。そして、移動体検出部10は、算出したSADを探索中画素SAD値Bに設定する(前記ステップS67)。
そして、移動体検出部10は、探索中画素SAD値Bが暫定一致箇所SAD値Aよりも小さいか否かを判定し、探索中画素SAD値Bが暫定一致箇所SAD値Aよりも小さい場合にはさらに探索中画素SAD値Bが暫定一致箇所SAD値Aから初期化判定値γを減算した値以下であるか否かを判定する(前記ステップS68、前記ステップS69)。
このような判定の結果、移動体検出部10は、探索中画素SAD値Bが暫定一致箇所SAD値A以上である場合には、フラグSを1に設定する(前記ステップS68、前記ステップS73)。
また、移動体検出部10は、探索中画素SAD値Bが暫定一致箇所SAD値Aよりも小さく、かつ探索中画素SAD値Bが暫定一致箇所SAD値Aから初期化判定値γを減算した値以下である場合には、これまで算出した第1加算値X1及び第2加算値X2をともに0に初期化する(前記ステップS68乃至ステップS70)。さらに、移動体検出部10は、暫定一致箇所の座標(a1,a2)と探索中の画素の座標(b1,b2)とを入れ替えるとともに、暫定一致箇所SAD値Aと探索中画素SAD値Bとを入れ替える(前記ステップS71)。そして、移動体検出部10は、フラグSを0に設定する(前記ステップS72)。
また、移動体検出部10は、探索中画素SAD値Bが暫定一致箇所SAD値Aよりも小さく、かつ探索中画素SAD値Bが暫定一致箇所SAD値Aから初期化判定値γを減算した値よりも大きい場合には、これまで算出した第1加算値X1及び第2加算値X2を初期化することなく、前記入れ替え処理を行う(前記ステップS68、前記ステップS69、前記ステップS71)。そして、移動体検出部10は、フラグSを0に設定する(前記ステップS72)。
その後、移動体検出部10は、暫定一致箇所SAD値Aから探索中画素SAD値Bを減算した値の絶対値(|A−B|)が類似箇所特定判定値α以下であり、かつフラグSが1であり、かつ座標(a1,a2)が(0,0)以外の場合に、座標(a1,a2)と座標(b1,b2)との内積X(=a1・b1+a2・b2)を算出する(前記ステップS74乃至前記ステップS76)。又は、移動体検出部10は、暫定一致箇所SAD値Aから探索中画素SAD値Bを減算した値の絶対値(|A−B|)が類似箇所特定判定値α以下であり、かつフラグSが0であり、かつ座標(b1,b2)が(0,0)以外の場合に、座標(a1,a2)と座標(b1,b2)との内積X(=a1・b1+a2・b2)を算出する(前記ステップS74乃至前記ステップS76)。
そして、移動体検出部10は、内積Xが0以上であるか否かを判定して、内積Xが0以上である場合には、当該内積Xを第1加算値X1に加算し、内積Xが0未満である場合には、当該内積Xを第2加算値に加算する(前記ステップS77乃至前記ステップS79)。
それから、移動体検出部10は、探索範囲内の全画素に対して前述のような処理を実施し、その処理が完了した場合、第2加算値X2の絶対値(|X2|)に対して分布傾向判定値βを加減算した値の範囲内に第1加算値X1の絶対値(|X1|)が含まれているか否かを判定する(前記ステップS80、前記ステップS81)。この判定の結果、移動体検出部10は、第2加算値X2の絶対値(|X2|)に対して分布傾向判定値βを加減算した値の範囲内に第1加算値X1の絶対値(|X1|)が含まれている場合には、一致箇所を示すオプティカルフローが繰り返しパターン又は路面や空等のものであると決定する(前記ステップS81、前記ステップS82)。また、移動体検出部10は、そうでない場合には、一致箇所を示すオプティカルフローが移動体のものであると決定する(前記ステップS81、前記ステップS83)。
そして、移動体検出部10は、以上のような処理を全ての探索範囲について実施する(図10)。
(第2の実施形態における効果)
前述のように、第2の実施形態では、一致箇所検出処理とオプティカルフロー判定処理とを同時進行で行うために、処理時間を短縮できる。
また、第2の実施形態でも、図13や図14に示すように、画素の探索順序は、SADを前回算出した画素(すなわち、SADを直前に算出した画素)とSADを今回算出する画素(すなわち、SADを次に算出した画素)とが探索範囲の中心に対して点対称になる順序である。このような探索順序は、類似箇所の分布の対称性を確認する上で有効な順序になる。その結果、第2の実施形態では、移動体を示すオプティカルフローの検出精度を向上させることができる。
例えば、類似箇所の分布の対称性を確認する上で有効であることは、次のことからわかる。
図17及び図18の処理では、探索が進むに連れて暫定一致箇所が更新される。しかし、探索範囲の中心について点対称となる2つの画素を探索しそれぞれにSADしても、その処理中に暫定一致箇所が更新される可能性は低い。そして、暫定一致箇所が更新されない場合には、図17及び図18の処理では、探索範囲の中心に対して点対称となる2つの画素を、同じ暫定一致箇所に基づいて処理することになる。したがって、図13や図14に示す探索順序では、探索範囲の中心に対して点対称となる2つの画素に対し同一の暫定一致箇所を用いて類似箇所を特定するための処理を行うことになるため、当該探索順序は、類似箇所の分布の対称性を確認する上で有効な順序になる。
言い換えると、探索範囲の中心に対して点対称となる2つの画素を、異なる暫定一致箇所に基づいて処理してしまうと、その2つの画素が同程度のSADであっても、一方の画素は、類似箇所と判定され、もう一方の画素は、類似箇所と判定されない可能性がある。
また、第2の実施形態では、探索中の画素のSAD(すなわち、探索中画素SAD値B)がこれまでの暫定一致箇所のSAD(すなわち、暫定一致箇所SAD値A)とが大きく異なる場合には、各加算値X1、X2をそれぞれ初期化している(前記ステップS69、前記ステップS70)。ここで、初期化される加算値X1、X2は、探索範囲の中心に対して点対称となる領域内の画素を基に得た値である。その結果、加算値X1、X2の初期化後に処理される領域は、探索範囲において初期化の対象となった領域の外領域となるが、初期化前の領域と同様に、探索範囲の中心に対して点対称となる領域である。このようなことからも、図13や図14に示す探索順序は、類似箇所の分布の対称性を確認する上で有効な順序になる。
ここで、例えば、SADを前回算出した画素とSADを今回算出する画素とが探索範囲の中心に対して点対称にならない探索順序、例えば、図13に示す探索領域の上から順序に探索していく場合を考えてみる。すなわち、1行目(最上行)を左から左方向に処理を行い、1行目の処理を完了したら、その下の2行目を左から左方向に処理するといったようにである。
このような処理の下、新しい暫定一致箇所のSADとこれまでの暫定一致箇所のSADとが大きく異なることで各加算値X1、X2を初期化してしまうと、初期化後に残っている探索範囲では、探索範囲の中心に対して対称とならない可能性が高くなる。そのため、対称でない範囲を探索しても、対称であるという結果は得られない。また、対称でない範囲を探索した結果、対称であるという結果が得られたとしても、対称であると結論づけるのは理にかなっていない。
このようなことから、図13や図14に示す探索順序は、類似箇所の分布の対称性を確認する上で有効な順序であることがわかる。
また、図19は、第2の実施形態における移動体検出部10を適用した、移動体を示すオプティカルフローを検出するための処理の処理手順の一例を示す図である。図19において、点線内は、ブロックマッチング処理に基づくオプティカルフローの検出処理を示す。また、図19において、一点鎖線内は、第2の実施形態における移動体検出部10によって実現される処理を示す。
この図19に示すように、第2の実施形態における移動体検出部10を適用した処理では、オプティカルフローの検出処理内でこの移動体検出部10による処理を行っている。そして、第2の実施形態に係る処理では、一致箇所を探索する処理と、類似箇所を特定して類似箇所の分布傾向を示す指標(すなわち、内積総和)を算出する処理とを同時に行っている。これによって、第2の実施形態に係る処理は、処理時間を短縮できる。
なお、前述の実施形態の説明では、オプティカルフロー抽出部16は、例えば、オプティカルフロー判定部を構成する。
(本実施形態の変形例)
本実施形態において、前記(b)2つのオプティカルフローの内積に基づく評価方法を実現する処理では、内積の正値を加算していく第1加算値X1と内積の負値を加算していく第2加算値X2とを別々に算出し、算出した第1加算値X1と第2加算値X2とを比較することで、類似箇所の分布傾向を評価している(前記ステップS34乃至前記ステップS38、及び前記ステップS40、又は前記ステップS76乃至前記ステップS79、及び前記ステップS81)。しかし、本実施形態では、内積を加算していく値を第1加算値X1と第2加算値とに分けずに、同一の加算値に内積を加算していくこともできる。この場合、本実施形態では、最終的に得たそのような同一の加算値と分布傾向判定値との比較結果を基に、探索範囲内における類似箇所の分布傾向を評価する。ここで、分布傾向判定値は、例えば、実験的、経験的、又は理論的に予め設定された値である。
また、本実施形態では、移動体検出部10は、前記(b)2つのオプティカルフローの内積に基づく評価方法に限らず、前記(a)2つのオプティカルフローがなす角度に基づく評価方法や前記(c)2つのオプティカルフローの内積の符号に基づく評価方法が実装されても良い。
また、本実施形態では、オプティカルフローの検出には、SADを用いたブロックマッチング処理を行うことに限定されるものではない。
また、本発明の実施形態を具体的に説明したが、本発明の範囲は、図示され記載された例示的な実施形態に限定されるものではなく、本発明が目的とするものと均等な効果をもたらすすべての実施形態をも含む。さらに、本発明の範囲は、請求項1により画される発明の特徴の組み合わせに限定されるものではなく、すべての開示されたそれぞれの特徴のうち特定の特徴のあらゆる所望する組み合わせによって画されうる。