【文献】
松尾琢也, 外2名,”奥行き推定精度向上のための重み付きジョイントバイラテラルフィルタ”,第74回(平成24年)全国大会講演論文集(2) 人工知能と認知科学,2012年 3月 6日,p.(2-243)-(2-244)
【文献】
福嶋慶繁, 外1名,”Depth Image Based Renderingのための奥行画像へのポストフィルタリング”,電子情報通信学会論文誌,日本,社団法人電子情報通信学会,2011年12月 1日,第J94−D巻, 第12号,p.1992-1995
(58)【調査した分野】(Int.Cl.,DB名)
前記重み決定手段(33)は、前記第1の画像における前記補正対象画素の輝度値と重みを算出する対象の重み算出対象画素の輝度値に基づいて、前記重み算出対象画素の重みを決定することを特徴とする請求項1または2に記載の視差マップ生成装置。
前記重み決定手段(33)は、前記第1の画像における前記補正対象画素の輝度値と重みを算出する対象の重み算出対象画素の輝度値との差が大きくなるほど、前記重み算出対象画素の重みを小さくすることを特徴とする請求項3に記載の視差マップ生成装置。
前記重み決定手段(33)は、前記補正対象画素と重みを算出する対象の重み算出対象画素との画像座標上の距離が長くなるほど、前記重み算出対象画素の重みを小さくすることを特徴とする請求項1ないし4のいずれか1つに記載の視差マップ生成装置。
前記重み決定手段(33)は、前記補正対象画素の視差と重みを算出する対象の重み算出対象画素の視差との差が大きくなるほど、前記重み算出対象画素の重みを小さくすることを特徴とする請求項1ないし5のいずれか1つに記載の視差マップ生成装置。
【発明を実施するための形態】
【0010】
以下、本発明の一実施形態について説明する。
図1に示すように、本実施形態に係る視差マップ生成システムは、右カメラ1、左カメラ2、演算回路3、メモリ4を備えている。
【0011】
右カメラ1および左カメラ2は、互いに異なる位置に配置され、同じ被写体を互いに異なる視点から同時に撮影するようになっている。例えば、視差マップ生成システムが車両に搭載されている場合は、車両のフロントガラスの右端付近および左端付近にそれぞれ右カメラ1および左カメラ2が取り付けられ、右カメラ1および左カメラ2は共に車両前方を撮影するようになっていてもよい。
【0012】
演算回路3(視差マップ生成装置の一例に相当する)は、右カメラ1が撮影した撮影画像および左カメラ2が撮影した撮影画像を取得し、取得した撮影画像に基づいて視差マップを作成する装置である。この演算回路3はメモリ4中のROMに記録されたプログラムを実行することで、後述する
図2の処理を実現するようになっている。また、演算回路3は、
図2の処理の実行において、メモリ4中のRAMを、計算結果の一時保存用の作業領域として使用する。
【0013】
また、演算回路3は、
図2の処理を実行することで、画像取得部31、視差マップ生成部32、重み決定部33、視差マップ補正部34として機能する。
【0014】
画像取得部31は、右カメラ1、左カメラ2によって互いに異なる視点から撮影された2つの画像を取得し、視差マップ生成部32は、取得された2つの画像の各々対応する画素毎の画素位置の差で表される視差を含む視差マップを生成する。
【0015】
重み決定部33は、視差マップ中の補正対象画素41(順に1個ずつ選ばれる)および補正対象画素の周辺に存在する周辺画素に対して補正に対する寄与度となる重みを決定する。画像補正部34は、決定された重みに基づいて加重平均により補正対象画素の視差を補正する。
【0016】
次に、
図2の処理について説明する。演算回路3は、
図2の処理において、まずステップ105で、右カメラ1によって撮影された右カメラ画像(第1の画像の一例に相当する)と、左カメラ2によって撮影された左カメラ画像(第2の画像の一例に相当する)を取得してメモリ4のRAMに記録する。このステップ105を実行することで、演算回路3が画像取得部31として機能する。
【0017】
続いてステップ110では、このRAM中に記録された右カメラ画像および左カメラ画像を用いて周知のステレオマッチングを行うことで、視差マップを生成する。このステップ110を実行することで、演算回路3が視差マップ生成部32として機能する。
【0018】
このステップ110において、視差は、右カメラ画像および左カメラ画像の双方に含まれる同じ被写体の、右カメラ画像および左カメラ画像横における横方向の画素位置の相違(乖離量)として算出される。
【0019】
ステレオマッチングとしては、周知のブロックマッチング法を採用する。ブロックマッチング法においては、演算回路3は、
図3に示すように、右カメラ画像21中に、注目画素を中心に含む注目ブロック23(例えば縦5画素×横5画素のブロック)を設定し、左カメラ画像22中で、注目ブロック23と同じ被写体が含まれているブロックを探索し、探索の結果見つかったブロックを選び出し、選び出したブロックの中心画素と、当該注目画素とを対応付ける、という一連の処理を、注目画素の位置をラスタスキャンで1画素ずつずらしながら、右カメラ画像21中の全画素が注目画素となるまで、繰り返す。
【0020】
この際、注目ブロック23と同じ被写体が含まれているブロックを探索するため、候補となる比較ブロック24(注目ブロックと同形状かつ同サイズのブロック)を左カメラ画像22中に複数個設け、それら比較ブロック24のうち、周知のSAD(Sum of Absolute Difference)が最も小さくなる比較ブロック(つまり、注目ブロック23と最も相関が高い比較ブロック)を、注目ブロック23と同じ被写体が含まれているブロックとして選び出す。なお、SADとは、2つのブロック(注目ブロックと比較ブロック)内における対応する各画素の輝度差の絶対値の総和である。
【0021】
ここで、上記複数の比較ブロック24は、左カメラ画像22中で、中心画素の画像座標中の上下位置(
図3中の上下位置に相当する)が、右カメラ画像中の注目画素と同じになるブロックのみから選ぶ。つまり、注目ブロック23と同じ被写体が含まれているブロックは、矢印25のように、水平方向に探索する。したがって、注目画素に対応する画素も、注目画素と同じ上下位置において水平に探索される。
【0022】
上述のように、ブロックマッチングによって、右カメラ画像21中の各画素について、左カメラ画像22中で対応する画素が決まる。これに基づき、右カメラ画像21中の各画素について、左カメラ画像22中の対応する画素との視差(横方向の画像座標位置の差)を算出し、算出した視差を、当該右カメラ画像21中の画素に対応する視差として、メモリ4のRAMに記録する。
【0023】
このように、右カメラ画像21中の各画素に対応付けられて記録された視差のデータが視差マップとなる。つまり、視差マップは、右カメラ画像21中の各画素の座標に、当該画素に写された被写体の視差が対応付けられたデータである。
【0024】
ステップ110に続いては、ステップ115〜150の処理を、視差マップの画素の数だけ繰り返す。繰り返しの各回におけるステップ115では、その回における補正対象画素および複数の周辺画素を新たに設定する。
【0025】
図4に示すように、複数の周辺画素は、補正対象画素41を中心とする縦9ドット×横9ドットのブロック領域40を設定し、そのブロック領域40内の全画素から補正対象画素41を除外した残りの画素である。なお、ブロック領域40のサイズおよび形状は適宜変更してもよい。
【0026】
続くステップ120、125、130、135では、補正対象画素41および周辺画素のそれぞれに対して各種重み設定を行う。設定された重みは、後述するステップ145で補正対象画素41の視差を加重平均で補正する際に、補正に対する寄与度を表す量として用いられる。
【0027】
まずステップ120では、補正対象画素41および周辺画素のそれぞれに対して第1の重みw
xを設定する。この重みw
xは、重みを算出する対象の画素(補正対象画素41または周辺画素、以下重み算出対象画素という)の補正対象画素41に対する画像座標上の距離に応じて設定される。
図5の矢印41に示すように、右カメラ画像21中のブロック領域40内において、補正対象画素41から遠く離れた位置ほど、その位置の重み算出対象画素と補正対象画素41との画像座標上の距離は長くなる。
【0028】
重み設定は、具体的には、
図5に示すような画像座標(X、Y)上の、補正対象画素41の画素座標値を(x、y)とし、重み算出対象画素の画素座標値を(x’、y’)とすると、
【0029】
【数1】
のようになる。つまり、補正対象画素41と重み算出対象画素との画像座標上の距離が長くなるほど、当該重み算出対象画素の重みw
xを小さくする。なお、σxは、あらかじめ定められた定数である。このようにするのは、補正対象画素41に近い画素ほど、補正対象画素41の視差との関連性が高いと考えられるからである。
【0030】
続くステップ125では、補正対象画素41および周辺画素のそれぞれに対して第2の重みw
Iを設定する。この重みw
Iは、重み算出対象画素と補正対象画素41の輝度値の差(右カメラ画像21における輝度値の差)に応じて設定される。
図7に示すように、補正対象画素41が人の一部を被写体としており、ブロック領域40内において、人が写った領域43の輝度と背景が写った領域44の輝度とが明確に異なっている場合があるが、このような場合は、輝度の違いを利用して、補正対象画素41の視差にあまり関係がない背景の視差については、補正対象画素41の視差補正計算において寄与度を低くする。
【0031】
具体的には、補正対象画素41の(右カメラ画像21における)輝度値をIxyとし、重み算出対象画素の(右カメラ画像21における)輝度値をIx’y’とすると、
【0032】
【数2】
のように算出する。つまり、補正対象画素41の輝度値と重み算出対象画素の輝度値との差が大きくなるほど、当該重み算出対象画素の重みw
Iを小さくする。なお、σ
Iは、あらかじめ定められた定数である。
【0033】
続くステップ130では、補正対象画素41および周辺画素のそれぞれに対して第3の重みw
Zを設定する。この重みw
Zは、重み算出対象画素と補正対象画素41の3次元座標変換時の奥行き方向の位置の差に応じて設定される。
図7に示すように、補正対象画素41が人の一部を被写体としており、ブロック領域40内において、人の輝度に近いがカメラ1、2からの距離が大きく異なる被写体45(例えば路面上の白線)がある場合は、そのカメラ1、2からの距離(すなわち、上記奥行き方向の位置)の違いを利用して、補正対象画素41の視差にあまり関係がない被写体45の視差については、補正対象画素41の視差補正計算において寄与度を低くする。
【0034】
具体的には、補正対象画素41の上記奥行き方向の位置をZxyとし、重み算出対象画素の上記奥行き方向の位置をZx’y’とすると、
【0035】
【数3】
のように算出する。つまり、補正対象画素41の奥行き方向の位置(カメラから遠いほど大きくなる)と重み算出対象画素の奥行き方向の位置との差が大きくなるほど、当該重み算出対象画素の重みw
Zを小さくする。なお、σ
Zは、あらかじめ定められた定数である。
【0036】
なお、ある画素の3次元座標変換時の奥行き方向の位置は、その画素の視差(直前のステップ110で算出された視差)に応じて決まる。具体的には、
図8に示すように、2つのカメラ1、2の光軸1a、1b間の距離をbとし、カメラ1のレンズ1bから結増面1cまでの距離(カメラ2のレンズ2bから結増面2cまでの距離と同じ)に相当するレンズ焦点距離をfとし、視差をdとすると、被写体51の奥行き方向の位置Lは、L=b×f/dという式によって得られる。なお、焦点距離fおよび距離bは既知である。
【0037】
従って、2つの画素の奥行き方向の位置の差が大きいときは、2つの画素の視差の差も大きくなるので、補正対象画素41の視差と重み算出対象画素の視差との差が大きくなるほど、当該重み算出対象画素の重みw
Zが小さくなる。
【0038】
続くステップ135では、補正対象画素41および周辺画素のそれぞれに対して第4の重みw
θを設定する。
【0039】
この重みw
θは、重み算出対象画素に存在するエッジ(右カメラ画像21中のエッジ)の勾配に応じて設定される。具体的には、エッジの勾配が水平に近い画素ほど、その画素の重みw
θを小さくするので、
図9に示すように、エッジ46の位置の画素の重みは、エッジ47の位置の画素の重みよりも小さくなる。
【0040】
より具体的には、補正対象画素41のエッジの傾きをθx’y’とすると(ただし、θx’y’は0≦θx’y’<πの間で決められる)、
【0041】
【数4】
のように算出する。ここで、σ
θは、あらかじめ定められた定数である。
【0042】
このようにして第4の重みw
θを算出するのは、エッジが水平に近い重み算出対象画素ほど、ステップ110のステレオマッチングによる視差計算の誤差が高くなる傾向にあるので、補正対象画素41の視差補正計算においてそのような重み算出対象画素の寄与度を低くしたいからである。
【0043】
エッジが水平に近い画素ほどステレオマッチングの誤差が高くなる理由について説明する。本実施形態では、右カメラ画像および左カメラ画像において同じ被写体が写った2つの画素については、水平方向の位置がずれるものの、上下方向の位置がずれないように、あらかじめカメラ1、2の位置および向きが調整されている。
【0044】
また、カメラ1、2の位置および向きの若干のずれを検出するため、演算回路3は、カメラ1、2の設置時に、右カメラ画像および左カメラ画像を用いたキャリブレーションを行い、そのキャリブレーションによって検出したずれを解消するよう、右カメラ画像および左カメラ画像の補正パラメータを決定し、以後のステップ105では毎回、この補正パラメータを用いた補正を、最新の右カメラ画像および左カメラ画像に対して施している。
【0045】
しかしながら、キャリブレーションにも誤差が発生する場合がある。そのような場合には、
図10に示すように、画像座標上において、右カメラ画像中で或る被写体が写った画素61と、左カメラ画像中で同じ被写体が写った画素62とが、同じ水平ライン61上にない(すなわち上下にずれている)場合が生じる。なお、
図10の例では、画素61は右カメラ画像中のエッジ61上にあり、画素62は左カメラ画像中のエッジ62(被写体としてはエッジ61と同じ)上にある。
【0046】
このような場合であっても、ステップ110のステレオマッチングでは、上述の通り、注目画素に対応する画素は、注目画素と同じ上下位置において水平に探索されるので、画素61に真に対応する画素62は、実際には画素61に対応付けられることはない。
【0047】
このような場合、左カメラ画像内で画素61に実際に対応付けられる画素は、ブロックマッチングの性質上、水平ライン63と画素62を通るエッジ65とが交わる位置の画素66となる可能性が高い。その結果、画素61について計算される視差は、視差誤差edを含むものとなってしまう。
【0048】
この視差誤差edは、エッジ61、62の水平ラインを基準とした勾配をθとし、画素61に対する画素62の上下方向のずれを平行化誤差erとすると、画像左上端を原点とする座標系では
ed=er×tan(π/2−θ)
となる(
図10の例ではed、erはマイナスの値を持つ)。つまり、視差誤差edは、0≦θ<πの範囲内では、θ=π/2のとき(すなわち、エッジが水平ラインに対して直交しているとき)最小であり、θ=π/2から離れるほど(すなわち、エッジが水平に近づくほど)大きくなる。
【0049】
なお、右カメラ画像21中でエッジが検出されなかった画素については、重みw
θの値をゼロ(寄与度ゼロ)とする。このようにするのは、エッジが検出されない画素は、エッジが検出された画素に比べて、ステレオマッチングによる視差計算の誤差が高くなる傾向にあるからである。
【0050】
また、右カメラ画像21のエッジ検出は、Sobelフィルタを用いた方法等、周知のものを用いればよい。また、エッジ検出のタイミングは、ステップ105で右カメラ画像21を取得した時点でもよいし、ステップ135の実行開始時点においてブロック領域40に対してエッジ検出を行う方法でもよい。
【0051】
ステップ135に続いては、ステップ140に進み、ステップ120、125、130、135で算出した重みw
x、w
I、w
Z、w
θを統合する。具体的には、今回のブロック領域40中の重み算出対象画素のそれぞれについて、当該画素の重みw
x、w
I、w
Z、w
θの積w
0=w
x×w
I×w
Z×w
θを、最終的な当該画素の重みとする。
【0052】
なお、このような統合方法によれば、最終的な重みw
0は、重みw
x、w
I、w
Z、w
θのうちいずれかがゼロになれば必ずゼロになるので、第4の重みw
θを考慮すれば、重みw
0も、エッジが検出されなかった画素については、ゼロとなる。
【0053】
演算回路3は、上記のようなステップ115〜140を実行することで、重み決定部(33)として機能する。
【0054】
続くステップ145では、ステップ140で統合した重みw
0を用いた加重平均によって、今回の補正対象画素41の視差の補正を行う。演算回路3は、このステップ145を実行することで、視差マップ補整部として機能する。
【0055】
具体的には、直前のステップ110で算出した画像座標値(x’、y’)の画素の視差をdx’y’とし、補正後の画像座標値(x、y)の画素の視差をfxyとすると、fxyは、
【0056】
【数5】
のようになる。なお、この数式中の二重のΣは、今回のブロック領域40中のすべての重み算出対象画素について総和を取ることを意味している。したがっって、ブロック領域40が縦9画素×横9画素の領域の場合、Rは4画素分を表す量に相当する。
【0057】
ステップ150では、対象となる全画素(右カメラ画像21の全画素)が補正対象画素になったか否かを判定し、なっていない場合、ステップ115に戻り、なっている場合、補正後の視差マップをメモリ4のRAMに記録した後、
図2の処理を終了する。
【0058】
このように、ステップ115〜150の処理を右カメラ画像21の画素分実行することで、各画素の視差を補正することができる。
【0059】
なお、このような補正によって得た視差マップは、どのような用途に用いてもよい。例えば、本実施形態に係る視差マップ生成システムが車両に搭載され、車両のフロントガラスの右端付近および左端付近にそれぞれ右カメラ1および左カメラ2が取り付けられ、右カメラ1および左カメラ2は共に車両前方を撮影するようになっている場合は、この視差マップに基づいて、自車両から障害物までの距離を検知するようになっていてもよい。
【0060】
なお、上記実施形態においては、演算回路3の画像取得部31、視差マップ生成部32、重み決定部33、および視差マップ生成部32が、それぞれ、画像取得手段、視差マップ生成手段、重み決定手段、および視差マップ生成手段に対応する。
【0061】
(他の実施形態)
以上、本発明の実施形態について説明したが、本発明の範囲は、上記実施形態のみに限定されるものではなく、本発明の各発明特定事項の機能を実現し得る種々の形態を包含するものである。例えば、以下のような形態も許容される。
【0062】
(1)上記実施形態では、ステップ140で、重みw
x、w
I、w
Z、w
θをすべて掛け合わせた量w
0=w
x×w
I×w
Z×w
θを最終的な重みとして加重平均に用いているが、最終的な重みは必ずしもこのようになっておらずともよい。例えば、w
x、w
I、w
Z、w
θのいずれか1つを最終的な重みとしてもよいし、w
x、w
I、w
Z、w
θのうちどの2つを選んで掛け合わせたものも最終的な重みとしてよい。
【0063】
(2)上記実施形態では、視差マップにおいては、右カメラ画像21の各画素にその画素の視差が対応付けられている。しかし、視差マップにおいては、左カメラ画像22の各画素にその画素の視差が対応付けられていてもよいし、右カメラ画像21と左カメラ画像22と視差とに基づいて仮想的に作成された中間視点の画像の各画素にその画素の視差が対応付けられていてもよい。
【0064】
(3)また、上記の実施形態において、演算回路3がプログラムを実行することで実現している各機能は、それらの機能を有するハードウェア(例えば回路構成をプログラムすることが可能なFPGA)を用いて実現するようになっていてもよい。