以下、図面を参照しながら本発明の実施形態について説明する。まず、撮影装置の実施形態としてステレオカメラ10と、ステレオカメラ10を備える車両500を例に用いて説明する。図1に示すようにステレオカメラ10は、筐体110から1対の撮影レンズ12a,12bが外部に露出している。ステレオカメラ10は、図2に示すように車両500のフロントガラス511の内側(車室側)の上部に取り付けられる。具体的には、車両500のインナーリアビューミラー520の設置位置付近に取り付けられる。なお、ステレオカメラ10の取付位置は、上記の位置に限るものではなく、車両500の進行方向の前方の状況を認識するための情報を取得できる位置であればよい。本実施形態において、車両500の幅方向(紙面左右方向)を車幅方向、紙面を貫く方向を車両進行方向とする。
ステレオカメラ10は、測定対象との距離が変化する機器に設置される。ステレオカメラ10を設置する機器は、本実施形態のような車両500に限定されるものではない。例えば、船舶や鉄道等の移動体などに設置することもできる。また、FA(Factory Automation)に用いることもでき、この場合に建物などの固定物にステレオカメラ10を設置すればよい。ステレオカメラ10は、後述するように撮影した被写体を含む画像データから被写体(測定対象)までの距離を求める(距離情報を取得する)。ステレオカメラ10の測定対象は、他の移動体や人物や動物などである。
次に、機器制御システムの実施形態である車両制御システム300について説明する。図3に示すように、ステレオカメラ10は、車両500の進行方向を撮影できるように設置される。そのため、撮影レンズ12a、12bは所定の方向に向けられている。車両制御システム300は、ステレオカメラ10と連動して、車両500の進行方向に存在する物体(認識対象)を撮影する。
車両制御システム300は、ステレオカメラ10と、制御装置301と、ステアリングホイール302と、ブレーキペダル303と、を備えている。
ステレオカメラ10は、図4に示すように2つの単体カメラを有している。2つの単体カメラとは、第1カメラ1と第2カメラ2である。第1カメラ1とは、例えば、撮影レンズ12aに対応する撮影素子を備える単体カメラである。第2カメラ2とは、例えば、撮影レンズ12bに対応する撮影素子を備える単体カメラである。また、ステレオカメラ10は、制御部3、主記憶部4、補助記憶部5、通信I/F部6、を有している。第1カメラ1と第2カメラ2、制御部3、主記憶部4、補助記憶部5、通信I/F部6は、バス7を介して互いに接続されている。
ここで、ステレオカメラ10と車両制御システム300との関係について説明する。図3に示す車両制御システム300の制御装置301は、ステレオカメラ10から受信した視差画像115に基づいて算出される情報により、車両500の各種の制御を実行する。なお、視差画像115の説明は後述する。
制御装置301において実行される制御は、例えば、ステレオカメラ10から受信した視差画像115に基づき算出される物体までの距離に応じて、ステアリングホイール302を含むステアリング系統(制御対象)を動作させる制御である。このステアリング制御によって、車両500の進行方向に存在する物体(障害物)を回避するように車両500を動作させることができる。また、ステレオカメラ10から受信した視差画像115に基づき算出される物体までの距離に応じて、ブレーキペダル303を含むブレーキ系統(制御対象)を動作せる制御である。このブレーキ制御により、車両500を自動的に減速または停止させることができる。以上例示したように、車両制御システム300は、車両500のステアリング制御やブレーキ制御をステレオカメラ10から受信した視差画像115に基づいて実行させることができる。これによって、車両500の運転時の安全性を向上させることができる。
なお、上記の説明では、ステレオカメラ10の撮影対象を車両500の前方にしたが、これに限定されるものではない。すなわち、車両500にステレオカメラ10を設置するときに、車両500の後方または側方を撮影するように設置してもよい。この場合、ステレオカメラ10は、車両500の後方の後続車、または側方を並進する他の車両等の距離を検出することができる。そして、制御装置301は、車両500の車線変更時または車線合流時等における危険を検知して、上記の制御を実行することができる。
また、制御装置301は、車両500の駐車時等におけるバック動作において、ステレオカメラ10によって検出された車両500の後方の障害物の視差画像115に基づいて、衝突の危険があると判断した場合に、上記の制御を実行することができる。
図4に戻る。制御部3は、補助記憶部5から主記憶部4に読み出されたプログラム100を実行するCPUである。主記憶部4は、不揮発性記憶部であるROM(Read Only Memory)や揮発性記憶部であるRAM(Random Access Memory)等を備える記憶部である。補助記憶部5は、メモリカード等である。通信I/F部6は、ネットワークを介して、他の装置と通信するためのインタフェースである。
ステレオカメラ10において実行されるプログラム100は、主記憶部4に含まれるROMに予め組み込まれているものとする。プログラム100の詳細な説明は後述する。
なお、プログラム100は、上記のように予め主記憶部4に組み込まれる「組み込みタイプ」以外のものでもよい。例えば、プログラム100をステレオカメラ10に対して後にインストールできる形式にして、コンピュータで読み取り可能な記録媒体に記録されてコンピュータ・プログラム・プロダクトとして提供してもよい。コンピュータで読み取り可能な記録媒体とは、例えば、CD−ROM、メモリカード、CD−R、DVD(Digital Versatile Disk)等である。
また、プログラム100をインターネット等のネットワークに接続されたコンピュータ上に格納し、ステレオカメラ10にプログラム100をネットワーク経由でダウンロードさせて、これをインストールする方式で提供するように構成してもよい。
ステレオカメラ10の場合、制御部3がROMからプログラム100を読み出して実行することで、後述する各機能を実行することができる。
なお、各機能の一部、又は全部を、ソフトウェアにより実現せずに、IC(Integrated Circuit)等のハードウェアにより実現してもよい。なお、本実施形態のステレオカメラ10では、2つの単体カメラを備えるものを例にしている。しかしながら、撮影部の数は2つに限られず、1以上の撮影部であればよい。例えば、1の撮影部を備える単眼カメラにおいても同様の構成とすることができる。
ここで、ステレオカメラ10を用いた距離の計測原理について説明する。図5は、ステレオカメラ10が有する第1カメラ1および第2カメラ2の配置と、第1カメラ1および第2カメラ2によって撮影される被写体Aとの関係を示す図である。図5において、第1カメラ1と第2カメラ2の並び方向をX軸方向、X軸方向に直交し被写体Aのある方向すなわち第1カメラ1と第2カメラ2の光軸方向をZ軸方向、X軸方向とZ軸方向に直交する方向をY軸方向として表している。
第1カメラ1の焦点距離をf、光学中心をO0、第1カメラ1が備える撮影素子において被写体Aの像が結像する撮影面をS0とする。同様に、第2カメラ2の焦点距離をf、光学中心をO1、第2カメラ2が備える撮影素子において被写体Aの像が結像する撮影面をS1とする。撮影面S0と撮影面S1は、それぞれ、Z軸方向を向いていて、第1カメラ1と第2カメラ2の光軸方向に直交している。また、第1カメラ1と第2カメラ2は、X軸方向に基線長Bだけ離れた位置に配置されている。
第1カメラ1の光学中心O0からZ軸方向に距離dだけ離れた位置にある被写体Aの像は、直線A−O0と撮影面S0の交点である位置P0に結ばれる。一方、同じ被写体Aの像が第2カメラ2の撮影面S1では、位置P1に結ばれる。
ここで、第2カメラ2の光学中心O1を通る直線であって直線A−O0と平行な直線と撮影面S1との交点を位置P0’とする。また、位置P0’と位置P1の差を視差pとする。視差pは、同じ被写体Aを第1カメラ1と第2カメラ2で撮影したときの各画像における被写体Aの結像位置のずれ量に相当する。以下において、この結像位置のずれ量を視差pと表記する。
図5に示すように、上記の条件において規定される三角形A−O0−O1と、三角形O1−P0’−P1は相似形である。したがって、被写体Aまでの距離dはB×f/pという式によって得ることができる。以上のとおり、ステレオカメラ10を用いて被写体Aまでの距離dを算出するには、第1カメラ1と第2カメラ2の乖離距離である基線長Bと、各カメラの焦点距離fと、被写体Aの結像位置のずれ量である視差pを明らかにすればよい。
次に、本実施形態に係るステレオカメラ10が備える画像処理装置11について図を用いて説明する。図6に示すようにステレオカメラ10は、第1撮影部101と、第2撮影部102と、画像処理装置11と、記憶部103と、を有してなる。図6は、ステレオカメラ10の機能ブロック図である。画像処理装置11は、すでに説明をしたステレオカメラ10のハードウェア資源(図4参照)を使用して実行するプログラム100により実現される。
ステレオカメラ10が有する画像処理装置11は、更新部104と、補正部106と、視差算出部107と、認識部108と、追跡部109と、を有してなる。画像処理装置11の各機能ブロックは、すでに説明をしたステレオカメラ10のハードウェア資源(図4参照)を使用して実行されるプログラム100により実現される。なお、視差算出部107や、認識部108、追跡部109は、画像処理装置11とは分離して、ステレオカメラ10とは異なる別のハードウェア上で実行されてもよい。
認識部108は、第1撮影部101および第2撮影部102において取得された画像中の物体を認識する認識処理を実行する。認識処理としては、テンプレートマッチングやHog特徴量の利用等による公知の処理方法を利用できる。
追跡部109は、第1撮影部101および第2撮影部102において取得された画像中の前フレームにおいて認識された物体を現フレームにおいて特定する追跡処理を実行する。追跡処理としては、オプティカルフローを用いる等の公知の処理方法を利用できる。
第1撮影部101は、第1カメラ1の撮影動作の制御と、第1カメラ1の撮影素子から出力される信号に基づいて第1撮影画像を生成する処理を実行する。第2撮影部102は、第2カメラ2の撮影動作の制御と、第2カメラ2の撮影素子から出力される信号に基づいて第2撮影画像を生成する処理を実行する。第1撮影部101と第2撮影部102によって、第1カメラ1と第2カメラ2は互いの撮影タイミングを同期して撮影することができる。したがって、第1撮影画像と第2撮影画像は、同じ方向を同時に撮影して得られた画像である。
第1撮影画像と第2撮影画像は、記憶部103によって主記憶部4に含まれるRAMに撮影画像111として記憶される。以下の説明において、第1撮影画像と第2撮影画像を区別しないときは、単に、撮影画像111と表記する。
記憶部103は、第1撮影部101、第2撮影部102、更新部104、補正部106、視差算出部107、からの各種情報を主記憶部4に含まれるRAMまたはROMへ記憶・保存する処理を実行する。また、記憶部103は、RAMまたはROMに記憶・保存されている各種情報を読み出す処理を実行する。記憶部103によってRAMまたはROMに記憶される各種情報は、図3に示すように、撮影画像111、補正パラメータ112、補正画像114、視差画像115などである。
更新部104は、RAMまたはROMに記憶されている撮影画像111を読み出し、この撮影画像111に基づいて、補正パラメータ112を生成する処理を実行する。また、更新部104は、生成された補正パラメータ112をRAMまたはROMに記憶する。
補正パラメータ112は、第1カメラ1および第2カメラ2の経時的な位置ずれに起因する第1撮影画像と第2撮影画像の座標のずれを補正するためのパラメータである。更新部104は定期的に補正パラメータ112を生成する。生成された補正パラメータ112は、更新部104によりRAMまたはROMに記憶される。補正パラメータ112が生成されたとき、すでにRAMに補正パラメータ112が記憶されているときは、更新部104が新たに生成された補正パラメータ112を用いて古い補正パラメータ112を上書きする。この上書き処理を「補正パラメータ112の更新」という。
なお、補正パラメータ112の更新処理を実行する前に、一旦、新たに生成された補正パラメータ112をROMに書き込んで記憶するように処理すれば、更新処理の前段でステレオカメラ10の電源がオフになったとしても、最新の補正パラメータ112を保護することができる。この場合、ステレオカメラ10の電源がオンになったとき、ROMに補正パラメータ112が記憶されていれば、この最新の補正パラメータ112を用いてRAMを初期化すればよい。
なお、補正パラメータ112の更新は、種々の方法のうち、適宜選択して用いればよい。例えば、補正パラメータ112を、変換前の座標と変換後の座標の組から、最小二乗法等によって近似することにより更新してもよい。
補正部106は、記憶部103によってRAMから補正パラメータ112を読み出し、これを用いて撮影画像111に対する補正処理を実行する。この補正処理によって撮影画像111から補正画像114が生成される。生成された補正画像114は、記憶部103によってRAMに記憶される。
ここで、補正部106において実行される補正処理について説明する。RAMに記憶されている撮影画像111は、すでに述べたとおり、第1撮影画像と第2撮影画像である。補正パラメータ112は、第1カメラ1および第2カメラ2の経時的な位置ずれに起因する第1撮影画像と第2撮影画像の座標のずれを補正する補正式に用いられる補正係数である。例えば、補正パラメータ112を用いる補正式は以下の式(1)のようになる。
式(1)
x’=a0+a1x+a2y+a3x2+a4xy+a5y2
y’=b0+b1x+b2y+b3x2+b4xy+b5y2
上記の補正式において、xとyは変換元の座標であって、x’とy’は変換後の座標である。補正パラメータ112は、a0〜a5及びb0〜b5である。すなわち、記憶部103によってRAMには、このa0〜a5及びb0〜b5が記憶されている。
なお、上記の補正式において、補正後の画像である補正画像114の座標をxとyとし、補正前の画像である撮影画像111の座標をx’とy’として補正処理を実行してもよい。すなわち、上記の補正式を用いた補正処理では、座標変換後の座標を基準にしてもよいし、座標変換前の座標を基準にしてもよい。また、補正パラメータ112は、上記の多項式の係数だけでなく、ルックアップテーブルのようなものでもよい。例えば、画素あるいは画素群ごとに補正値(x方向の画素ずれ量とy方向の画素ずれ量)を記憶しておき、それらを補正パラメータ112としてもよい。なお、多項式を用いる方が、記憶する補正パラメータ112の量を削減できるので好ましい。
以上のとおり、記憶部103によって主記憶部4のRAMに記憶される補正画像114は、補正部106によって、上記の式(1)と補正パラメータ112を用いた補正処理を撮影画像111に対して行って得られた画像である。
ここで、補正部106において実行される撮影画像111の座標のずれの補正について図7を用いてさらに説明する。補正部106において実行される座標のずれの補正は、座標変換処理である。補正部106は、すでに説明をした補正式と補正パラメータ112を用いて、補正後画像である補正画像114の座標と補正前画像である撮影画像111の座標を変換する処理を実行する。
なお、補正画像114の画素値を決定するために、補正式により対応する撮影画像111の画素値を参照する。このとき、変換後の座標の値が整数にならないことがある。
そこで補正部106は、図7において点線で示すように、座標の値が整数にならない座標の画素値を撮影画像111上の周囲の画素値から補間する画素値補間処理を実行する。
補正部106は、例えば、双1次補間すなわちバイリニア補間により画素値補間処理を行う。補正部106は、全画素について、上記の補正式による座標変換と画素値補間処理とを実行し、撮影画像111の幾何補正を行って補正画像114を生成する。
図6に戻る。視差算出部107は、補正された撮影画像111である補正画像114を用いて、すでに説明をした測距原理に基づいて視差pを算出する処理を実行する。また、視差算出部107は、視差pを用いて、撮影画像111の座標の視差情報を含む視差画像115を生成する。生成された視差画像115は、記憶部103によってRAMに記憶される。
視差算出部107における視差算出方法は、周知の平行等位ステレオカメラにおける視差算出方法と同である。例えば、第1撮影画像を基準画像にした場合、第1撮影画像から抽出される特徴点周辺の画像領域と、比較対象の画像となる第2撮影画像上の対象候補となる画像領域を、1画素単位でずらしながら、両画像領域の相関の指標となる値を算出する。相関の指標となる値は、例えば、両画像領域内の画素の輝度値の総和を比較した値である。また、相関の指標となる値としてSAD(Sum of Absolute Difference)やNCC(Normalized Cross Correlation)が利用できる。算出された値の最大値付近を、放物線などを用いて補完することにより、画素単位以下の精度で視差pを算出する。
なお、1画素以下の視差pは信頼性が低くなるため、視差算出部107は1画素以下の視差pは1画素に切り上げる。すなわち、ステレオカメラ10における最小の視差画素は1画素になる。
ステレオカメラ10において、上記のプログラム100が有する各部の処理は、周期的に実行される。これによって、撮影画像111の撮影、補正パラメータ112の算出と更新、補正画像114の生成と記憶、視差画像115の生成と記憶は、周期的に繰り返し実行される。すなわち、ステレオカメラ10において、視差画像115は繰り返し生成されて、主記憶部4に含まれるRAMに記憶される。
すでに説明したとおり、ステレオカメラ10は、撮影画像111の撮影処理から補正パラメータ112の更新処理を実行して、その後、視差画像115を生成する処理までを周期的に実行する。
ここで、車両制御システム300が障害物等の認識や追跡を行っている最中に、ステレオカメラ10側で、補正パラメータ112の更新が行われた場合に生じる車両制御システム300における誤認識について説明する。更新された補正パラメータ112に基づいて視差画像115が生成されると、同じ撮影画像111に基づく視差画像115であっても、車両制御システム300における障害物等の認識結果が異なる可能性がある。
例えば、車両500からの実際の距離が100mの障害物等をステレオカメラ10が撮影した場合に生成される視差画像115において、障害物等の視差pが1画素になると仮定する。また、ステレオカメラ10における、上記の障害物等を含む撮影画像111に対する視差の誤差が−0.5画素であると仮定する。このステレオカメラ10を用いて、あるフレームで得られた撮影画像111に基づき視差画像115を生成すると、上記の障害物等に関する視差pは1画素になるべきところ、誤差の影響によって0.5画素になる。この結果に基づく車両制御システム300の認識処理では、0.5画素に対応する距離を認識することになるので、当該障害物等との距離は200mとして認識する。
車両制御システム300が障害物等の認識や追跡をする処理を実行中に、ステレオカメラ10側では、次のフレームにおいて、補正パラメータ112が更新されることがある。そうすると、上記のような視差の誤差が正しく補正された補正画像114に基づいて視差画像115が生成されることになる。この場合、誤差−0.5画素の影響を受けないから、このフレームにおける障害物等に関する視差pは1画素になる。つまり、車両制御システム300は、前のフレームでは200mにあると認識した障害物等が、このフレームでは100mにあると認識する結果になる。これらの結果から車両制御システム300が次のフレームにおける障害物等の距離を予測すると、その距離は0mになる。そうすると、車両制御システム300は、障害物等への衝突を予想して、この障害物等を回避するような緊急制動などを実行する可能性がある。
通常の車両制御システム300では、上記のような制御を開始するまでに複数回の衝突判定を行う等のマージンを設けている。すなわち、数フレームにわたって衝突する可能性があると判定された場合に、車両500に対するステアリング制御やブレーキ制御を実行するようにし、車両制御の安定性を確保する構成を備える。そのため、上記のような状況において必ずしも不要な制御が発生するとは限らない。しかし、ステレオカメラ10単体の信頼性は高い方が望ましい。
通常は、ステレオカメラ10における補正処理が有効に働いていれば、座標のずれが生じても即補正される。そのため、上に説明したような視差の誤差の影響は生じないことが多い。しかし、ステレオカメラ10の起動後や、最初の自動キャリブレーション更新時、短時間でカメラ特性が大きく変化する場合などでは、ある程度大きな座標のずれが一度に計測される可能性がある。補正部106がこの座標のずれを補正すると、計測結果の距離が大きく変化してしまう可能性がある。
なお、短時間でステレオカメラ10の特性が大きく変化する場合として、例えば、日影から日向へ車両500を移動させた場合や、車内冷暖房の稼働を稼働させた場合に起きる温度変化等があげられる。本実施形態においては、経時変化や上記の温度変化等に対応するため、車両500の走行時において自動キャリブレーションを行う。自動キャリブレーションの方法は、例えば、特開平10−341458等に記載の種々の公知の方法を取り得る。
次に、本実施形態に係るステレオカメラ10において実行されるプログラム100の処理の流れについて図8のフローチャートを用いて説明する。なお、各処理ステップをS1、S2、S3、・・・のように表記する。
まず、第1撮影部101および第2撮影部102により、撮影画像111である第1撮影画像と第2撮影画像を取得する撮影処理を実行する(S1)。続いて、撮影処理(S1)によって得られた撮影画像111に基づいて認識部108が、撮影画像111中の物体を認識する認識処理を行う(S2)。認識処理(S2)の結果、物体が認識された場合は、撮影画像111中において当該物体に相当する画素群に対して認識フラグRが立てられる。ここで「認識フラグRが立つ」とは、認識フラグRに値「1」を設定することをいう。したがって、以下の処理において、認識フラグRの値が「1」になっている画素群が、追跡部109による追跡処理の対象とされる。なお、本実施形態においては、認識フラグRが立てられた画素が存在する場合、追跡部109が追跡状態にあるものとする。
そして、更新部104が、第1カメラ1、第2カメラ2に生じた経時的な位置ずれに起因する座標のずれを補正するための係数である補正パラメータ112を生成する処理を実行する(S3)。続いて、先に生成されている補正パラメータ112を、新たに生成された補正パラメータ112に基づいて更新するにあたり、更新しても良いタイミングであるか否かを判定する更新タイミング判定処理を更新部104が実行する(S4)。
ここで、更新タイミング判定処理(S4)の詳細な流れについて、図9のフローチャートを用いて説明する。
例えば、車両制御システム300が、自らの処理状況を示す情報である処理状況情報を適宜更新し続けているものとする。また、更新された処理状況情報は車両制御システム300の制御装置301に記憶されているものとする。
まず、ステレオカメラ10の更新部104が、処理状況要求処理を実行する(S41)。処理状況要求処理(S41)において、更新部104が上記の認識フラグRを取得する要求を認識部108に出す。これによって、更新部104は認識フラグRの値を認識部108から取得する。更新部104は、取得した認識フラグRに「1」を含む画素群があるか否かを判定する(S42)
認識フラグRに「1」を含む画素群がある場合は、その画素群に対して追跡部109による追跡処理が行われる。すなわち、撮影画像111に含まれる被写体を参照する処理が行われる。この場合、更新部104による補正パラメータ112の更新が行われると、認識フラグRの値が「1」である画素群に係る追跡対象の追跡処理に対して、不具合が生じるので好ましくない。そこで、認識フラグRの値が「1」を含む画素群が有る場合は更新タイミングではないと判定し(S42のNo)、更新処理(S43)を行わずに更新タイミング判定処理(S4)を終了する。
一方、認識フラグRに「1」を含む画素群が無い場合、すなわち、認識フラグRの値が「0」の画素ばかりである場合は、追跡部109による追跡処理は行われない。この場合、更新部104による補正パラメータ112の更新が行われても上記のような追跡処理への不具合は生じない。そこで、認識フラグRの値が「0」の画素ばかりの場合は更新タイミングであると判定し(S42のYes)、補正パラメータ112の更新処理が実行される(S43)。
更新処理(S43)は、補正パラメータ生成処理(S3)において生成された補正パラメータ112に基づいて、先に生成されRAMに記憶されている補正パラメータ112を上書き更新する処理である。そして、更新タイミング判定処理(S4)に続いて、補正部106が補正処理(S5)を実行する。補正処理(S5)は、補正パラメータ112を用いて撮影画像111に基づく補正画像114を生成する処理である。当該処理で使用される補正パラメータ112は、上に示した更新タイミング判定処理(S4)において、更新されなかった補正パラメータ112か、更新された補正パラメータ112のいずれかである。
以上の説明では、更新タイミングの判定に認識フラグRを利用する処理を例示した。本実施形態に係るプログラム100の処理の流れは、これに限られるものではない。例えば、処理状況要求処理(S41)と更新タイミング判定処理(S42)との間で、状況判定処理を実行してもよい。状況判定処理とは、車両制御システム300において実行中の処理が特定の処理に該当するか否かを判定する処理である。仮に、車両制御システム300が特定の処理を実行中の場合は、更新処理(S43)を実行しないようにすればよい。なお、特定の処理とは、例えば、車両制御システム300において障害物等を認識する認識処理、または、障害物等を追跡する追跡処理である。
車両制御システム300が、例示した処理を実行している最中であれば(S42のNo)、補正パラメータ112を更新すると、障害物等の認識において誤差が生ずる可能性がある。したがって、更新部104は更新処理(S43)を実行せずに、更新タイミング判定処理(S4)を終了する。
一方、車両制御システム300の実行中の処理が、上に例示した特定の処理でなければ(S42のYes)、更新部104は更新処理(S43)を実行する。更新部104は、更新処理(S43)を実行した後に、更新タイミング判定処理(S4)を終了する。
なお、処理状況の通知は、更新部104からの要求によらず、自発的に適宜繰り返して通知されるように構成してもよい。この場合、処理状況要求処理(S41)は実行されずに、更新部104は予め通知されている処理状況に基づいて更新タイミング判定処理(S42)を実行すればよい。
以上説明したステレオカメラ10によれば、撮影画像111の座標のずれを補正する際に、車両制御システム300が障害物等を認識中または追跡中であるか否かを判断した結果に応じて、補正パラメータ112の更新タイミングを制御する。
車両制御システム300が障害物等を認識中だったり、追跡中だったりする障害物等認識状態であれば、補正パラメータ112の更新を行わず、すでに生成されていた補正パラメータ112を用いて補正画像114を生成する。車両制御システム300が、障害物等認識状態ではないとき、すなわち、障害物等非認識状態であるとき、補正パラメータ112の更新を行ない、更新後の補正パラメータ112を用いて補正画像114を生成する
したがって、本実施形態に係るステレオカメラ10によれば、補正画像114に基づいて生成される視差画像115を利用する車両制御システム300において誤認識を発生させることなく、座標のずれを補正して精度良く距離を算出することができる。
次に、本実施形態に係るステレオカメラ10において実行されるプログラム100の処理の流れの別の例について説明する。なお、すでに説明をした処理と同じ処理には、同じ符号を付して詳細な説明を省略する。
図10に示すように、本実施形態に係るプログラム100において、認識処理(S2)と補正パラメータ生成処理(S3)を並行して実行してもよい。この場合、ステレオカメラ10が制御部3を2つ備えている等、並行処理ができるハードウェア資源をステレオカメラ10が備えていることが前提になる。認識処理(S2)と補正パラメータ生成処理(S3)の実行を並行することによって、プログラム100における処理速度を向上させることができる。
図10に示すフローチャートのように、撮影処理(S1)の後、認識処理(S2)と補正パラメータ生成処理(S3)を並行して実行する。このとき、認識処理(S2)は、必ず更新タイミング判定処理(S4)より前に実行される。更新タイミング判定処理(S4)では、認識処理(S2)によって生成される認識フラグRを利用する。そのため、認識処理(S2)の実行が更新タイミング判定処理(S3)の後になると、補正画像114に基づいて生成される視差画像115を利用する車両制御システム300において、誤認識が生ずる可能性があるからである。上記のように、認識処理(S2)の実行を更新タイミング判定処理(S4)よりも前に行い、かつ、補正パラメータ生成処理(S3)と認識処理(S2)を並行することで、座標のずれを補正して精度良く距離を算出することを高速に行うことができる。
以上説明した本実施形態に係るステレオカメラ10において実行されるプログラム100は、条件によって補正パラメータ112の更新処理(S43)が実行されない場合がある。補正パラメータ112は、ステレオカメラ10の電源がオフになると消去されてしまう。この場合、その後においてステレオカメラ10の電源をオンにしたときの補正パラメータ112は最適なものではなくなっている。このまま補正画像114を生成する補正処理(S5)が実行されると、誤差を含んだ補正画像114が生成される可能性がある。
そこで、補正パラメータ112の更新処理(S43)が行われるか否かに関わらず、補正パラメータ112が生成されたタイミングで定期的にROMに対して補正パラメータ112を書き込むようにしてもよい。この場合、更新処理(S43)が実行されていない補正パラメータ112は、電源がオンになったときに、判定して更新処理(S43)を行えばよい。
なお、補正パラメータ112のROMへの書き込みは、定期的なものでなくともよい。例えば、更新処理(S43)が一定期間以上実行されていないときに補正パラメータ112をROMへ書き込む処理が実行されてもよい。
また、図11に示すフローチャートのようにしてもよい。まず、更新部104(図6参照)が電源オフの信号を確認した場合(S51のYes)、補正パラメータ112のROMへの書込処理を実行してから(S52)、電源オフ処理を実行する(S53)。これによって、次回、電源がオンになったときに補正パラメータ112を利用することができる。
また、図12に示すフローチャートのようにしてもよい。まず、更新部104(図6参照)が電源オフの信号を確認した場合(S61のYes)、補正パラメータ112の更新処理を実行してから(S62)、電源オフ処理を実行する(S53)。これによって、次回、電源がオンになったときに、常に最新の補正パラメータ112を利用することができる。
なお、本実施形態のステレオカメラ10を、車両制御システム以外に使用してもよい。