(58)【調査した分野】(Int.Cl.,DB名)
【背景技術】
【0002】
近年、2つ1組のカメラからなるステレオカメラを自動車などの移動体に搭載して、該ステレオカメラにて移動体前方等を撮影し、該撮影したステレオ画像から対象物までの距離を測定し、その測定結果に応じて衝突防止のために運転者に警告を行ったり、車間距離維持のためにブレーキ、ステアリングなどの制御を行う運転支援システムが実用化されている。
【0003】
このような運転支援システムでは、2つのカメラからなるステレオカメラで同一対象物を撮影して得られたステレオ画像の一方を基準画像、他方を参照画像として、ブロックマッチングによる対応点探索を行って対応点の位置ずれ量(視差)を検出し、三角測量の原理により対象物までの距離を計算している。
【0004】
図10は、ステレオカメラを利用した距離測定の原理説明図である。ステレオカメラは2つのカメラ11,12を光軸に平行に配置して構成される。ここで、対象物までの距離Zは、カメラ11,12の光軸間の距離(基線長)B、焦点距離f、視差dから、
【0005】
【数1】
として計算される。したがって、基線長Bと焦点距離fが既知ならば、視差dから距離Zを求めることができる。
【0006】
ステレオカメラを利用した距離測定では、距離Zの精度は視差dに依存する。このため、ステレオカメラで撮影して得られたステレオ画像の2つの画像間には、距離に応じて生じる本来の視差以外の位置ずれに依存しないことが理想であるが、現実にはレンズの光学的歪み等による位置ずれが存在する。レンズの光学的な歪み等による位置ずれにより、正しく視差が検出されないと、測距精度が低下し、運転支援システムの信頼性や安全性が損なわれてしまう。
【0007】
そこで、例えば特許文献1では、比較画像の所定領域毎の微小実画角と設計上の理想画角の比を測定して事前に画角修正比テーブルとして保持しておき、ステレオカメラで撮像した基準画像及び比較画像から対応点マッチングにより検出した視差データについて、画角修正比テーブルを用いて補正することで、レンズの歪みや組み付け誤差による影響を軽減し、距離測定精度を向上させることを提案している。
【発明の概要】
【発明が解決しようとする課題】
【0008】
図11は、基準画像用カメラと比較画像用カメラの光学系(レンズ)と被写体の位置関係を示した図である。
図11のように、比較画像用光学系に対して同じ方向で異なる距離にある被写体a,bは、該比較画像用光学系を通して撮像素子(センサ)上でXa’,Xb’に結像されるとき、Xa’=Xb’である。しかし、基準画像用光学系では、被写体a,bは異なった方角から入射するため、それぞれ図中のXa,Xbのように、センサ上で異なった位置に結像される。このように、基準画像用カメラへの結像位置は、比較画像用カメラの結像位置のみからは決定されない。
【0009】
特許文献1の従来技術では、画角修正比テーブルを用いて比較画像の結像位置Xa’,Xb’を補正している。この場合、被写体a,bとも同じずれ補正量が得られる。しかし、視差は基準画像用カメラ及び比較画像用カメラの結像位置の差(例えば、被写体aであればXa’−Xa)により求められることから、基準画像のXaやXbのずれもXa’,Xb’と同様に視差値に影響を与える。
【0010】
特許文献1に記載の従来技術の場合、画角修正比テーブルの作成時に使用したデータ計測用スクリーンの距離と一致しない被写体は、視差が基準画像用光学系の歪み等の影響を受けてしまう。
【0011】
本発明の課題は、ステレオカメラを構成する2つのカメラの視差検出誤差の補正精度を高め、距離測定精度を向上させることにある。
【課題を解決するための手段】
【0012】
本発明は、2つ1組のカメラからなるステレオカメラの視差検出誤差を補正するための補正値を生成するステレオカメラキャリブレーション装置であって、
互いに異なる複数の距離に配置した補正用被写体を読み取ることで設計上取得されるはずの複数の設計視差値
と、該複数の距離に配置した補正用被写体を読み取ることで実際に取得された実視差値とに基づいて、複数の実視差値毎
の各水平座標値に対応する当該実視差値の補正値を生成することを特徴とする。
【0013】
一実施形態に係るステレオカメラキャリブレーション装置では、
前記複数の設計視差値に対応づけて、
前記ステレオカメラと
前記補正用被写体との距離を複数設定する手段と、前記設定された
複数の距離で、前記ステレオカメラにより前記補正用被写体を撮影して取得されたステレオ画像から、
該複数の距離毎の各水平座標値
に対応する実視差値を検出する手段と、前記検出された実視差値をもとに、
前記複数の
距離に対応した設計視差値毎
の各水平座標値に対応する
設計視差値と実視差値
との関係を示す実視差測定値テーブルを生成する手段と、前記実視差値測定値テーブルから、
前記複数の
距離に対応した設計視差値に対応す
る実視差値毎
の各水平座標値に対応する当該実視差値の補正値を示す視差補正テーブルを生成する手段とを有する。
【発明の効果】
【0014】
本発明によれば、被写体とステレオカメラの距離及び水平座標値毎に実視差値を検出して補正量を算出するので、ステレオカメラの視差検出誤差の補正精度を高め、距離測定精度を向上させることができる。
【発明を実施するための形態】
【0016】
以下、図面を参照して本発明の実施の形態について説明する。なお、実施理形態では、取り得る視差値の範囲は0〜64とするが、勿論、これに限らない。
【0017】
<キャリブレーション>
図1は、本実施形態に係るキャリブレーション装置の全体機能ブロック図である。本キャリブレーション装置は、補正用被写体としてのキャリブレーション用チャート100、左カメラ11と右カメラ12からなるステレオカメラ10、ステレオカメラ10で撮影されたステレオ画像の視差を検出する視差検出部20、設計上の視差値(設計視差値)と実測された視差値(実視差値)の対応を示す実視差測定値テーブル42を生成する実視差測定値テーブル生成部30、生成された実現差測定値テーブル42を一時的に記憶するメモリ(1)40、実視差測定値テーブル42から、ステレオカメラカメラ10が実際に被写体を撮影して得られた視差値を補正するための視差補正テーブル62を生成する視差補正テーブル生成部50、生成された視差補正テーブル62を最終的に記憶するメモリ(2)60、全体の動作を制御する制御部90、及び、ステレオカメラ10とキャリブレーション用チャート100との距離を制御する距離制御機構95などで構成される。
【0018】
ここで、
図1中のステレオカメラ10、距離制御機構95及びキャリブレーション用チャート100を除く各部は、一般にコンピュータ装置で構成される。すなわち、視差検出部20、実視差測定値テーブル生成部30、視差補正テーブル生成部50及び制御部90は、CPUとプログラム等に基づいて各処理機能が実現される。メモリ(1)40はRAM等の揮発性メモリであり、これには実視差測定値テーブル42のほかに、CPUでの処理途中のデータ等も格納される。また、メモリ(2)60は、EPROM,EPPROM等の不揮発性メモリであり、これには視差補正テーブル62のほかに、CPUで実行されるプログラム、該CPUでの処理に必要なパラメータ等も格納される。
【0019】
図2は、キャリブレーション時、ステレオカメラ10とキャリブレーション用チャート100との距離を設定する様子を説明する図である。
図2に示すように、本実施形態では、キャリブレーション時、設計上の視差値をdとして、dを64,63,・・・,i,・・・と変化させて、ステレオカメラ10とキャリブレーション用チャート100の距離ZをBf/64,Bf/63,・・・,Bf/i,・・・と順次切り替えて設定し、各距離毎に、ステレオカメラ10で撮影されたキャリブレーション用チャート100の画像の水平座標値(水平画素位置)毎の視差を実測する。そして、水平座標値毎、設計上の視差値(設計視差値)と実測された視差値(実視差値)の対応を示す実視差測定値テーブル42を生成し、この実視差測定値テーブル42をもとに、ステレオカメラ10が実際に被写体を撮影して得られた視差値を補正するための視差補正テーブル62を生成する。
【0020】
図3は実視差測定値テーブル42の構成例を示した図である。
図3に示すように、実視差測定値テーブル42は、設計値の視差(設計視差値)dと撮像画像のx座標(水平座標値x)の二次元テーブルである。キャリブリレーションで実測された視差値(実視差値)は、二次元配列m(x,d)で表わす。ここで、m(1,64),m(2,64),・・・は、設計視差値d=64として、ステレオカメラ10とキャリブレーション用チャート100の距離Z=Bf/64とした時に、水平座標値xが1,2,・・・の位置での実視差値を示している。同様に、m(1,i),m(2,i),・・・は、設計視差値d=iとして、ステレオカメラ10とキャリブレーション用チャート100の距離Z=Bf/iとした時に、座標値xが1,2,・・・の位置での実視差値を示している。
【0021】
図4は視差補正テーブル62の構成例を示した図である。
図4に示すように、視差補正テーブル62は、実視差値d’と撮像画像のx座標(水平座標値x)の二次元テーブルである。ステレオカメラ10で実際に被写体を撮影して得られた視差値(実視差値)を補正する際に必要とする補正値(視差補正量)は二次元配列Δd(x,d’)で表わす。ここで、Δd(1,64),Δd(2,64),・・・は、実視差値d’=64で、水平座標値xが1,2,・・・での各位置における設計上の視差値との差を示している。同様に、Δd(1,i),Δd(2,i),・・・は、実視差値d’=iで、水平座標値xが1,2,・・・での各位置における設計上の視差値との差を示している。したがって、水平座標値に応じ、実視差値からΔdだけ引けば、距離に応じて生じる本来の視差が得られる。
【0022】
図1に戻り、本キャリブレーション装置の動作を詳しく説明する。動作は、
図3の実視差測定値テーブル42の生成処理と
図4の視差補正テーブル62の生成処理に大別される。
【0023】
初めに、実視差測定値テーブル42の生成処理について詳述する。
図5は、実視差測定値テーブル生成の処理フローチャートである。
【0024】
制御部90は、まず、設計上の視差値(設定視差値)dを取り得る最大値dmax(ここでは、dmax=64)に設定し(ステップ101)、ステレオカメラ10とキャリブレーション用チャート100の距離Zを計算する(ステップ102)。先に述べたように、距離Zは、Z=Bf/dとして計算される。Bはステレオカメラ10を構成するカメラ11,12の基線長、fは焦点距離である。
【0025】
制御部90は、設計上の視差値(設計視差値)dを実視差測定値テーブル生成部30に送り、また、計算した距離値Zを距離制御機構95に送る。
【0026】
距離制御機構95は、制御部90からの距離値Zに基づき、ステレオカメラ10までの距離がZになるようにキャリブレーション用チャート100を移動する(ステップ103)。これは、例えば、次のようにして実施する。キャリブレーション用チャート100にレーザ距離計を取り付けて、該レーザ距離計でキャリブレーション用チャート100とステレオカメラ10の距離を測定する。距離制御機構95が、レーザ距離計から測距値を受け取り、該測距値が制御部90から送られた距離値Zと一致するように、キャリブレーション用チャート100を駆動する。なお、キャリブレーション用チャート100を移動する台車などにエンコーダを取り付けて、該エンコーダでキャリブレーション用チャート100とステレオカメラ10の距離を測定することでもよい。
【0027】
ステレオカメラ10とキャリブレーション用チャート100の距離Zが設定されると、制御部90はステレオカメラ10に撮影開始を指示する。ステレオカメラ10の左カメラ11と右カメラ12は、両者の光軸が平行に所定の間隔(基線長)を置いて配置されている。これら左カメラ11と右カメラ12は、互いに同期して動作して、それぞれ異なる視点から補正用被写体のキャリブレーション用チャート100を撮影し、その光学像をアナログ電気信号に変換し、更にデジタル信号に変換して画像データを出力する(ステップ104)。画像データは、例えば8ビット/画素からなる。
【0028】
視差検出部20は、左カメラ11と右カメラ12からそれぞれ出力される画像データ(ステレオ画像データ)を入力し、以下のようにして、画像の水平座標値毎(水平画素毎)の視差(実視差値)を検出する。なお、ここでは左カメラ11の画像データを基準画像、右カメラ12の画像データを比較画像とするが、この逆でもよい。
【0029】
視差検出部20は、まず、基準画像(左カメラ11の画像データ)の水平座標値xを最小位置xminに設定する(ステップ105)。そして、視差検出部20は、基準画像の水平座標値x(ここではx=xmin)に対応する比較画像(右カメラ12の画像データ)上の対応点(対応点水平座標値)x’を探索し(ステップ106)、対応点が見つかったならば、両者の差(x−x’)、すなわち、視差(実視差値)d’を算出する(ステップ107)。対応点探索には、周知のブロックマッチング手法を利用する。
【0030】
視差検出部20は、水平座標値x、及び、算出された視差(実視差値)d’を実視差測定値テーブル生成部30に送る。実視差測定値テーブル生成部30には、制御部90から設計視差値d(ここでは、d=64)が送られている。実視差測定値テーブル生成部30は、メモリ(1)40の実視差測定値テーブル42内のカラムがd(ここでは64)で、ローがx(ここでは、x=xmin)の記憶領域に実視差値d’を書き込む(ステップ108)。すなわち、m(x,d)=d’とする。なお、メモリ(1)40内の実視差測定値テーブル42は、最初は空である。
【0031】
次に、視差検出部20は、基準画像(左カメラ11の画像データ)の水平座標値xを(x+1)とする(ステップ109)。そして、該水平座標値xが最大値xmaxを超えるか判定し(ステップ110)、超えなければ、ステップ106に戻る。
【0032】
以下、水平座標値xが最大値xmaxになるまで、ステップ106〜109の処理を繰り返すことで、メモリ(1)40の実視差測定値テーブル42内に、設計視差値d(ここでは、d=64)に対応する水平座標値xmin,・・・,xmax毎の実視差値d’が書き込まれる。
【0033】
水平座標値xが最大値xmaxを超えたならば、制御部90は、設計視差値dを(d−1)とする(ステップ111)。すなわち、d=63とする。そして、該設計視差値dが最小値dmin未満になるか判定し(ステップ112)、最小値dmin以上の場合には、ステップ102に戻る。
【0034】
以下、設計視差値dが最小値dminになるまで、ステップ102〜111の処理を繰り返すことで、メモリ(1)40の実視差測定値テーブル42内の、設計視差値dが64,63,・・・,i・・・毎に、水平座標値xがxmin,・・・,xmax毎の実視差値d’(d’=m(x,d))が書き込まれる。すなわち、
図3に示す実視差測定値テーブル42が生成される。
【0035】
次に、視差補正テーブル62の生成処理について詳述する。視差補正テーブル62は、実視差測定値テーブル52から補間処理により生成する。
【0036】
図6は、設計視差dと実視差d’の座標系を想定し、キャリブレーションによって得られた実視差測定値テーブル52について、ある水平座標値xにおける実視差値d’(d’=m(x,d))をプロットした様子を示している。
図6により、ある水平座標値xにおける実視差値iに対する補正値(視差補正量)Δd(x,i)は、
【0037】
【数2】
として算出される。ここで、i=0〜64である。
【0038】
図7は、視差補正テーブル生成の処理フローチャートである。これは、制御部90の制御下でもって、視差補正テーブル生成部50で実施される。
【0039】
視差補正テーブル生成部50は、まず、水平座標値xを最小水平座標値xminに設定し(ステップ201)、実視差値d’を取り得る最小実視差値d’minに設定する(ステップ202)。そして、iを0に初期設定する(ステップ203)。
【0040】
視差補正テーブル生成部50は、メモリ(1)40内の実視差測定値テーブル42について、
m(x,i)<d’ かつ d’≦m(x,i+1)
の条件を満足する実視差値m(x,i)とm(x,x+1)の組があるか調べる(ステップ204)。なければ、iをi+1として(ステップ205)、ステップ204に戻る。
【0041】
視差補正テーブル生成部50は、上記条件を満足する実視差値m(x,i)とm(x,i+1)の組が見つかれば、先の(2)式により、補正値Δd(x,i)を計算する(ステップ206)。そして、視差補正テーブル生成部50は、メモリ(2)60の視差補正テーブル62内のカラムがd’(ここでは、d’=d’min)で、ローがx(ここでは、x=xmin)の記憶領域に、算出された補正値Δd(x,i)を書き込む。なお、メモリ(2)60内の視差補正テーブル62は、最初は空である。
【0042】
次に、視差補正テーブル生成部50は、実視差値d’を(d’+1)とする(ステップ207)。そして、該実視差値d’が取り得る最大実視差値d’max(ここでは、d’max=64)を超えるか判定し(ステップ208)、超えなければ、ステップ203に戻る。
【0043】
以下、視差補正テーブル生成部50が、実視差値d’が最大視差値d’maxになるまで、ステップ203〜207の処理を繰り返すことで、メモリ(2)60の視差補正テーブル62内に、水平座標値x(ここでは、x=xmin)に対応する実視差値d’がd’min,・・・,i,・・・,d’max(64)ごとの補正値(視差補正量)Δdが書き込まれる。
【0044】
実視差値d’が最大視差値d’max(ここでは、d’max=64)を超えたならば、視差補正テーブル生成部50は、水平座標値xを(x+1)とする(ステップ209)。そして、該水平座標値xが最大水平座標値xmaxを超えるか判定し(ステップ210)、超えなければ、ステップ202に戻る。
【0045】
以下、視差補正テーブル生成部50が、水平座標値xが最大水平座標値xmaxになるまで、ステップ202〜209の処理を繰り返すことで、メモリ(2)60の視差補正テーブル62内に、水平座標位置xがxmin,・・・,xmaxに対応して、実視差値d’がd’min,・・・,i,・・・,63,64毎の補正値(視差補正量)Δd(x,i)が書き込まれる。すなわち、
図4に示す視差補正テーブル62が完成する。
【0046】
なお、ここでは、不揮発性メモリであるメモリ(2)60内に直接、視差補正テーブル62を生成するとしたが、揮発性メモリであるメモリ(1)40あるいはその他の作業用メモリを利用して視差補正テーブルを生成し、該生成した視差補正テーブルをメモリ(2)60に転送して、最終的にメモリ(2)60内に視差補正テーブル62を保持することでもよい。
【0047】
<距離測定>
図8は、本実施形態に係るステレオカメラを用いた距離測定装置の機能ブロック図である。本距離測定装置は、左カメラ11と右カメラ12からなるステレオカメラ10、ステレオカメラ10で撮影された被写体のステレオ画像の視差を検出する視差検出部20、先のキャリブレーションで生成された視差補正テーブル62を保持するメモリ(2)60、該メモリ(2)60に保持された視差補正テーブル62を用いて視差を補正する視差補正部70、補正された視差を用いて被写体までの距離を算出する距離計算部80などで構成される。なお、
図1で示した全体の動作を制御する制御部90も備えるが、
図8では省略してある。
【0048】
実際には、
図8の距離測定装置は、
図1のキャリブレーション装置と一体的に構成され、距離制御機構95を除いて自動車などの移動体に搭載して使用される。すなわち、
図8でステレオカメラ10以外は、その実態はコンピュータ装置であり、視差検出部20、視差補正部70、距離計算部80は、先の実視差測定値テーブル生成部30や視差補正テーブル生成部50などと共に、CPUとプログラム等に基づいて各処理機能が実現される。制御部90は、キャリブレーション時は視差検出部20、実視差測定値テーブル生成部30、視差補正テーブル生成部50の各処理モジュールを動作させるが、実際の被写体(前方車両等)との距離測定時は視差検出部20、視差補正部70及び距離計算部80の各処理モジュールを動作させる。
【0049】
図9は、本実施形態に係る距離測定装置の処理フローチャートである。
ステレオカメラ10の左カメラ11と右カメラ12は、互いに同期して動作して、被写体(前方車両等)を撮影する(ステップ301)。そして、左カメラ11と右カメラ12は、それぞれ被写体の光学像をアナログ電気信号に変換し、更にデジタル信号に変換して画像データとして出力する。画像データは、例えば8ビット/画素からなる。
【0050】
視差検出部20は、ステレオカメラ10の左カメラ11と右カメラ12からそれぞれ出力される画像データを入力し、被写体までの距離に応じて生じる視差を検出する。視差検出の手法は、先の被写体がキャリブレーション用チャート100の場合と基本的に同様である。すなわち、視差検出部20は、例えば左カメラ11の画像データを基準画像、左カメラ11の画像データを比較画像として、基準画像の水平位置(水平座標値)xに対する比較画像上の対応点x’を探索し(ステップ302)、見つかった対応点の差(x’−x)を算出して視差(視差値)d’とする(ステップ303)。対応点探索には、周知のブロックマッチング手法を利用する。
【0051】
視差検出部20は、水平座標値x、及び、算出された視差値d’を視差補正部70に送る。
【0052】
視差補正部70は、視差検出部20から送られた水平座標値xと視差値d’をもとに、メモリ(2)60の視差補正テーブル62(
図6)から補正値Δdを取得し、視差値d’を補正して、距離に応じて生じる本来の理想的な視差dを求める(ステップ304)。すなわち、d=d’−Δdを計算する。
【0053】
ここで、実際の被写体を撮影して得られたステレオ画像から求まる視差値d’は、必ずしも整数64,63,・・・になるとは限らない。むしろ、整数でない場合が普通である。この場合には、線形補完等を行って補正値Δdを求めればよい。すなわち、視差補正テーブル62(
図4)から、i<d’かつd’<i+1の一組の補正値Δd(x,i)とΔd(x,i+1)を取得し、これら補正値を線形補完演算して補正値Δdを求める。
【0054】
視差補正部70は、補正後の視差値dを距離計算部80に送る。距離計算部80は、視差補正部70から送られた視差値dを用いて、被写体までの距離Zを計算する(ステップ305)。距離Zは、Z=Bf/dとして計算される。
【0055】
本距離測定装置で求まった距離Zは、図示しない車両走行制御ユニットに送られ、該距離に基づいてハンドルやブレーキの制御、あるいは運転者への警告等が行われる。
【0056】
<発展例>
実施形態では、視差補正テーブルを水平座標値x、実視差値d’の2次元テーブルとしたが、視差オフセットは垂直位置によっても変化する場合がある。例えば、樽型歪みを持ったレンズであれば、歪みは、水平座標値xと垂直座標値yによって変化する。そこで、視差補正テーブルを水平座標値x、垂直座標値y、実視差値d’の3次元テーブルとする。そのためには、実視差測定値テーブルの生成時、取り得るdmin≦d<dmaxに対応する各距離Zについて、xmin≦x<xmax毎,ymin≦y<ymax毎のm(x,y,d)を計算すればよい。視差補正テーブルを3次元テーブルとすることで、y方向(垂直位置)の視差オフセットについても視差を補正でき、測距精度が向上する。