(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0013】
以下に本開示の実施形態を図面とともに説明する。
本実施形態の測距装置1は、車両に搭載され、
図1に示すように、右撮像装置2と、左撮像装置3と、車速センサ4と、画像処理装置5とを備える。以下、測距装置1が搭載された車両を自車両という。
【0014】
右撮像装置2と左撮像装置3は、自車両前方の風景を連続して撮影し、その撮影画像を示す画像データを画像処理装置5へ出力する。右撮像装置2と左撮像装置3はそれぞれ、自車両の進行方向に対して右側と左側に設置される。以下、右撮像装置2の画像データを右画像データ、左撮像装置3の画像データを左画像データという。
【0015】
右撮像装置2と左撮像装置3は、平行等位に配置される。具体的には、右撮像装置2と左撮像装置3は、右撮像装置2の光軸と左撮像装置3の光軸とが平行になるように配置される。これにより、右撮像装置2の撮像面と左撮像装置3の撮像面が同一平面上に配置される。さらに、右撮像装置2と左撮像装置3は、右撮像装置2の撮像面の横軸と左撮像装置3の撮像面の横軸とが一致するように、水平方向に沿って予め設定された基線長だけ離れて配置される。撮像面の横軸は、撮像面上において撮像面と光軸との交点を原点とした二次元直交座標系のX軸およびY軸のうちのX軸である。
【0016】
車速センサ4は、自車両の走行速度(以下、車速)を検出し、その検出結果を示す車速信号を画像処理装置5へ出力する。
画像処理装置5は、CPU、ROM、RAM、I/O及びこれらの構成を接続するバスラインなどからなる周知のマイクロコンピュータを中心に構成される。マイクロコンピュータの各種機能は、CPUが非遷移的実体的記録媒体に格納されたプログラムを実行することにより実現される。この例では、ROMが、プログラムを格納した非遷移的実体的記録媒体に該当する。また、このプログラムの実行により、プログラムに対応する方法が実行される。なお、CPUが実行する機能の一部または全部を、一つあるいは複数のIC等によりハードウェア的に構成してもよい。また、画像処理装置5を構成するマイクロコンピュータの数は1つでも複数でもよい。
【0017】
このように構成された測距装置1において、画像処理装置5は、距離測定処理を実行する。この距離測定処理は、画像処理装置5の動作中において繰り返し実行される処理である。
【0018】
この距離測定処理が実行されると、画像処理装置5は、
図2に示すように、まずS10にて、右撮像装置2から右画像データを取得するとともに、左撮像装置3から左画像データを取得する。そしてS20にて、S10で取得した右画像データが示す右撮影画像と、S10で取得した左撮像データが示す左撮影画像との間の垂直方向のずれを補正し、右撮影画像と左撮影画像を互いに平行化する。具体的には、右撮影画像と左撮影画像との間で互いに対応関係にある画像領域(例えば、画素)の高さが一致するように、予め設定された補正パラメータに従って画素全体の垂直方向の座標を変換し、垂直方向のずれを補正する。
【0019】
次にS30にて、右撮影画像および左撮影画像のそれぞれについて動きベクトルを設定する。以下、右撮影画像および左撮影画像をまとめて撮影画像という。具体的には、
図3に示すように、まず、撮影画像PGを、X軸方向にm画素(mは正の整数)でY軸方向にn画素(nは正の整数)の矩形状の部分領域DRに分割する。本実施形態では、撮影画像PGは、例えば、X軸方向に沿って80個の部分領域DRが存在し、Y軸方向に沿って80個の部分領域DRが存在するように分割される。
【0020】
そして、複数の部分領域DRのそれぞれについて、車速センサ4が検出した車速vと、画像処理装置5のROMに予め記憶されている動きベクトル設定マップとに基づいて、動きベクトルfを設定する。
【0021】
なお、動きベクトルfは、下式(1)で表される。なお、下式(1)のdは焦点距離、sは物体と撮像装置との相対速度、zは物体と撮像装置との距離である。
f = d×s/z ・・・(1)
動きベクトル設定マップは、撮影画像PG内における部分領域DRの位置と、車速センサ4が検出した車速vと、動きベクトルfの大きさおよび方向との対応関係を示す。
【0022】
次に、動きベクトル設定マップの作成方法を説明する。
自車両が車速vで直進していると仮定して動きベクトルfを計算する。まず、撮影画像上の座標x=(x1,y1)において、自車両を原点とした実空間上の三次元座標X=(X1,Y1,Z1)に位置する静止物が写っているとする。この場合に、撮影画像上の座標と実空間上の三次元点とを対応付けるカメラパラメータをPとして、x=PXが成り立つ。
【0023】
自車両が車速vで直進しているため、予め設定されたベクトル算出用設定時間Δtが経過した後における上記の静止物の自車両を原点とした実空間上の三次元座標X’=(X2,Y2,Z2)は算出可能である。このため、予め設定されたベクトル算出用設定時間Δtが経過した後における上記静止物の撮影画像上の座標x’=(x2,y2)は、x’=PX’により算出することができる。そして、動きベクトルfは、(f=x’−x)により算出される。
【0024】
このようにした動きベクトルfの算出を、撮影画像PG内の全ての画素について実行する。そして、全ての部分領域DRのそれぞれについて、部分領域DRに含まれる画素の動きベクトルfの平均を算出し、この平均化した動きベクトルfを、部分領域DRの動きベクトルfとして決定する。
【0025】
そして、このようにした部分領域DRの動きベクトルfの設定を複数の車速vで実行することにより、動きベクトル設定マップが作成される。なお、動きベクトル設定マップ内に記述されていない車速での動きベクトルfについては、動きベクトル設定マップに記述されている車速の動きベクトルfを用いた線形補間により算出することができる。
【0026】
撮影画像上に動きベクトルfを設定した具体例を
図4に示す。
図4に示す撮影画像PG上には、動きベクトルfとして多数の白色の矢印が設定されている。
そして、S30の処理が終了すると、
図2に示すように、S40にて、撮影画像上に、複数の処理領域PRを設定する。
図3に示すように、処理領域PRは、X軸方向に2×m画素でY軸方向にn画素(nは正の整数)の矩形状の領域である。すなわち、処理領域PRは、X軸方向に2つ並べた部分領域DRを備える。そして、撮影画像上に設定される複数の処理領域PRはそれぞれ、少なくとも1つの部分領域DRが他の処理領域PRと異なるように設定される。
【0027】
例えば、
図3に示す撮影画像PGでは、最も上の行に設定されている部分領域DRを左から順に、部分領域DR1、部分領域DR2、部分領域DR3、部分領域DR4、部分領域DR5、部分領域DR6、・・・・・とする。また、最も上の行に設定されている処理領域PRを左から順に、処理領域PR1、処理領域PR2、処理領域PR3、処理領域PR4、処理領域PR5、・・・・・とする。
【0028】
この場合に、処理領域PR1は、部分領域DR1と部分領域DR2とを備える。処理領域PR2は、部分領域DR2と部分領域DR3とを備える。処理領域PR3は、部分領域DR3と部分領域DR4とを備える。処理領域PR4は、部分領域DR4と部分領域DR5とを備える。処理領域PR5は、部分領域DR5と部分領域DR6とを備える。
【0029】
そして、S40の処理が終了すると、
図2に示すように、S50にて、右撮影画像および左撮影画像の全ての処理領域PRについて、処理領域PR内の画像の動きぼけを除去するフィルタ処理を行う。具体的には、まず、全ての処理領域PRのそれぞれについて、下式(2),(3),(4),(5)で示すフーリエ変換を実行する。下式(2)〜(5)のfftは、フーリエ変換を示す。
【0030】
下式(2)は、処理領域PRにおける輝度Iの二次元分布に対するフーリエ変換により、輝度Iの周波数特性Lを算出することを示す。下式(3)は、処理領域PRにおける動きベクトルfの二次元分布に対するフーリエ変換により、動きベクトルfの周波数特性Fを算出することを示す。
【0031】
下式(4)は、X軸方向の微分演算子fxに対するフーリエ変換により、微分演算子fxの周波数特性Fxを算出することを示す。微分演算子fxは、下式(6)で定義される。下式(5)は、Y軸方向の微分演算子fyに対するフーリエ変換により、微分演算子fyの周波数特性Fyを算出することを示す。微分演算子fyは、下式(7)で定義される。
【0032】
【数1】
全ての処理領域PRについて下式(2)〜(5)で示すフーリエ変換を実行した後に、全ての処理領域PRのそれぞれについて、下式(8)で示す逆フーリエ変換を実行する。下式(8)のifftは、逆フーリエ変換を示す。下式(8)のλは、画像の滑らかさを調整するためのパラメータである。下式(8)の左辺の画像xは、フィルタ処理が行われた後の処理領域PRにおける輝度Iの二次元分布を示す。
【0033】
【数2】
なお、上式(8)における右辺の括弧内の分子は、周波数特性LとインバースFとの積である。インバースFは、(1/F)であり、動きベクトルfの周波数特性Fに掛けることにより振幅が1となり位相が0になるものである。
【0034】
ここで、フーリエ変換を用いて、画像のぼけを除去する手法について簡単に説明する。
まず、ぼけた画像g(x、y)と、ぼけのない画像f(x、y)との関係を、下式(9)でモデル化する。ここで、下式(9)のh(x、y)は、ぼけ関数である。また、下式(9)のn(x、y)は、ノイズである。なお、下式(9)の右辺の「*」は乗算記号ではなく、畳み込みの演算記号である。
【0035】
【数3】
ぼけ関数h(x、y)は、下式(10)に示すように、ぼけのない画像f(x、y)の各画素に適用される。このように、ぼけ関数を各画素に適用する演算を畳み込みという。
【0036】
【数4】
ぼけた画像g(x、y)から、ぼけのない画像f(x、y)を直接的に導出するには、多くの連立方程式を解く必要があり、困難を伴う。しかし、フーリエ変換を用いて畳み込み定理を適用すると、下式(11)が成立することが知られている。空間領域の畳み込みは、周波数領域での単純な積で表されるためである。
【0037】
【数5】
したがって、周波数領域おいて、ぼけた画像G(u、v)と、ぼけのない画像F(u、v)との関係を、下式(12)でモデル化することができる。ここで、下式(12)のN(u、v)は、周波数領域におけるノイズである。
【0038】
【数6】
下式(12)に示すぼけた画像G(u、v)を、周波数領域におけるぼけ関数H(u、v)で除算することにより、ぼけのない画像が得られる。但し、下式(13)に示すように、G(u、v)をH(u、v)で除算することより、周波数領域においてぼけが除去された画像F^(u、v)が得られる。
【0039】
【数7】
但し、一般的に、H(u、v)は、0となるか0付近の値となる場合が多い。これにより、ノイズ部分(すなわち、N(u、v)/H(u、v))を増幅させてしまい、ぼけの除去が困難となることが多いため、種々のフィルタ処理が提案されている。例えば、下式(14)に、「Constrained Least Square Filtering」と呼ばれる手法を示す。
【0040】
【数8】
本実施形態では、下式(14)のy|P(u,v)|
2の部分を、下式(15)に置き換えたものを使用している。下式(15)は、ノイズ成分を模擬する形になっており、この大きさをパラメータλで調整することにより、ぼけが除去された画像を復元できるようにしている。なお、パラメータλを大きくすると画像が滑らかになり、パラメータλを小さくすると画像がざらつく。
【0041】
【数9】
そして、S50の処理が終了すると、
図2に示すように、S60にて、S50でのフィルタ処理が行われた全ての処理領域PRのそれぞれについて、三角窓関数wを適用する。三角窓関数wは、
図5に示すように、処理領域PRにおけるX軸方向の位置と、重み係数との対応関係が三角形となるように設定されている。具体的には、まず、1つの処理領域PR内において最も左に位置している画素のX軸方向の位置を1[ピクセル]とし、最も右側に位置している画素のX軸方向の位置を2m[ピクセル]とする。そして、X軸方向の位置が1[ピクセル]および2m[ピクセル]のときの重み係数を0とし、X軸方向の位置が(m+0.5)[ピクセル]のときの重み係数を1とする。そして、X軸方向の位置が1[ピクセル]と(m+0.5)[ピクセル]との間である場合には、X軸方向の位置をxとして、重み係数を{(x−1)/(m−0.5)}とする。一方、X軸方向の位置が(m+0.5)[ピクセル]と2m[ピクセル]との間である場合には、X軸方向の位置をxとして、重み係数を{(2m−x)/(m−0.5)}とする。
【0042】
S60では、全ての処理領域PRの中から1つの処理領域PRを選択し、選択した処理領域PRを構成する全ての画素のそれぞれについて、画素のX軸方向の位置を特定し、特定したX軸方向の位置に対応する重み係数を、三角窓関数wを用いて算出する。そして、算出した重み係数と、画素の輝度とを乗算し、この乗算値を、画素の新たな輝度として更新する。このようにした全画素の輝度の更新を、全ての処理領域PRについて実行する。
【0043】
そして、S60の処理が終了すると、
図2に示すように、S70にて、S60で三角窓関数wが適用された後の処理領域PRを統合して、右撮影画像および左撮影画像のそれぞれを復元する。以下、S70にて復元された後の撮影画像を復元後撮影画像という。また、S70にて復元された後の右撮影画像を復元後右撮影画像、復元された後の左撮影画像を復元後左撮影画像という。
【0044】
具体的には、S60で三角窓関数wが適用された後の全ての処理領域PRについて、撮影画像内における位置が同一の画素を抽出し、抽出した1または複数の画素の輝度の総和を算出する。この総和を、下式(16)で示す三角窓関数wの総和Swで除算し、この除算値を、上記の位置における画素の輝度とする。下式(16)において、w
iは、画素のX軸方向の位置がiであるときの重み係数である。また、iは1から2mまでの整数である。
【0045】
【数10】
例えば、
図6に示すように、処理領域PR2においてX軸方向の位置がs[ピクセル]でありY軸方向の位置がt[ピクセル]である画素PX2と、処理領域PR3においてX軸方向の位置が(s−m)[ピクセル]でありY軸方向の位置がt[ピクセル]である画素PX3は、撮影画像内における位置が同一である。このため、画素PX2の輝度と画素PX3の輝度とを加算し、この加算値を三角窓関数wの総和Swで除算する。
【0046】
このようにした輝度の計算を、撮影画像内における全ての画素について実行する。
そして、S70の処理が終了すると、
図2に示すように、S80にて、視差算出処理を実行する。ここで、S80で実行される視差算出処理の手順を説明する。
【0047】
この視差算出処理が実行されると、画像処理装置5は、
図7に示すように、まずS210にて、右撮影画像および左撮影画像のそれぞれに対応する復元後右撮影画像および復元後左撮影画像を用いて、節点空間NPS内に節点NPを配置するとともに、節点NPのコストを算出する。
【0048】
具体的には、
図8に示すように、復元後右撮影画像および復元後左撮影画像のそれぞれについて、撮影画像を構成する各画素の位置を、物理座標系で設定する。物理座標は、撮影画像の左上の角を原点として、X軸の正方向が右向きとなり、Y軸の正方向が下向きとなる座標である。これにより、撮影画像を構成する各画素の位置が、ピクセル単位で設定される。以下、X軸方向の位置をX座標位置、Y軸方向の位置をY座標位置という。また、復元後右撮影画像および復元後左撮影画像をそれぞれ、基準画像および比較画像ともいう。
【0049】
そして、基準画像を、X軸方向にp画素(pは正の整数)でY軸方向にq画素(qは正の整数)の矩形状のブロックBLに分割する。
次に、分割された複数のブロックBLのそれぞれについて、領域SRで示すように、比較画像の中からY座標位置が同じ領域を探索領域として設定する。この探索領域において、ブロックBLとの視差が互いに異なり、且つ、ブロックBLと同じ大きさ(すなわち、X軸方向にp画素でY軸方向にq画素の矩形)の複数のブロックを節点設定用ブロックBLnとして抽出する。そして、抽出された複数の節点設定用ブロックBLnに基づいて、節点空間NPS内に節点NPを配置する。節点空間NPSは、
図9に示すように、ブロックBLのX座標位置をX軸とし、ブロックBLのY座標位置をY軸とし、ブロックBLに対応する節点設定用ブロックBLnの視差をZ軸とした3次元直交座標空間である。
【0050】
例えば、
図8では、基準画像内のブロックBB1について、矢印AL1で示すように、探索領域SR内でX座標位置が同じブロックBC1(1)を節点設定用ブロックBLnとして抽出するとする。この場合に、ブロックBB1のX座標位置をx1、ブロックBB1のY座標位置をy1、ブロックBB1とブロックBC1(1)との視差をd1と表記すると、矢印AL2で示すように、ブロックBC1(1)に対応する節点NP1(1)は節点空間NPS内の(x1,y1,d1)に配置される。なお、
図8に示す節点空間NPSは、Y座標がy1であるX−Z平面である。
【0051】
また、基準画像内のブロックBB1について、矢印AL3で示すように、探索領域SR内でX座標位置が異なるブロックBC1(2)を節点設定用ブロックBLnとして抽出するとする。この場合に、ブロックBB1とブロックBC1(2)との視差をd2と表記すると、矢印AL4で示すように、ブロックBC1(2)に対応する節点NP1(2)は節点空間NPS内の(x1,y1,d2)に配置される。
【0052】
また、基準画像内のブロックBB1に隣接するブロックBB2についても、ブロックBB1と同じ探索領域SR内で節点設定用ブロックBLnを抽出する。
例えば、基準画像内のブロックBB2について、矢印AL5で示すように、探索領域SR内でX座標位置が同じブロックBC2(1)を節点設定用ブロックBLnとして抽出するとする。この場合に、ブロックBB2のX座標位置をx2、ブロックBLのY座標位置をy1、ブロックBB2とブロックBC2(1)との視差をd1と表記すると、矢印AL6で示すように、ブロックBC2(1)に対応する節点NP2(1)は節点空間NPS内の(x2,y1,d1)に配置される。
【0053】
また、節点空間NPS内に配置された複数の節点NPのそれぞれについて、コストを算出する。コストは、節点NPを節点空間NPS内に配置する際に用いられた2つのブロック間の類似度を表す値である。上記2つのブロックは、基準画像内のブロックBLと、このブロックBLに対応して節点NPを配置するために比較画像から抽出された節点設定用ブロックBLnである。例えば、節点NP1(1)のコストは、ブロックBB1と、ブロックBC1(1)とを用いて算出される。
【0054】
節点空間NPS内における節点NPのX座標位置とY座標位置をまとめて節点位置pと表記し、節点NPの視差をu
pと表記する。さらに、節点空間NPS内において節点位置pと視差u
pで特定される位置に配置される節点NPのコストをD(p,u
p)と表記する。
【0055】
本実施形態では、周知のSSIM(Structural Similarity)を用いて、コストD(p,u
p)を下式(17)で算出する。
【0056】
【数11】
なお、上式(17)において、μ
xは、基準画像内のブロックBLに含まれる画素の輝度の平均値である。μ
yは、比較画像内の節点設定用ブロックBLnに含まれる画素の輝度の平均値である。σ
xは、基準画像内のブロックBLに含まれる画素の輝度の標準偏差である。σ
yは、比較画像内の節点設定用ブロックBLnに含まれる画素の輝度の標準偏差である。σ
xyは、基準画像内のブロックBLと比較画像内の節点設定用ブロックBLnに含まれる画素の輝度の共分散である。c
1,c
2,c
3,α,β,γは予め設定される定数である。
【0057】
このようにして、分割されたブロックBLの全てについて節点NPを節点空間NPS内に配置するとともに、配置された節点NPの全てについてコストD(p,u
p)を算出すると、S210の処理を終了する。
【0058】
S210の処理が終了すると、
図7に示すように、S220にて、節点NPのX方向移動コストE
xを算出する。X方向移動コストE
xについては後述する。
図8に示すように、ブロックBLはY軸方向に沿ってq画素毎に分割されている。このため、
図10の平面PL1,PL2,PL3で示すように、節点空間NPS内には、複数の節点NPが配置されたX−Z平面がY軸方向に沿ってq画素毎に存在する。
【0059】
これら複数のX−Z平面のそれぞれについて、節点NPのX方向移動コストE
xを算出する。以下に、節点NPのX方向移動コストE
xの算出方法を説明する。
例えば、
図8に示すように、X−Z平面において、複数の節点NPが2次元行列状に配列されているとする。また、以下の説明のために、Z軸方向を列方向とし、X軸方向を行方向として、第i行(iは正の整数)の第j列(jは正の整数)に位置する節点NPをNP(i,j)と表記する。なお、視差が小さいほどiは小さくなり、X座標位置が原点から近いほどjは小さくなる。
【0060】
まず、X−Z平面に配列されている複数の節点NPの中から1つの節点NPを終点として選択する。X座標位置が原点から最も近い複数の節点NP(すなわち、第i行の第1列に位置する節点NP)のうちの1つを始点とする。そして、
図8と
図10の移動方向M1で示すように、始点から、X軸の正方向に向かって、隣の列(すなわち、第2列)に位置する複数の節点NPのうちの1つへ移動させる。さらに、移動した節点NPから更に隣の列(すなわち、第3列)に位置する複数の節点NPのうちの1つへ移動させる。このように、始点の節点NPから、X軸の正方向に向かって1列ずつ節点NPへ順次移動させ、終点として選択された節点NPまで移動させた1つの移動経路を確定する。以下、この移動経路を右方向移動経路という。
図8では、左からNP(4,1)、NP(3,2)、NP(3,3)、NP(3,4)の順に右方向へ移動する右方向移動経路を示している。
【0061】
そして、確定した移動経路のコストEを、下式(18)で算出する。
【0062】
【数12】
上式(18)の右辺の第1項は、移動経路上に存在する節点NPのコストD(p,u
p)の総和を示す。上式(18)の右辺の第1項は、データ項という。上式(18)の右辺の第2項は、正則化項である。上式(18)の右辺の第2項のS(u
p,u
q)は、視差がu
pである節点NPから、視差がu
qである節点NPへ移動する場合の視差コストである。S(u
p,u
q)は、視差u
pと視差u
qとの差が大きくほど値が大きくなるように設定された関数である。本実施形態では、S(u
p,u
q)は、視差u
pと視差u
qとの差分の絶対値である。したがって、上式(18)の右辺の第2項は、移動経路を通過することによる視差の変化の総和を示す。
【0063】
このようにして、第1列に位置する複数の節点NPの何れか1点を始点とし、複数の節点NPの中から選択された1つの節点NPを終点とした場合において可能な全ての移動経路を確定することができ、確定した全ての移動経路についてコストEを算出することができる。これにより、コストEが最小となる移動経路を特定することができる。
【0064】
本実施形態では、上記のように全ての移動経路でコストEを算出する代わりに、動的計画法の一種である周知のビタビアルゴリズムを用いて、コストEが最小となる移動経路を特定する演算を行う。
【0065】
S220では、コストEが最小となる右方向移動経路の特定を、1つのX−Z平面に配列されている全ての節点NPについて行う。これにより、このX−Z平面に配列されている全ての節点NPのそれぞれについて、右方向移動経路の最小コスト(以下、右方向移動コスト)が算出される。
【0066】
次に、右方向移動コストの算出と同様にして、このX−Z平面に配列されている全ての節点NPのそれぞれについて、左方向移動経路の最小コスト(以下、左方向移動コスト)を算出する。
【0067】
具体的には、X−Z平面に配列されている複数の節点NPの中から1つの節点NPを終点として選択する。X座標位置が原点から最も遠い複数の節点NP(すなわち、第i行の最終列に位置する節点NP)のうちの1つを始点とする。そして、
図8と
図10の移動方向M2で示すように、始点から、X軸の負方向に向かって、隣の列に位置する複数の節点NPのうちの1つへ移動させる。さらに、移動した節点NPから更に隣の列に位置する複数の節点NPのうちの1つへ移動させる。このように、始点の節点NPから、X軸の負方向に向かって1列ずつ節点NPへ順次移動させ、終点として選択された節点NPまで移動させた1つの移動経路を確定する。以下、この移動経路を左方向移動経路という。
【0068】
S220では、右方向移動経路の場合と同様にして、コストEが最小となる左方向移動経路の特定を、1つのX−Z平面に配列されている全ての節点NPについて行う。これにより、このX−Z平面に配列されている全ての節点NPのそれぞれについて、左方向移動経路の最小コスト(以下、左方向移動コスト)が算出される。
【0069】
そして、S220では、このX−Z平面に配列されている全ての節点NPのそれぞれについて、右方向移動コストと左方向移動コストとを加算した加算値を、X方向移動コストE
xとして算出する。
【0070】
このX−Z平面でX方向移動コストE
xの算出が終了すると、次のX−Z平面について、同様にして、X方向移動コストE
xの算出を行う。そして、全てのX−Z平面についてX方向移動コストE
xの算出を行うと、S220の処理を終了する。
【0071】
S220の処理が終了すると、
図7に示すように、S230にて、節点NPのY方向移動コストE
yを算出する。Y方向移動コストE
yについては後述する。ブロックBLは、
図5に示すように、X軸方向に沿ってp画素毎に分割されている。このため、
図11の平面PL11,PL12,PL13,PL14で示すように、節点空間NPS内には、複数の節点NPが配置されたY−Z平面がX軸方向に沿ってp画素毎に存在する。
【0072】
S230では、これら複数のY−Z平面のそれぞれについて、節点NPのY方向移動コストE
yを算出する。節点NPのY方向移動コストE
yの算出は、X−Z平面の代わりにY−Z平面を用いている点が、上述したX方向移動コストE
xの算出と異なる。
【0073】
具体的には、Y−Z平面において、
図11の移動方向M3で示すように、Y座標位置が原点から最も近い複数の節点NPのうちの1つを始点して、Y軸の正方向に向かって、1列ずつ節点NPへ順次移動させ、終点として選択された節点NPまで移動させた移動経路を下方向移動経路とする。また、Y−Z平面において、
図11の移動方向M4で示すように、Y座標位置が原点から最も遠い複数の節点NPのうちの1つを始点して、Y軸の負方向に向かって、1列ずつ節点NPへ順次移動させ、終点として選択された節点NPまで移動させた移動経路を上方向移動経路とする。
【0074】
S230では、コストEが最小となる下方向移動経路と上方向移動経路の特定を、1つのY−Z平面に配列されている全ての節点NPについて行う。これにより、このY−Z平面に配列されている全ての節点NPのそれぞれについて、下方向移動経路の最小コスト(以下、下方向移動コスト)と、上方向移動経路の最小コスト(以下、上方向移動コスト)が算出される。
【0075】
そして、S230では、このY−Z平面に配列されている全ての節点NPのそれぞれについて、下方向移動コストと上方向移動コストとを加算した加算値を、Y方向移動コストEyとして算出する。
【0076】
このY−Z平面でY方向移動コストE
yの算出が終了すると、次のY−Z平面について、同様にして、Y方向移動コストE
yの算出を行う。そして、全てのY−Z平面についてY方向移動コストE
yの算出を行うと、S230の処理を終了する。
【0077】
S230の処理が終了すると、
図7に示すように、S240にて、節点NPの右斜め方向移動コストE
x−yを算出する。右斜め方向移動コストE
x−yについては後述する。
S240では、まず、
図12の平面PL21,PL22,PL23で示すように、節点空間NPS内において、X軸とY軸との間に跨ってX−Y平面と垂直になるように形成された複数の平面(以下、右斜め平面)を設定する。これら複数の右斜め平面は、互いに平行となるように、且つ、その平面の全面に亘って節点NPが配置されるように設定されている。
【0078】
S240では、これら複数の右斜め平面のそれぞれについて、節点NPの右斜め方向移動コストE
x−yを算出する。節点NPの右斜め方向移動コストE
x−yの算出は、X−Z平面の代わりに右斜め平面を用いている点が、上述したX方向移動コストE
xの算出と異なる。
【0079】
具体的には、右斜め平面において、
図12の移動方向M5で示すように、Y軸から最も近い複数の節点NPのうちの1つを始点して、X軸に向かって、1列ずつ節点NPへ順次移動させ、終点として選択された節点NPまで移動させた移動経路を右上方向移動経路とする。また、右斜め平面において、
図12の移動方向M6で示すように、X軸からから最も遠い複数の節点NPのうちの1つを始点して、Y軸に向かって、1列ずつ節点NPへ順次移動させ、終点として選択された節点NPまで移動させた移動経路を左下方向移動経路とする。
【0080】
S240では、コストEが最小となる右上方向移動経路と左下方向移動経路の特定を、1つの右斜め平面に配列されている全ての節点NPについて行う。これにより、この右斜め平面に配列されている全ての節点NPのそれぞれについて、右上方向移動経路の最小コスト(以下、右上方向移動コスト)と、左下方向移動経路の最小コスト(以下、左下方向移動コスト)が算出される。
【0081】
そして、S240では、この右斜め平面に配列されている全ての節点NPのそれぞれについて、右上方向移動コストと左下方向移動コストとを加算した加算値を、右斜め方向移動コストE
x−yとして算出する。
【0082】
この右斜め平面で右斜め方向移動コストE
x−yとの算出が終了すると、次の右斜め平面について、同様にして、右斜め方向移動コストE
x−yの算出を行う。そして、全ての右斜め平面について右斜め方向移動コストE
x−yの算出を行うと、S240の処理を終了する。
【0083】
S240の処理が終了すると、
図7に示すように、S250にて、節点NPの左斜め方向移動コストE
x+yを算出する。左斜め方向移動コストE
x+yについては後述する。
S250では、まず、
図13の平面PL31,PL32,PL33,PL34で示すように、節点空間NPS内において、右斜め平面と交差するように形成された複数の平面(以下、左斜め平面)を設定する。。これら複数の左斜め平面は、互いに平行となるように、且つ、その平面の全面に亘って節点NPが配置されるように設定されている。
【0084】
S250では、これら複数の左斜め平面のそれぞれについて、節点NPの左斜め方向移動コストEx+yを算出する。節点NPの左斜め方向移動コストE
x+yの算出は、X−Z平面の代わりに左斜め平面を用いている点が、上述したX方向移動コストExの算出と異なる。
【0085】
具体的には、左斜め平面において、
図13の移動方向M7で示すように、原点から最も近い複数の節点NPのうちの1つを始点して、原点から離れる方向に向かって、1列ずつ節点NPへ順次移動させ、終点として選択された節点NPまで移動させた移動経路を右下方向移動経路とする。また、左斜め平面において、
図13の移動方向M8で示すように、原点から最も遠い複数の節点NPのうちの1つを始点して、原点へ近付く方向に向かって、1列ずつ節点NPへ順次移動させ、終点として選択された節点NPまで移動させた移動経路を左上方向移動経路とする。
【0086】
S250では、コストEが最小となる右下方向移動経路と左上方向移動経路の特定を、1つの左斜め平面に配列されている全ての節点NPについて行う。これにより、この左斜め平面に配列されている全ての節点NPのそれぞれについて、右下方向移動経路の最小コスト(以下、右下方向移動コスト)と、左上方向移動経路の最小コスト(以下、左上方向移動コスト)が算出される。
【0087】
そして、S250では、この左斜め平面に配列されている全ての節点NPのそれぞれについて、右下方向移動コストと左上方向移動コストとを加算した加算値を、左斜め方向移動コストE
x+yとして算出する。
【0088】
この左斜め平面で左斜め方向移動コストE
x+yとの算出が終了すると、次の左斜め平面について、同様にして、左斜め方向移動コストE
x+yの算出を行う。そして、全ての左斜め平面について左斜め方向移動コストE
x+yの算出を行うと、S250の処理を終了する。
【0089】
S250の処理が終了すると、
図7に示すように、S260にて、節点空間NPS内の全ての節点NPについて、総方向移動コストE
sumを、下式(19)で算出する。
【0090】
【数13】
そしてS270にて、基準画像を構成する全てのブロックBLのそれぞれについて、ブロックBLと同じX座標位置とY座標位置を有して視差が互いに異なる複数の節点NPの中から、総方向移動コストE
sumが最小となる節点NPを選択する。
【0091】
さらにS280にて、S270で選択された節点NPの視差を、対応するブロックBLの視差として決定する。S280にて、基準画像を構成する全てのブロックBLについて視差を決定すると、視差算出処理を終了する。
【0092】
S80の処理が終了すると、
図2に示すように、S90にて、基準画像を構成する全てのブロックBLmについて、S80で算出された視差に基づき、視差を用いた周知の距離算出式を用いて距離を算出し、距離測定処理を終了する。これにより、基準画像を構成するブロックBLm毎に、ブロックBLm内に写っている物体までの距離が特定される。
【0093】
このように構成された測距装置1は、互いに異なる視点から同一の撮影領域を含むように同時に撮影された右撮影画像および左撮影画像を取得する。測距装置1は、右撮影画像および左撮影画像のそれぞれについて、撮影画像を、複数の画素で構成された部分領域DRに分割し、分割された複数の部分領域DR毎に、部分領域DR内に写っている物体が撮影画像内で移動する大きさと方向とを示す動きベクトルfを設定する。
【0094】
測距装置1は、右撮影画像および左撮影画像のそれぞれについて、上式(2)〜(8)に示すように、少なくとも、撮影画像の周波数特性Lを、撮影画像に設定された動きベクトルfの周波数特性Fで除算した演算を行い、更に、この演算結果の周波数特性に対応する復元後撮影画像を生成する。
【0095】
測距装置1は、右撮影画像および左撮影画像のそれぞれに対応して生成された復元後右撮影画像および復元後左撮影画像を用いて、復元後右撮影画像と復元後左撮影画像間との間の視差を検出する。
【0096】
なお測距装置1は、撮影画像の輝度Iの二次元分布に対してフーリエ変換を行うことにより周波数特性Lを算出する。また測距装置1は、撮影画像に設定された動きベクトルfの二次元分布に対してフーリエ変換を行うことにより周波数特性Fを算出する。また測距装置1は、演算結果に対して逆フーリエ変換を行うことにより、復元後撮影画像を生成する。
【0097】
このように測距装置1は、周波数特性Lを周波数特性Fで除算した演算を行うことにより、動きベクトルfの大きさと方向に応じた動きぼけを抑制することができる。そして動きベクトルfは、撮影画像内に写っている物体が撮影画像内で移動する大きさと方向とを示す。このため、測距装置1は、撮影画像内に写っている物体が撮影画像内で移動することに起因して撮影画像に生じる動きぼけを抑制することができ、視差検出の精度を向上させることができる。
【0098】
図14に、動きぼけを抑制する前の撮影画像G1を用いた距離測定結果と、動きぼけを抑制した後の撮影画像G2を用いた距離測定結果とを示す。
図14に示す画像G1は、自車両がトンネル内を走行しているときに右撮像装置2で撮影された画像である。画像G2は、画像G1から動きぼけを抑制した後の画像である。
【0099】
図14に示す画像G3は、画像G1において指示円CI1で示す領域を用いて距離を測定した結果を示す。画像G4は、画像G2において指示円CI2で示す領域を用いて距離を測定した結果を示す。
【0100】
図14の画像G3と画像G4とを比較すると明らかなように、画像G4は、画像G3よりも、距離の長短を示す濃淡の変化が明確になっており、画像G2は画像G1よりも動きぼけが抑制されている。
【0101】
また測距装置1は、車両に搭載され、車両の走行速度を検出する車速センサ4を備える。測距装置1は、車速センサ4により検出された車速と、撮影画像内における部分領域DRの位置とに基づいて、部分領域DRに動きベクトルfを設定する。
【0102】
これにより、測距装置1は、撮影時刻の異なる少なくとも2枚の撮影画像から同一の物体を探索して、少なくとも2枚の撮影画像における物体の位置の相違から動きベクトルfを算出するという処理を行うことなく、簡便に動きベクトルfを設定することができる。このため、測距装置1は、測距装置1の処理負荷を低減することができる。
【0103】
以上説明した実施形態において、画像処理装置5は視差検出装置に相当し、S10は画像取得部としての処理に相当し、S30はベクトル設定部としての処理に相当し、S40〜S70は画像生成部としての処理に相当し、S80は視差検出部としての処理に相当する。
【0104】
また、周波数特性Lは画像周波数特性に相当し、周波数特性Fはベクトル周波数特性に相当し、復元後右撮影画像および復元後左撮影画像は演算後画像に相当し、車速センサ4は車速検出部に相当する。
【0105】
以上、本開示の一実施形態について説明したが、本開示は上記実施形態に限定されるものではなく、種々変形して実施することができる。
[変形例1]
例えば上記実施形態では、2台の撮像装置(すなわち、右撮像装置2と左撮像装置3)を用いて視差を検出するものを示したが、3台以上の撮像装置を用いるようにしてもよい。
【0106】
[変形例2]
上記実施形態では、動きベクトル設定マップに基づいて動きベクトルfを設定するものを示した。しかし、動きベクトルfの設定方法はこれに限定されるものではなく、例えば、撮影時刻の異なる少なくとも2枚の撮影画像から同一の物体を探索して、複数の撮影画像における物体の位置の相違から動きベクトルfを算出するようにしてもよい。撮影時刻の異なる複数の撮影画像から同一の物体を探索する方法としては、例えば、周知のオプティカルフローが挙げられる。このように、複数の撮影画像から同一の物体を探索することにより、部分領域DR内に写っている物体が撮影画像内で移動する大きさと方向を示す動きベクトルを正確に設定することができる。このため、測距装置1は、動きぼけを更に抑制することができ、視差検出の精度を更に向上させることができる。
【0107】
[変形例3]
上記実施形態では、部分領域DRに含まれる画素の動きベクトルfの平均を算出し、この平均化した動きベクトルfを、部分領域DRの動きベクトルfとして決定するものを示した。しかし、部分領域DRの動きベクトルfを、部分領域DRの中心位置の画素における動きベクトルfで代表させるようにしてもよい。
【0108】
また、上記実施形態における1つの構成要素が有する機能を複数の構成要素に分担させたり、複数の構成要素が有する機能を1つの構成要素に発揮させたりしてもよい。また、上記実施形態の構成の一部を省略してもよい。また、上記実施形態の構成の少なくとも一部を、他の上記実施形態の構成に対して付加、置換等してもよい。なお、特許請求の範囲に記載の文言から特定される技術思想に含まれるあらゆる態様が本開示の実施形態である。
【0109】
上述した測距装置1の他、当該測距装置1を構成要素とするシステム、当該測距装置1としてコンピュータを機能させるためのプログラム、このプログラムを記録した媒体、視差検出方法など、種々の形態で本開示を実現することもできる。