【解決手段】キャリブレーション装置は、路面を走行する車両に搭載されるカメラと、カメラで撮影して得られた撮影画像から特徴点を抽出する特徴点抽出部と、特徴点抽出部が抽出する特徴点を追跡する追跡部と、特徴点の追跡によって得られる特徴点の軌跡を記憶する記憶部と、特徴点の軌跡を用いて車両が走行する平面を推定する路面推定部と、推定された平面に基づきキャリブレーションに用いる特徴点の軌跡であるキャリブレーション用軌跡を算出する算出部と、キャリブレーション用軌跡を用いてカメラの外部パラメータのキャリブレーションを実行する外部パラメータ推定部とを備える。
【発明を実施するための形態】
【0008】
―第1の実施の形態―
以下、
図1〜
図10を参照して、本発明にかかるキャリブレーション装置の第1の実施の形態を説明する。
【0009】
図1は、本発明にかかるキャリブレーション装置100、およびキャリブレーション装置100を備える車両Pの構成を示すブロック図である。なお本実施の形態では、車両Pを他の車両と区別するために「自車両」Pと呼ぶこともある。
【0010】
車両Pは、キャリブレーション装置100と、車両Pの前方を撮影するカメラ111と、キャリブレーション装置100の出力に基づき運転者へ情報を提示する表示装置104と、車両Pの速度を測定する車速センサ105と、車両Pの舵角を測定する舵角センサ106とを備える。カメラ111、車速センサ105、および舵角センサ106が取得した情報は、キャリブレーション装置100に送信される。
【0011】
カメラ111はたとえば車両Pの前方に取り付けられ、車両Pの周囲を撮影する。カメラ111の撮影範囲には、車両Pが走行する路面が含まれる。カメラ111の車両Pとの位置・姿勢関係の設計値は、外部パラメータ初期値103Cとして後述するフラッシュメモリ112に格納される。ただし、カメラ111の車両Pへの取り付けが設計値からずれが生じることは避けられず、実際の取り付け状態に対応する理想的な外部パラメータと、設計値である外部パラメータ初期値103Cとは一致しない。
【0012】
カメラ111はレンズおよび撮像素子を備え、これらの特性、たとえばレンズの歪みを示すパラメータであるレンズ歪み係数、光軸中心、焦点距離、撮像素子の画素数および寸法が内部パラメータ初期値としてROM103に格納される。また、後述するキャリブレーションプログラムにより算出された外部パラメータ112Aがフラッシュメモリ112に保存される。
【0013】
キャリブレーション装置100は、中央演算装置であるCPU101と、読み書き可能な記憶装置であるRAM102と、読み出し専用の記憶装置であるROM103と、フラッシュメモリ112とを備える。CPU101は、RAM102、RAM103、およびフラッシュメモリ112と信号線により接続される。
【0014】
CPU101は、ROM103に格納されるプログラムをRAM102に展開して実行する。RAM102には、後述するプログラムが利用する追跡点情報102A、補正済み追跡点情報102B、および外部パラメータ102Cが格納される。追跡点情報102Aおよび補正済み追跡点情報102Bの構造は後述する。外部パラメータ102Cは、キャリブレーション過程における途中の値であり、キャリブレーション終了まで書き換えられながら使用される。
【0015】
ROM103には、走行中キャリブレーションプログラム103Aと、外部パラメータ初期値103Cと、カメラ利用プログラム103Dとが格納される。走行中キャリブレーションプログラム103Aは、車両Pの走行中に外部パラメータをキャリブレーションする。走行中キャリブレーションプログラム103Aの動作は後述する。
【0016】
外部パラメータ初期値103Cは、前述のとおり外部パラメータの設計値である。カメラ利用プログラム103Dとは、カメラ111を利用するプログラムであり、たとえばカメラ111が撮影して得られた画像を用いて自車両Pと周囲の車両との距離を算出し、その距離が所定の距離以下の場合は表示装置104に警告を表示する。カメラ利用プログラム103Dは、実行のためにカメラ111の外部パラメータおよび内部パラメータを必要としており、これらをフラッシュメモリ112から読み込む。カメラ利用プログラム103Dは、フラッシュメモリ112に外部パラメータ112Aおよび内部パラメータが保存されていない場合は、ROM103に保存されている内部パラメータ初期値および外部パラメータ初期値103Cを用いる。
【0017】
フラッシュメモリ112は不揮発性記憶媒体であり、フラッシュメモリ112には走行中キャリブレーションプログラム103Aが出力する外部パラメータ112Aが格納される。なお本実施の形態では外部パラメータのキャリブレーションのみを説明するが、キャリブレーション装置100は内部パラメータのキャリブレーションも行ってもよい。
【0018】
(追跡点情報102A)
図2(a)は、RAM102に保存される追跡点情報102Aの一例を示す図である。追跡点情報102Aには、特徴点ごとに、座標および状態の情報が格納される。ただし特徴点ごとの座標の情報は時刻ごとに記録される。すなわち・・には特徴点が移動した座標が記録されるので、・・に記録されている特徴点を以下では「特徴点軌跡」と呼ぶこともある。
【0019】
図2(a)の行は個別の特徴点を表し、列は撮影時刻t1〜t5における特徴点の撮影画像上の座標、および特徴点の追跡の状態を表す。以下では、撮影画像上の座標を「画像座標系」の座標とも呼ぶ。本実施の形態では画像座標系は、撮影画像の左上を原点とし、右をX軸の正方向、下をY軸の正方向と定義する。
【0020】
なお撮影時刻は、後述する特徴点軌跡の移動速度の算出に十分な情報があればよい。たとえば撮影時刻は、現実の時刻、たとえば「2019年1月2日3時45分12.345秒」などでもよいし、所定の時刻、たとえばキャリブレーション装置100が直前に電源がオンにされてからの経過時刻でもよい。
【0021】
特徴点に付した番号、すなわち1001、1002などは、特徴点を識別する識別子であり、ここでは便宜的に抽出された順番に通し番号で付した番号を用いている。
図2(a)は、時刻t1に撮影された撮影画像からは特徴点が3つ抽出されたことを示しており、同様に時刻t2、t3、t4に撮影された撮影画像からは4つ、時刻t5に撮影された撮影画像からは1つ特徴点が抽出され、追跡に成功したことが示されている。時刻t2、t3の撮影画像から抽出された4つの特徴点のうち3つ、すなわち特徴点1001と特徴点1002と特徴点1003は、時刻t1から追跡が継続されていることを表している。
【0022】
時刻t5に撮影された撮影画像からは、特徴点1001、1003、1004が抽出されなかったので
図2(a)では「x」マークを付している。なお
図2(a)に示す例では時刻t1〜t5のみを表示しているが、時刻はこれに限定されない。時刻を増やすと無限にテーブルサイズが無限に大きくなりメモリを圧迫するため、公知のリングバッファ技術等により、テーブルを循環的に活用する。
【0023】
追跡点情報102Aの「状態」の列は、特徴点の追跡が完了したか否かを示す情報が格納される。
図2(a)に示す例では、特徴点の追跡が完了した特徴点の状態の欄には「OK」が格納され、特徴点の追跡が完了していない特徴点の状態の欄には「未」が格納される。
【0024】
(補正済み追跡点情報102B)
図2(b)は、RAM102に保存される補正済み追跡点情報102Bの一例を示す図である。補正済み追跡点情報102Bには、特徴点ごとに、時刻ごとの補正された座標が記録される。補正済み追跡点情報102Bに記載される座標は、追跡点情報102Aと同様に撮影画像系における座標である。
【0025】
補正済み追跡点情報102Bには追跡点情報102Aに記載されている特徴点のうち、追跡が完了している特徴点の情報が記載される。また、後述するように補正が不要な特徴点も存在するので、その特徴点の座標は追跡点情報102Aと同様である。たとえば
図2(b)に示す例では、特徴点1001、1003、1004を示しているが、そのうち特徴点1001は補正が不要なので追跡点情報102Aと座標が同一である。その一方で特徴点1003、1004は補正が行われて特徴点の座標が補正されている。たとえば特徴点1003の時刻t1の座標は、追跡点情報102Aでは(x31、y31)であったが、補正済み追跡点情報102Bでは(x31a、y31a)に補正されている。
【0026】
図3は、CPU101が実行する走行中キャリブレーションプログラム103Aが有する機能を機能ブロックとして表し、機能ブロック同士、および機能ブロックとRAM102とのデータの流れを示す図である。
【0027】
走行中キャリブレーションプログラム103Aは、その機能として画像取得部201と、特徴点抽出部202と、追跡部203と、蓄積部204と、路面推定部205と、算出部206と、実施判定部207と、外部パラメータ推定部208と、採否判定部209と、車両運動取得部210とを備える。なお車両運動取得部210は、
図3では作図の都合により走行中キャリブレーションプログラム103Aの外部に示されている。画像取得部201、特徴点抽出部202、および追跡部203は、カメラ111が画像を撮影するたびに実行される。
【0028】
カメラ111は、連続して高い頻度、たとえば毎秒30回撮影する。カメラ111が撮影して得られた画像(以下、撮影画像)は、撮影するたびにキャリブレーション装置100に送信される。画像取得部201は、カメラ111から撮影画像を受信し、受信した撮影画像を特徴点抽出部202、および追跡部203に出力する。画像取得部201は、たとえば、カメラ111から撮影画像が入力されるたびに特徴点抽出部202と追跡部203に撮影画像を出力する。ただし、処理負荷低減等を目的として、画像取得部201は1回おきに出力する構成としてもよい。
【0029】
車両運動取得部210は、車速センサ105および舵角センサ106から送信される自車両Pの速度および舵角を車両運動情報として走行中キャリブレーションプログラム103Aに出力する。ただし車両運動取得部210は、得られた情報を瞬時値として出力してもよいし、得られた情報を演算して、たとえば積分して出力してもよい。
【0030】
特徴点抽出部202は、画像取得部201から入力される撮影画像に対して画像処理を施して特徴点を抽出する。ここでいう特徴点とは、たとえば画像中の壁の角、縁石の角、破線の角、横断歩道の角、などのエッジの交点、すなわちコーナー特徴点である。コーナー特徴点は、たとえば公知の技術であるハリスオペレータを適用することにより抽出できる。特徴点抽出部202は、抽出した特徴点の画像座標系における座標をRAM102に出力する。特徴点抽出部202により抽出された特徴点の情報は、RAM102に保存される。
【0031】
追跡部203は、RAM102から読み込む、直前の撮影画像から得られた特徴点、すなわち前フレームの特徴点を対象として、画像取得部201から入力される最新の撮影画像を用いて追跡処理を行う。すなわち追跡部203は、異なる時刻に撮影された撮影画像中の特徴点を追跡して特徴点の軌跡を算出する。特徴点の追跡には、既知の追跡手法であるSAD(Sum of Absolute Difference)やSSD(Sum of Squared Difference)、LK(Lucas‐Kanade)法などを用いることができる。そして、追跡した特徴点に関する情報を追跡部203に出力する。
【0032】
蓄積部204は、追跡部203から出力された特徴点軌跡の情報をRAM102に追跡点情報102Aとして記録する。さらに蓄積部204は、追跡部203から出力された特徴点軌跡の情報を路面推定部205に出力する。路面推定部205は、RAM102に記録された特徴点軌跡の情報を用いて自車両Pが走行する道路の路面を算出する。算出部206は、RAM102に記録された特徴点軌跡の情報を用いて、キャリブレーションに適した特徴点軌跡を算出し補正済み追跡点情報102BとしてRAM102に記録する。路面推定部205および算出部206の詳細は後述する。
【0033】
実施判定部207は、キャリブレーション実施の可否を判断をする。特徴点軌跡の総数が少ない状態で実施すると、誤差系列が含まれていた場合に大きく誤ったキャリブレーション結果となる。そこで、特徴点軌跡があらかじめ定めた所定の数以上蓄積された段階でキャリブレーションを実施する。また、キャリブレーションを実施するには、自車中心から見て、進行方向の左側と右側の領域にそれぞれ特徴点軌跡が必要となる。実施判定部207は補正済み追跡点情報102Bを参照して、自車中心から見て、左側と右側の領域にそれぞれあらかじめ定めた所定の数の特徴点軌跡が得られている場合に、外部パラメータ推定部208に実行指令を出す。
【0034】
外部パラメータ推定部208は、得られた特徴点の軌跡が同一平面上に存在すると仮定してカメラ111の外部パラメータを算出する。外部パラメータ推定部208は、算出部206が算出した特徴点軌跡の位置、すなわち補正済み追跡点情報102Bに記録されている特徴点の位置を現在の外部パラメータ102Cを用いて自車両Pの上部から見下ろしたように俯瞰変換する。そして外部パラメータ推定部208は、俯瞰視点での特徴点軌跡の角度や長さを用いて、カメラの3軸角度および高さを推定する。3軸角度とは、カメラのロール角、ピッチ角、およびヨー角である。取得した特徴点の軌跡は、車両Pが直進している際に、車両Pが接地する路面平面から取得した特徴点軌跡なので、カメラの3軸角度と高さが演算に使用した外部パラメータ102Cと一致するならば、俯瞰視点での複数の特徴点軌跡は平行かつ俯瞰映像縦方向に垂直であり、所定の長さとなる。この特徴点軌跡が理想軌跡である。
【0035】
カメラの3軸角度と高さが、演算子に使用した外部パラメータ102Cと一致しない場合、すなわち外部パラメータ102Cに誤差があるは、俯瞰視点での特徴点軌跡が理想軌跡に対してそれぞれ特徴的な差異が生じる。ピッチ角に誤差がある場合は、俯瞰視点での特徴点軌跡がハの字状に開く。ヨー角に誤差がある場合は、俯瞰視点での自車両Pの左右の特徴点軌跡に、長さの差が生じる。ロール角に誤差がある場合は、特徴点軌跡全体が斜めに回転する。カメラ高さに誤差がある場合は、特徴点軌跡の長さが所定の長さから差異が生じる。
【0036】
外部パラメータ推定部208は各パラメータを変化させ、理想軌跡に近づくように公知の最適化技術を用いて各パラメータを補正することで、キャリブレーションを実現する。詳細は後述する。最適化処理による推定終了後、外部パラメータ102Cを採否判定部209に出力する。
【0037】
採否判定部209は、外部パラメータ推定部208から出力を受け取り、そのパラメータを最終パラメータとして採用してよいか判断する。最終パラメータとして採用してよいと判断された場合は、その外部パラメータ102Cは外部パラメータ112Aとしてフラッシュメモリ112に書き込まれる。最終パラメータとして不採用と判断された場合は、推定途中の外部パラメータ102CとしてRAM102に書き込まれ、次の画像が入力される際に初期値として利用される。
【0038】
採否判定部209は、最終パラメータとして判断してよいか否かを、収束性判定、回数判定、および画像判定の3つの観点で判断する。収束性判定とは、過去値と比較して十分変動が小さくなっているか否かの判定である。回数判定とは、複数回検証して所定の範囲内で同じ値が得られている否かの判定である。画像判定とは、俯瞰画像上で検証して、正しい俯瞰図とみなせる映像になっている否かの判定である。
【0039】
採否判定部209は、収束性判定、回数判定、および画像判定の全てを満たす場合に、最終パラメータとして採用してよいと判断し、フラッシュメモリ112に書き込む。採否判定部209は、収束性判定および画像判定のみ満足すると判断する場合は、回数判定を満たした回数をカウントアップし、RAM102に記憶されている特徴点列と演算途中の外部パラメータ102Cをクリアし、初期状態から再開始する。
【0040】
(路面推定部205の動作概要)
図4は、路面推定部205による路面の推定処理の概念を説明する図である。
図4(a)は道路の平面図、
図4(b)は道路の断面図、
図4(c)は特徴点の移動速度を示す図である。
図4(a)〜
図4(c)では共通するXYZ軸を定義する。ただし画像座標系におけるX軸およびY軸と区別するために、
図4に示す座標系を「空間座標系」と呼ぶ。空間座標系において、X軸は道路の幅方向に平行であり、Y軸は自車両Pの進行方向に平行であり、Z軸は天地方向を示す。
図4(a)において自車両は符号Pで示す車両であり、車道には白線L101と、中央線L102と、白線L103とが描画されている。中央線L102を挟んで自車両Pの逆側には、対向車両Qが走行している。破線Mは勾配の頂点であり詳しくは後述する。
【0041】
車両Pが走行する車道は、雨水の排水などを目的として、法令により車道の幅方向に数%の勾配、すなわち横断勾配を有することが定められている。そのため、車道の中央部が高く、道路の幅方向に向かってなだらかに低くなる構成を有することが多い。ただし横断勾配の頂点位置と、中央線L102の幅方向中央部とが一致しないこともある。
図4に示す例では、中央線L102よりも図示右側に勾配の頂点Mが位置している。
【0042】
図4(b)は道路の断面図であり、図示横方向の位置は
図4(a)と対応している。
図4b)の図示上下方向は天地方向に対応しており、図示左右端の白線L101および白線L103の位置が最も低く、道路の中央部ほど高い。ただし中央線L102よりも少し右の頂点Mが最も高い。
図4に示す例では断面の形状はY方向に関わらず一様であり、すなわち
図4に示す道路は頂点Mの左側の第1面S11と、頂点Mの右側の第2面S12とから構成される。第1面S11は、車両Pが接地している面ともいえる。以下では、第1面S11を頂点Mを超えて延伸させて形成される平面を、仮想第2面S12Aと呼ぶ。第2面S12と仮想第2面S12Aとのなす角を角度差θと呼ぶ。
【0043】
図4(c)は、検出された特徴点軌跡の位置と移動速度の関係を示す概念図である。ただし
図4(c)では全ての特徴点が自車両Pの接地面と同一平面上、すなわち第1面S11または仮想第2面S12Aに存在すると仮定している。
図4(c)に示すそれぞれの白丸が特徴点軌跡であり、図示上方に存在するほど移動速度が速いことを示している。自車両Pと同一の平面である第1面S11に存在する特徴点は、自車両Pが移動するとその特徴点は地面に固定されているので、自車両Pからは自車両Pの移動とは逆方向に同じ速度で移動したように観測される。しかし第2平面S12に存在する特徴点は、仮想第2面S12Aに存在すると仮定されているため、仮想第2面S12に射影した位置として算出され、実際よりも移動速度が遅いように観測される。
【0044】
図4(c)ではこれらの特徴点軌跡の分布を2本の直線、LV1とLV2で近似している。なおLV1とLV2の交点の道路幅方向の位置は、頂点Mの位置と一致する。LV1とLV2の傾きの差は、第1面S11と第2面S12のなす角、換言すると角度差θに対応する。
【0045】
すなわち特徴点軌跡の速度を評価することで、路面推定部205は、頂点Mの位置および第1面S11と第2面S12のなす角を算出できる。具体的にはLV1およびLV2の各点からそれぞれ最小二乗法などで近似直線を求め、LV1から得られる近似直線を、
v = a1 * x + b1 ・・・式1
LV2から得られる近似直線を、
v = a2 * x + b2 ・・・式2
とすると、交点Mのx座標は、
M=-(b1-b2)/(a1-a2) ・・・式3
で得られる。また、
θ= k * (arctan(a1) - arctan(a2)) ・・・式4
で求められる。ここで、kは比例定数で車種によるカメラ配置によって異なる値である。また、arctanは正接関数(タンジェント)の逆関数である。この計算式により、
図4(c)に示すLV1とLV2の関係から
図4(b)に示す角度差θが算出できる。
【0046】
(算出部206の動作概要)
図5は、算出部206が算出する特徴点を示す概念図である。算出部206は、RAM102に記録された特徴点軌跡のうち、第1面S11に存在する特徴点軌跡はそのまま出力し、第1面S11以外に存在する特徴点軌跡を構成する特徴点の位置を修正して出力する。算出部206は、特徴点軌跡が第1面S11に存在するか否かは、特徴点のX座標、自車両PのX座標、および頂点MのX座標に基づき判断する。具体的には、頂点MのX座標で2分した領域のうち自車両Pが存在する側の領域が第1面S11と判断できる。第1面S11以外に存在する特徴点の位置の修正を以下で説明する。
【0047】
図5(a)に示す自車両P、第1面S11、第2面S12、仮想第2面S12A、および頂点Mは
図4(b)と同様である。符号111は、キャリブレーション装置100のカメラ111である。符号C1で示す丸印は特徴点の真の位置を示し、以下では「真の特徴点位置」C1と呼ぶ。符号C2で示す三角形は、簡易に算出した特徴点の位置を示し、以下では「簡易特徴点位置」C2と呼ぶ。符号C3で示す四角形は、キャリブレーション用に算出する特徴点の位置を示し、以下では「算出特徴点位置」C3と呼ぶ。
【0048】
特徴点はカメラ111の撮影画像から抽出されるが、1つの撮影画像だけからは奥行きが算出できない。特徴点が第1平面S11および第1平面S11を含む平面上に存在すると仮定すると、特徴点C1は位置C2に存在するように算出される。しかし路面推定部205の算出により、特徴点C1が存在する平面である第2面S12と、第1平面S11がなす角との関係が明らかになった。そのため算出部206は、C3に示す特徴点の位置を算出できる。位置C3は、位置C3を始点とし仮想第2面S12Aに直交する直線L13が特徴点C1に交わる位置として定義される。
【0049】
(特徴点抽出部202のフローチャート)
図6は特徴点抽出部202の動作を表すフローチャートである。特徴点抽出部202は、画像取得部201から撮影画像が送信されるたびに以下の動作を実行する。以下に説明する各ステップの実行主体はCPU101である。
【0050】
ステップS301では特徴点抽出部202は、車両Pの進行方向、および車両Pの進行方向に対するカメラ111の撮影方向に基づき、特徴点抽出部202が特徴点を抽出する撮影画像中の領域を決定する。たとえば車両Pが前方に進む場合は、カメラ111は車両Pの前方に取り付けられているので、車両Pに近い位置で特徴点を抽出してもすぐにカメラ111の画角から特徴点が外れてしまうため追跡できる時間が短い。処理領域は広ければ広いほど計算処理に時間がかかるため、リアルタイム処理で計算するためには、このような無駄な部分の計算処理負荷を低減する必要がある。そこで、車両Pから離れた場所の特徴点を抽出するように処理領域を設定する。なお、カメラ111が車両Pの後方を撮影するように取り付けられている場合は、車両Pが前方に進行する際に車両Pに近い側に処理領域を設定する。次にステップS302に進む。
【0051】
ステップS302では特徴点抽出部202は、ステップS301において設定した特徴点抽出領域を対象として特徴点を抽出する。特にエッジの交点であるコーナー特徴点を抽出することが好ましい。特徴点抽出部202は、ステップS301において設定された領域に対して、ハリスオペレータなどを適用してコーナー特徴点を抽出し、ステップS303に進む。ステップS303では特徴点抽出部202は、ステップS302において抽出された特徴点の座標をRAM102に出力し、
図6のフローチャートを終了する。
【0052】
(追跡部203のフローチャート)
図7は、追跡部203の動作を表すフローチャートである。追跡部203は、画像取得部201から撮影画像が送信されるたびに以下の動作を実行する。以下に説明する各ステップの実行主体はCPU101である。
【0053】
ステップS401では追跡部203は、特徴点の追跡処理の対象とする処理領域を設定する。すなわち、カメラ111により直前に撮影された撮影画像において、特徴点抽出部202により特徴点が抽出された座標、および車両運動取得部210が取得する車両Pの運動情報を用いて、直前の撮影画像において抽出された特徴点が移動する方向および距離を推定する。そして特徴点が移動すると推定した方向および距離に対応する領域を、追跡部203が特徴点を追跡する撮影画像中の領域として決定する。次にステップS402に進む。
【0054】
ただし、特徴点が移動する方向および距離を推定するために用いる撮影画像は直前の撮影画像に限定されず、複数の撮影画像を用いて推定してもよいし、直前以外の撮影画像を用いて推定してもよい。すなわち、より早い時間に撮影された撮影画像を用いて特徴点が移動する方向および距離を推定してもよい。
【0055】
次に説明するステップS402〜S405は、直前の撮影画像において抽出された特徴点に対応する回数だけ繰り返し実行される。ステップS402では追跡部203は、前述のSADやLK法などの公知の手法により、追跡対象であるRAM102から読み込んだ直前の撮影画像における特徴点の追跡を行い、ステップS403に進む。ステップS403では追跡部203は、追跡対象である直前の撮影画像における特徴点の追跡が継続できたか否かを判断する。
【0056】
たとえば追跡部203は、SADなどによる照合度があらかじめ定めた閾値以下であれば、カメラの画角から外れたなどの理由で追跡ができないと判断する。また追跡部203は、特徴点が画像中のあらかじめ定めた一定のラインを通過した場合や所定の領域から外れた場合は、強制的に追跡終了とする。強制的に追跡を終了する理由は、次の撮影画像ではカメラ111の画角から外れることが想定されるから、または被写体との距離が遠くなり追跡する必要性がないからである。追跡部203は、追跡が継続できたと判断する場合はステップS404に進み、追跡終了と判断する場合はステップS405に進む。
【0057】
ステップS404では追跡部203は、追跡点情報102Aにおける処理対象の特徴点の行であって、処理対象の撮影画像が撮影された時刻の列に、追跡した特徴点の座標を記録する。ステップS405では追跡部203は、追跡点情報102Aにおける処理対象の特徴点の行であって、処理対象の撮影画像が撮影された時刻の列に、追跡が終了したマーク、たとえば「x」を記録する。ステップS404またはステップS405の実行が完了すると、直前の撮影画像において抽出された特徴点についてステップS402〜S405が実行されたか否かを判断し、未処理の特徴点がある場合はステップS402に戻り、全ての特徴点について処理が完了したと判断する場合は
図7のフローチャートを終了する。
【0058】
(路面推定部205のフローチャート)
図8は、路面推定部205の動作を表すフローチャートである。路面推定部205は、蓄積部204から特徴点列が送信されるたびに、以下の動作を実行する。以下に説明する各ステップの実行主体はCPU101である。
【0059】
路面推定部205は、RAM102の特徴点情報102Aに記録されている、追跡終了した全軌跡を対象として以下に説明するS501〜S503を実行する。たとえば追跡点情報102Aが
図2(a)に示すものであり、時刻t5の直後の処理では路面推定部205は、特徴点1001、特徴点1003、および特徴点1004のそれぞれを処理対象の特徴点軌跡としてS501〜S503を実行する。ステップS501では路面推定部205は、処理対象の軌跡を構成する特徴点の座標を現在の外部パラメータ102Cで俯瞰変換してステップS502に進む。なお外部パラメータ102Cが理想的な外部パラメータと一致しない場合は、俯瞰変換した軌跡は理想軌跡とは一致しないが、概ね俯瞰視点に近い軌跡となる。
【0060】
ステップS502では路面推定部205は、処理対象の軌跡の移動速度を算出する。具体的には路面推定部205は、ステップS501において算出した座標の差と、それぞれの撮影時刻の差とを用いて移動速度を算出する。たとえば追跡点情報102Aが
図2(a)に示す例のものである場合に、特徴点1001は4つの座標が記録されているので座標の差と撮影時刻の差との組み合わせが3組算出される。そしてそれぞれの座標の差をそれぞれの撮影時刻の差で除して移動速度を3つ算出し、たとえばその3つの平均を特徴点1001の移動速度とする。ただしこの際に単純平均ではなく、撮影時刻の差の大きさに基づき重みづけを行ってもよい。
【0061】
ステップS503では路面推定部205は、
図4(c)に示すように、処理対象の軌跡の道路の幅方向の位置と、移動速度の関係をプロットする。ただし実際にはプロットを行うことは必須ではなく、プロットを行う代わりに道路の幅方向の位置と移動速度とを対応させてRAM102に保存してもよい。
【0062】
路面推定部205は、特徴点情報102Aに記録されている追跡終了した全軌跡についてステップS501〜S503の実行が完了すると、ステップS504を実行する。ステップS504では路面推定部205は、道路の断面を2つの直線に近似する。
図4(c)に示す例では、ステップS504の処理は直線LV1と直線LV2の式を算出することに相当する。
【0063】
続くステップS505では路面推定部205は、ステップS504において算出した直線の交点の位置を算出する。詳述すると路面推定部205は、2つの直線が道路の幅方向のどの位置において交わるかを算出する。
図4(c)に示す例では、ステップS505の処理は頂点Mの空間座標系におけるX座標を算出することに相当する。なお以下では、道路の幅方向において2つの直線が交わる位置を「頂点位置」と呼ぶ。続くステップS506では路面推定部205は、算出部206に実行指令を出力して
図8に示す処理を終了する。
【0064】
(算出部206のフローチャート)
図9は、算出部206の動作を表すフローチャートである。算出部206は、路面推定部205から実行指令が送信されるたびに、以下の動作を実行する。以下に説明する各ステップの実行主体はCPU101である。
【0065】
算出部206は、RAM102の特徴点情報102Aに記録されている追跡終了した全軌跡を対象として以下に説明するステップS601〜S603を実行する。ステップS601では算出部206は、処理対象の特徴点軌跡が頂点位置よりも自車両側に存在するか否かを判断する。算出部206は具体的には、路面推定部205が座標変換した処理対象の特徴点軌跡の空間座標系におけるX座標が、路面推定部205がステップS505において算出した頂点位置よりも自車両Pの側に存在するか否かを判断する。算出部206は、処理対象の特徴点軌跡が頂点位置よりも自車両側に存在すると判断する場合はステップS602に進み、否定判断する場合はステップS603に進む。
【0066】
ステップS602では算出部206は、処理対象の特徴点軌跡の座標をそのまま出力して、換言すると追跡点情報102Aから補正済み追跡点情報102Bにそのまま転記する。ステップS603では算出部206は、処理対象の軌跡を構成する特徴点の座標を、自車両Pが存在する平面に射影した射影座標を算出する。具体的には算出部206は、
図2(a)に示したように、追跡点情報102Aには特徴点C1についてC2に対応する座標が記録されているが、射影座標であるC3の座標を算出する。
【0067】
続くステップS604では算出部206は、ステップS603において算出した射影座標を画像座標系の座標に変換して補正済み追跡点情報102Bに出力する。算出部206は、追跡終了した全軌跡を対象としてステップS602またはS604の処理が終了すると
図9に示す処理を終了する。
【0068】
(外部パラメータ推定部208の動作)
図10は、外部パラメータ推定部208の動作を表すフローチャートである。外部パラメータ推定部208は、実施判定部207から実行指令を受けるたびに、以下の動作を実行する。以下に説明する各ステップの実行主体はCPU101である。
【0069】
ステップS701では外部パラメータ推定部208は、ピッチ角推定を行う。外部パラメータ推定部208は、補正済み追跡点情報102Bに格納されている特徴点軌跡の情報と、RAM102に格納されている外部パラメータ102Cとを演算に用いる。外部パラメータ推定部208は、特徴点軌跡の平行性を評価する目的関数を設計し、その目的関数を公知の技術によりピッチ角に関して最小化することでピッチ角推定を実現する。
【0070】
ステップS701における目的関数は、2本の特徴点軌跡の平行性を評価する関数を基本とする。外部パラメータ推定部208は2本の特徴点軌跡のペアを複数作成し、その全ての目的関数の総和をピッチ角推定の目的関数として設計する。したがって、特徴点軌跡全体が、できるだけ平行になるようにピッチ角が補正される。
【0071】
なお特徴点軌跡のペアは、進行方向の左側の軌跡から1つを選択し、自車中心から左側の軌跡と右側の軌跡、換言すると進行方向の左側の軌跡と進行方向の右側の軌跡を組み合わせる。特徴点軌跡のペアは、考えられる全ての組み合わせでもよいし、その中から幾つか選択したもののみでもよい。外部パラメータ推定部208は、読み込んだ外部パラメータ102Cのピッチ角をステップS701で推定したピッチ角で書き換えて、RAM102に格納する。換言するとステップS701の処理によりRAM102に格納されている外部パラメータ102Cは更新される。
【0072】
ステップS702では外部パラメータ推定部208は、ヨー角推定を行う。外部パラメータ推定部208は、補正済み追跡点情報102Bに格納されている特徴点軌跡の情報と、ステップS701の処理により更新された外部パラメータ102Cとを演算に用いる。
【0073】
外部パラメータ推定部208は、特徴点軌跡の垂直性、すなわち軌跡が俯瞰図において進行方向に沿う程度を評価する目的関数を設計する。そして外部パラメータ推定部208は、その目的関数を公知の技術によりヨー角に関して最小化することで、ヨー角推定を実現する。ステップS702における目的関数は、1本の特徴点軌跡の垂直性を評価する関数を基本とし、全ての特徴点軌跡に関する目的関数の総和をピッチ角推定の目的関数として設計する。したがって、特徴点軌跡全体が、できるだけ垂直方向を向くようにヨー角が算出される。外部パラメータ推定部208は、読み込んだ外部パラメータ102Cのヨー角をステップS702で推定したヨー角で書き換えて、RAM102に格納する。
【0074】
ステップS703では外部パラメータ推定部208は、ロール角推定を行う。外部パラメータ推定部208は、補正済み追跡点情報102Bに格納されている特徴点軌跡の情報と、ステップS702の処理により更新された外部パラメータ102Cとを演算に用いる。
【0075】
外部パラメータ推定部208は、自車中心から左側の軌跡と右側の軌跡の特徴点軌跡の長さの差を評価する目的関数を設計し、その目的関数を公知の技術によりロール角に関して最小化することで、ロール角推定を実現する。ステップS703における目的関数は、自車左側の全ての特徴点軌跡長さの平均値と、自車右側の全ての特徴点軌跡長さの平均値の差を最小化するものとして設計する。したがって、自車左側の特徴点軌跡全体と右側の特徴点軌跡全体の長さの差ができるだけ小さくなるように、すなわち理想俯瞰視点に近づくようにロール角が補正される。外部パラメータ推定部208は、読み込んだ外部パラメータ102Cのロール角をステップS703で推定したロール角で書き換えて、RAM102に格納する。
【0076】
ステップS704では外部パラメータ推定部208は、高さ推定を行う。外部パラメータ推定部208は、補正済み追跡点情報102Bに格納されている特徴点軌跡の情報と、ステップS703の処理により更新された外部パラメータ102Cとを演算に用いる。
【0077】
外部パラメータ推定部208は、特徴点軌跡の長さと、車両運動情報から予想される理想軌跡の長さの差をあらわす目的関数を、公知の技術により高さに関して最小化することで高さ推定を実現する。目的関数は、全特徴点軌跡の長さと理想軌跡の長さの差を最小化するものとして設計する。したがって、特徴点軌跡全体と理想軌跡の長さの差ができるだけ小さくなるように、すなわち理想俯瞰視点に近づくように高さが補正される。外部パラメータ推定部208は、読み込んだ外部パラメータ102Cの高さをステップS704で推定した高さで書き換えて、RAM102に格納する。
【0078】
上述した第1の実施の形態によれば、次の作用効果が得られる。
(1)キャリブレーション装置100は、路面を走行する車両Pに搭載されるカメラ111と、カメラ111で撮影して得られた撮影画像から特徴点を抽出する特徴点抽出部202と、特徴点抽出部202が抽出する特徴点を追跡する追跡部203と、特徴点の追跡によって得られる特徴点の軌跡を記憶するRAM102(記憶部)と、特徴点の軌跡を用いて車両が走行する平面を推定する路面推定部205と、推定された平面に基づきキャリブレーションに用いる特徴点の軌跡であるキャリブレーション用軌跡を算出する算出部206と、キャリブレーション用軌跡を用いてカメラの外部パラメータのキャリブレーションを実行する外部パラメータ推定部208とを備える。そのため車両Pの周囲の路面が、
図4(b)に示すように複数の平面から構成されている場合であっても、外部パラメータのキャリブレーションを高精度に行うことができる。
【0079】
(2)算出部206は、追跡点情報102Aに記憶された特徴点の軌跡のうち、車両Pの接地面と同一の平面上に存在する特徴点の軌跡をキャリブレーション用軌跡として算出する(
図9のS601:YES、S602)。そのため確実に同一平面上に存在する特徴点の軌跡を外部パラメータのキャリブレーション用に提供できる。
【0080】
(3)算出部206は、追跡点情報102Aに記憶された特徴点の軌跡のうち、車両の接地面と同一の平面上に存在しない特徴点の軌跡を構成する座標を、車両の接地面と同一の平面上の座標に補正することでキャリブレーション用軌跡として算出する(
図9のS601:NO、S603、S604)。そのため車両の接地面と同一平面上にない特徴点の軌跡、たとえば
図4(b)の第2面S12に存在する特徴点の軌跡もキャリブレーションに用いることができる。
【0081】
(4)路面推定部205は、路面の形状を2つの平面の組み合わせと仮定して、車両Pが走行する平面を推定する。そのため簡易な計算で路面を推定できる。
【0082】
(5)算出部206は式1〜式4に示したように、特徴点の軌跡の分布から複数の近似直線を算出して、複数の近似直線同士の交点から、車両Pの接地面である第1面S11と、交点に対して第1面S11と反対側の第2面S12とのなす角度差θを算出する。そのため角度差θを用いて特徴点の座標を補正できる。
【0083】
(変形例1)
上述した実施の形態では、キャリブレーション装置100の車両運動取得部210は、車速センサ105および舵角センサ106から出力を受けた。しかし車両運動取得部210は、自車両Pの位置情報を入力として受け付けてもよい。たとえば自車両PがGPS受信機を備える場合は、車両運動取得部210はGPS受信機から車両Pの位置情報が入力され、車両運動取得部210は入力されたその位置情報をそのまま車両運動情報として走行中キャリブレーションプログラム103Aに出力してもよい。なおGPS受信機は、衛星航法システムを構成する複数の衛星から電波を受信し、その電波に含まれる信号を解析することで自車両Pの位置、すなわち緯度と経度を算出する。
【0084】
(変形例2)
キャリブレーション装置100は、実施判定部207および採否判定部209のいずれか一方を備えなくてもよいし、両方を備えなくてもよい。それぞれがキャリブレーション装置100に備えられない場合は、備えられない構成が肯定的な判断を行った場合と同様に処理が実行される。たとえば実施判定部207および採否判定部209の両方がキャリブレーション装置100に備えられない場合は、蓄積部204が特徴点軌跡をRAM102に記録すると次の処理が行われる。すなわち外部パラメータ推定部208が外部パラメータ102Cを推定し、外部パラメータ推定部208が推定した外部パラメータ102Cがそのまま外部パラメータ112Aとしてフラッシュメモリ112に記録される。
【0085】
(変形例3)
算出部206は、射影座標の算出を行わなくてもよい。この場合は算出部206は、
図9のステップS601において否定判断する場合にステップS603およびS604の処理を実行せずに、次の追跡終了軌跡を処理対象とする。本変形例によれば、車両Pの接地面と同一平面上に存在する特徴点のみをキャリブレーションに用い、射影座標の算出による計算量を削減できる利点を有する。
【0086】
(変形例4)
算出部206は、路面を3以上の平面から構成されると仮定して路面を算出してもよい。
【0087】
(変形例5)
カメラ111は、キャリブレーション装置100に内蔵されてもよい。
【0088】
―第2の実施の形態―
図11〜
図12を参照して、本発明にかかるキャリブレーション装置の第2の実施の形態を説明する。以下の説明では、第1の実施の形態と同じ構成要素には同じ符号を付して相違点を主に説明する。特に説明しない点については、第1の実施の形態と同じである。本実施の形態では、主に、車両が接地している路面の算出方法が第1の実施の形態と異なる。
【0089】
本実施の形態におけるキャリブレーション装置100、およびキャリブレーション装置100を備える車両Pの構成は第1の実施の形態と同様である。ただし算出部206の動作が第1の実施の形態と異なる。
【0090】
本実施の形態では路面推定部205は、車両Pが走行する領域、換言すると道路の全幅のうち車両Pの横幅の領域に存在する特徴点(以下、「車両下特徴点」と呼ぶ)の軌跡を用いて、車両Pが走行する平面を推定する。そして路面推定部205は、車両Pが走行しない領域に存在する軌跡のうち、位置と移動速度との関係が車両下特徴点と一致する軌跡は車両Pが走行する平面に存在し、その関係が車両下特徴点と一致しない軌跡は車両Pが走行する平面に存在しないと判断する。
【0091】
図11は、第2の実施の形態における路面推定部205の動作を説明する図である。
図11(a)および
図11(b)のそれぞれは、第1の実施の形態における
図4(b)および
図4(c)に相当する。ただし
図11(a)には、タイヤの外側の座標を示すX1およびX2が追記されている。なおX1およびX2は、X座標の値である。
図11(b)は、
図4(c)に示す直線LV1の代わりに直線LV11〜LV13が追加されている。
【0092】
本実施の形態では算出部206は、車両Pが走行する領域における特徴点の軌跡を用いて、X方向位置と速度との関係を示す直線LV11を算出する。
図11(b)に示す例では算出部206は、車両Pのタイヤの領域およびその内側の領域に存在する特徴点軌跡C21〜C23の位置および速度を用いて、たとえば回帰分析により直線LV11を算出する。そして算出部206は、算出した直線LV11をX軸のプラス方向とマイナス方向のそれぞれに延伸し、特徴点軌跡との乖離が所定値以下である範囲を特定する。
図11(b)に示す例では、直線LV11をX軸のマイナス方向に延伸したものを直線LV12と呼び、直線LV11をX軸のプラス方向に延伸したものを直線LV13と呼んでいる。
【0093】
算出部206は、
図11(b)の左端から
図11(b)の中央付近の特徴点軌跡C26までは、直線LV11との距離が所定値以下であり、特徴点軌跡C27および特徴点軌跡C27よりも図示右側の特徴点軌跡は直線LV11との距離が所定値よりも大きいと判断する。そのため路面推定部205は、直線LV13の延伸を特徴点軌跡C26までとする。そして特徴点軌跡C27および特徴点軌跡C27よりも図示右側の特徴点軌跡を直線近似して直線LV2を算出する。最後に路面推定部205は、直線LV11を延伸した直線と直線LV2の交点を頂点Mとする。ただし路面推定部205は、特徴点軌跡C26と特徴点軌跡C27の中間のX座標を頂点Mの座標としてもよい。
【0094】
(路面推定部205のフローチャート)
図12は、第2の実施の形態における路面推定部205の動作を示すフローチャートである。
図12では第1の実施の形態と同様の処理には同一のステップ番号を付し、説明を省略する。路面推定部の前半の処理、すなわち全ての追跡が終了した軌跡を対象にステップS501〜S503の処理を行う点は第1の実施の形態と同様なので説明を省略する。次に路面推定部205はステップS521において、自車両Pの内側のプロットを直線で近似する。ステップS521の処理は、
図11(b)に示す例において、特徴点軌跡C21〜C23を用いて、直線LV11を算出することに相当する。
【0095】
続くステップS522では路面推定部205は、ステップS521において算出した直線から所定の距離よりも遠い特徴点軌跡を用いて他の直線を算出する。ステップS522の処理は、
図11(b)に示す例において、特徴点軌跡C27および特徴点軌跡C27よりも図示右側の特徴点軌跡を用いて直線LV2を算出することに相当する。続くステップS505では路面推定部205は、直線LV11および直線LV2の交点、すなわち交点位置を算出する。続くステップS506では路面推定部205は、算出部206に実行指令を出力して
図12に示す処理を終了する。
【0096】
上述した第2の実施の形態によれば、次の作用効果が得られる。
(6)路面推定部205は、車両Pが走行する領域における特徴点の軌跡を用いて車両Pが走行する平面を推定する。そのため車両Pの乗員や積み荷の分布に偏りがあり、車両Pが路面に対して傾いている場合でも、車両Pの接地面を含む平面を正確に算出できる。
【0097】
上述した各実施の形態および変形例において、プログラムはROM103に格納されるとしたが、プログラムはフラッシュメモリ112に格納されていてもよい。また、キャリブレーション装置100が不図示の入出力インタフェースを備え、必要なときに入出力インタフェースとキャリブレーション装置100が利用可能な媒体を介して、他の装置からプログラムが読み込まれてもよい。ここで媒体とは、たとえば入出力インタフェースに着脱可能な記憶媒体、または通信媒体、すなわち有線、無線、光などのネットワーク、または当該ネットワークを伝搬する搬送波やディジタル信号、を指す。また、プログラムにより実現される機能の一部または全部がハードウエア回路やFPGAにより実現されてもよい。
【0098】
上述した各実施の形態および変形例は、それぞれ組み合わせてもよい。上記では、種々の実施の形態および変形例を説明したが、本発明はこれらの内容に限定されるものではない。本発明の技術的思想の範囲内で考えられるその他の態様も本発明の範囲内に含まれる。