【実施例】
【0022】
以下、本発明を車両における区画線認識装置に適用した場合の例について説明する。
【0023】
図1は、本発明の一実施例における区画線認識装置の概略構成図である。
【0024】
図1において、区画線認識装置は、車両前方を監視するためのフロントカメラ101−Frと、車両後方を監視するためのリアカメラ101−Rrと、車両左側方を監視するための左サイドカメラ101−SLと、車両右側方を監視するための右サイドカメラ101−SRと、これら複数のカメラ(複数の撮像部)からの画像を処理する画像処理装置102と、地図情報等を記憶するための記憶装置103とを備えている。
【0025】
また、区画線認識装置は、CPU104と、メモリ105と、CAN I/F 106とを備えている。
【0026】
CPU104は、画像処理装置102の処理結果を用いて車両の自車線、隣接車線を構成する白線の情報をメモリ105に蓄える。そして、その情報をCAN I/F 106を通じてCANバス107に伝送し、車両制御ユニット108に送る。
【0027】
図2は、本発明の一実施例におけるソフトウェア構成の例であり、画像処理装置102及びCPU104の内部機能ブロックを含む図である。
【0028】
図2において、各カメラ101−Fr、101−Rr、101−SL、及び101−SRに対応して、特徴点抽出部201(201−SL、201−SR、201―Rr、201−Fr)、座標変換部202(202−SL、202−SR、202―Rr、202−Fr)が備えられている。
【0029】
特徴点抽出部201は、画像処理装置102に設けられており、カメラ101(カメラ101−Fr、101−Rr、101−SL、及び101−SR)で撮影された画像から特徴点を抽出する。特徴点を抽出する手法は、例えば、輝度値が黒色相当と白色相当の境界エッジを用いる手法が存在する。それらの距離が白線幅相当であれば特徴点とする。その他にも様々な手法が考えられるが、本実施例においてはどのような手法であっても構わない。
【0030】
座標変換部202は、画像処理装置102に設けられており、特徴点抽出部201で得られた特徴点の座標を俯瞰座標に変換するものである。俯瞰座標に変換された結果は、メモリ105に設けられた共通座標バッファメモリ206に集約される。
【0031】
カメラ判定部203は、どのカメラから検知された特徴点を採用するかを判定する。各カメラの汚れ方、各カメラが白線を誤検知していないかを判定し、適切なカメラを選択する(利用可能なカメラ(撮像部)を判定する)。
【0032】
また、状態遷移判定部204は、共通座標バッファメモリ206に集約された特徴点の出現位置を判定し、各位置における特徴点セグメント(特徴点の集合)の有無の状況を状態遷移モデルのノード(特徴点セグメントの出現状態)として確定する。更に、前フレームのノードからの遷移を判定し、破線の状態遷移モデルに合致するか否かを判定する。尚、特徴点セグメントは、互いの距離が近い特徴点の集合である。例えば、互いの距離が10cm以内である特徴点の集合、といった定義である。
【0033】
線種判定部205は、状態遷移判定部204の結果に基づいて線種を判定する。
【0034】
カメラ判定部203、状態遷移判定部204、及び線種判定部205は、CPU104内の機能ブロックである。
【0035】
なお、本実施例では、道路を路面上の区画線として実線、破線及びこれらの不検知を扱うことにする。線種の判定は、遷移状況が破線の状態遷移モデルに合致する、誤検知や不検知の状況ではないことを以って破線と判定する。そうでない場合には、実線あるいは不検知となる。詳細な処理については後述する。
【0036】
図3は、本実施例における概略処理フローチャートである。この処理フローチャートは、画像1フレーム分の処理である。
【0037】
まず、
図3のステップ301で、各カメラ101(101−SL、101−SR、101−Rr、101−Fr)により撮像された画像から特徴量を抽出する。これは、特徴点抽出部201の処理に相当する。
【0038】
次のステップ302は、抽出された特徴量を共通座標である俯瞰座標に変換する。これは座標変換部202の処理に相当する。
【0039】
次に、ステップ303で、選択するカメラを判定する。これはカメラ判定部203の処理である。
【0040】
次に、ステップ304では、ステップ303で選択されたカメラの特徴点座標を用い、俯瞰座標上での特徴点出現位置の状態遷移を判定する。これは、状態遷移判定部204の処理である。
【0041】
最後に、ステップ305で、線種を判定する。これは線種判定部205の処理である。
【0042】
図4は、特徴点抽出部201の処理フローを示した図である。ここでは、車両に搭載されるフロントカメラとリアカメラを想定して説明する。
【0043】
まず、
図4のステップ401で、カメラ101から入力された画像からエッジを抽出する。エッジ抽出の手法としては、例えばソーベルフィルタ等の微分フィルタを用いてエッジ画像を作成する手法が好適である。あるいは、輝度に応じて画像全体を路面、白線、それ以外に分類し、各分類の境界をエッジとみなして抽出してもよい。
【0044】
次に、抽出した各エッジについてエッジ強度を調べ、強度の極大、極小となるエッジを探索する(ステップ402)。これはまず、各y座標において、左から右へ(x座標の小さい方から大きい方へ)エッジを探索し、エッジ強度が正になるエッジ(輝度低から輝度高になる境界)を探す。更に、右へ探索し、エッジ強度が負になるエッジ(輝度高から輝度低になる境界)を探す。
【0045】
これらのエッジのx座標の互いの差分が閾値の範囲に入っているか否かを判定し(ステップ403)、閾値以内であれば、それらのうち、自車に近い方のエッジ座標を特徴点として保存する(ステップ404)。これを全エッジ座標について実行することで、白線特徴量を抽出することができる。
【0046】
なお、サイドカメラの場合はx、y座標の扱いを逆にする必要がある。例えば、
図4に示したフローチャートでx、y座標の扱いを逆にするか、画像を90°回転して処理するかのいずれかにすれば、同様の処理が可能である。
【0047】
図5は、座標変換部202の処理フローである。区画線の判定処理には、俯瞰座標を用いるのが好適であり、
図5に示した処理フローはそれを前提にしたものである。
【0048】
まず、
図5のステップ501で、各カメラ101の外部パラメータと内部パラメータを取得する。これはキャリブレーションと呼ばれる処理であり、種々の技術が開示されている。このキャリブレーション処理は、自動車の出荷時に1回だけ実施する場合や、走行中に常時リアルタイムに実行される場合など、様々である。
【0049】
本実施例においては、既に保持しているキャリブレーション結果を取得しても、走行中にその都度実行してもよい。
【0050】
次に、各カメラ画像中の全特徴点につき、カメラ101のパラメータを用いて俯瞰座標に変換する(ステップ502)。一般的に、画像座標と俯瞰座標の関係は、カメラの外部パラメータと内部パラメータによって記述が可能である。俯瞰座標への変換後、結果をバッファリングする(ステップ503(共通座標バッファメモリ206に格納する))。
【0051】
図5に示したステップは、カメラ101の数及び特徴点の数だけ実行される。
【0052】
次に、カメラ判定部203の処理について説明する。カメラ判定部203では、汚れているカメラを排除したり、白線以外の部分から特徴点を抽出していると考えられる特徴点セグメントを排除したりする。
【0053】
図6は、カメラ判定部203の処理フローを示す図であり、
図3のステップ303の処理に相当するフローを示す図である。これは、カメラ101それぞれに対して実行するものである。
【0054】
まず、
図6のステップ601で、レンズ汚れの判定を実行する。この手法は、例えば特開2014−027539号公報等に開示されているような方法(レンズの輝度勾配に基づいてレンズ表面の白濁度を算出する方法)が適用可能である。
【0055】
カメラ101すべてについて汚れ判定が終了したら、ステップ602の誤検知判定に移る。この誤検知判定は、各カメラ101で抽出された特徴点の座標に基づいて、誤検知か否かを判定するものであり、「汚れ無し」と判定されたカメラの特徴点座標に基づいて実行される。ステップ602の処理については後述する。
【0056】
なお、汚れが無いカメラが無い場合は、誤検知の判断は不可となる。
【0057】
次に、汚れ無しのカメラ101を対象に、ステップ602の誤検知判定結果を得て(ステップ603)、誤検知しているか否かを判断する。誤検知していなければステップ605に進んで、誤検知していないと判断されたカメラ101から得られた特徴点の俯瞰座標を共通座標バッファメモリ206に展開する(後述する
図19に示すデータ構造としてのように共通座標バッファメモリ206に格納される)。
【0058】
図7は、
図6に示したステップ602の誤検知判定の処理フローである(区画線である白線以外の部分から特徴点が抽出されたカメラを、誤検知しているカメラと判定(特定)するための処理フロー)。まず、
図7のステップ701で、各カメラ101から抽出された特徴点セグメント同士の距離をスコア化する。次に、そのスコアを用いて、各特徴点セグメントの信頼度を判定し、信頼度が閾値以上の特徴点セグメントを残す(ステップ702)。ステップ701、702の処理について、図を用いて更に説明する。
【0059】
図8は、
図7に示したステップ701のスコア化の処理フローである。
【0060】
まず、
図8のステップ801で、自分以外の特徴点セグメント(対象とする特徴点セグメント以外の特徴点セグメント)を選択する。つまり、自分と、選択したセグメントとの関係をスコア化するということである。この両者が、自車からみて同じ側(路面の右側か左側)にあるかを判定する(ステップ802)。同じ側であれば、ステップ803の式(次式(1)、(2))にしたがってスコアを計算する。
【0061】
距離誤差=│x座標平均の差分│ ・・・(1)
スコア=30−距離誤差[cm] ・・・(2)
これは同じ側のセグメントの場合、距離差が30cm以内であれば同じ白線から抽出された特徴点であるとみなすということである。そして、スコアは、距離差が30cm以内であれば正になるように設定する。
【0062】
一方、互いに反対側のセグメントの場合には、ステップ804の式(次式(3)、(4))にしたがってスコアを計算する。
【0063】
距離誤差=││セグメント間距離│−350│ ・・・(3)
スコア=60−距離誤差[cm] ・・・(4)
上記式(3)において、350は車線幅(cm)である。
【0064】
セグメントが互いに反対側であれば、それらのセグメント間距離は車線幅相当のはずである。したがって、距離誤差はセグメント間距離と車線幅との差分である。そして、スコアは、60cmから距離誤差を減算したものである。
【0065】
セグメントが同じ側にある場合には距離差が30cm以内であれば同じ白線とみなすため、セグメントが互いに反対側にあれば、距離差がその2倍の60cm以内であれば位置関係として妥当である。そして、距離差が60cm以内の場合に正になるよう、スコアを設定する。スコアを計算した後、ステップ805にてスコアをバッファリングする(メモリ105に格納する)。これを全セグメントについて実行する。
【0066】
ただし、
図8で使用した30cmあるいは60cmという値は、本実施例の説明のための値であり、実施する際には適切に調整する必要がある。
【0067】
次に、
図7及び
図8に示したステップ701のスコア化の処理につき、
図9に示した特徴点の出現例を想定して述べる。
図9の丸1〜丸6の線分は、それぞれ、フロント左、左サイド、リア左、フロント右、右サイド、リア右におけるセグメントを示している。この位置関係に対し、
図8のステップ803、804に示したように(式(1)〜(4))、2本の白線の相対的な距離誤差を定義し、すべての白線の組合せについてスコアを算出する。
【0068】
図9において、座標系は自車中心を原点とする俯瞰座標系である。なお、
図9に示した単位はcmとし、丸1〜丸6のセグメントにおけるx座標平均値はそれぞれ、−170、−240、−168、−180、280、181とする。
【0069】
例えば、
図9に示したセグメント丸1とセグメント丸2との関係をスコア化する場合を考える。セグメント丸1とセグメント丸2は、自車からみて同じ側にあり、セグメント丸1の距離は−170であり、セグメント丸2の距離は−240であり、距離誤差は|−170−(−240)|=70となるため、スコアは30−70=−40となる。
【0070】
また、セグメント丸1とセグメント丸4との関係をスコア化すると、セグメント丸1とセグメント丸4は、自車からみて互いに異なる側にあり、セグメント丸4の距離は180であるから、距離誤差は||(−170−180)|−350|=0となり、スコアは60−0=60となる。
【0071】
これらの計算をセグメント丸1〜丸6の全てのセグメントの組合せについて実行する。
図10は、セグメント丸1〜丸6の全てのセグメントの組合せについて実行し、生成したデータ1001を示す表である。
【0072】
ここでは、車線幅を350cmと仮定して説明したが、実際は道路によって車線幅が異なる。異なる車線幅に対応するためには、例えばカーナビゲーションシステムから走行中の道路種別を得て、その種別に見合った車線幅を設定することが好適である。あるいは、走行中の道路の車線幅をカーナビゲーションシステムから得ても良い。
【0073】
図25は、道路種別とそれに対応する道路幅員の関係を示す道路別区画線情報の例を示す図である。
図25において、道路別区画線情報2501は、カーナビゲーションシステムが用いる地図データから得られる情報であり、例えばテキストデータあるいはデータベースとして記憶装置103に格納されるデータである。
【0074】
なお、道路別区画線情報2501に示した道路種別や道路幅員、破線間隔は一例であり、これらに限定されるものではない。このデータを参照することで、車線幅を得ることが可能である。
【0075】
次に、
図7のステップ702の信頼度の判定処理につき説明する。
図11は、ステップ702の信頼度の判定処理フローである。
【0076】
図11において、まず、全ての特徴点セグメントに対して、スコアの合計を計算する(ステップ1101)。次に、ステップ1102では、スコア合計の最小値が0または負の値か否かを判定すると共に、評価対象のセグメントが残っているか否かを判定する。もし、両者がYesであれば、ステップ1103に進み、スコア合計が最小となるセグメントを排除する。そして、残ったセグメントを対象にスコア合計を再計算する(ステップ1104)。スコア合計を再計算する際は、排除されたセグメントのスコアを除いて実行する。その後、ステップ1102に戻って同じ判定を実行する。判定条件のいずれかがNoであれば処理を終了し、Yesであれば前述したステップ1103以降の処理を繰り返す。
【0077】
図12は、ステップ702の信頼度の判定を
図10のデータ1001に対して適用する様子の説明図である。
図12を用いてステップ702の信頼度の判定を説明する。
【0078】
図12において、
図11に示したステップ1101の処理(スコアの合計計算)の結果は、データ1201のようになる。次にステップ1102で、スコア合計値の最小値を判定する。このとき、セグメント丸5のスコア−297が最小かつ負の値である。したがって、ステップ1103に進んでセグメント丸5のデータを排除し、ステップ1104でスコア合計を再計算する。その結果がデータ1202である。
【0079】
次に、
図11のステップ1102に戻ってスコア最小値を判定する。このとき、データ1202のスコア−103が最小かつ負の値である。したがって、ステップ1103に進んでセグメント丸2のデータを排除し、ステップ1104でスコア合計を再計算する。その結果がデータ1203である。
【0080】
そして、ステップ1102に戻ってスコア最小値を判定すると、データ1203の残セグメントすべてにおいてスコアが正のため、ここで処理は終了である。この結果、誤検知していると考えられるセグメントはセグメント丸2とセグメント丸5となり、残りのセグメント丸1、丸3、丸4、及び丸6の特徴点が共通座標バッファメモリ206に展開されることになる。
【0081】
次に、状態遷移を用いた線種判定について説明する。これは、
図11に示す処理フローで誤検知と判定されたセグメント以外のものを使用するが、まずは誤検知が無い場合について説明する。誤検知があった場合の処理については別途説明する。
【0082】
図13は、車両1301の周辺領域を俯瞰座標に基づいて分割した領域の定義を説明する図である。これは、状態遷移判定部204で特徴点セグメントの有無を判定する領域となる。
図13において、本実施例では、領域FL、FRはフロントカメラ101−Frより前方、領域RL、RRはリアカメラ101−Rrより後方、領域SL、SRはフロントカメラ101−Frとリアカメラ101−Rrの間とする。また、領域FL、SL、RLは車両1301の中心より左側、領域FR、SR、RRは右側とする。
【0083】
図13に示すように設定した領域に基づけば、フロントカメラ101−Frの特徴点は、領域FL、FRに、リアカメラ101−Rrの特徴点は領域RL、RRに出現することになる。また、領域FL、RLにはカメラ101−SLの特徴点が、領域FR、RRにはカメラ101−SRの特徴点がそれぞれ出現する可能性がある。
【0084】
図14は、区画線が破線の状態遷移モデル(特徴点の集合であるセグメントの出現状態を表すノードの遷移状態を示す、予め定められた状態遷移モデル)を示す図である。本実施例では、状態遷移モデルは6つのノード1401〜1406を保持するとして説明する。
【0085】
図14において、本状態遷移モデルは、左右の白線において共通のものであり、各ノードは、上からフロント領域、サイド領域、リア領域における特徴点セグメントの有無が記されている。例えば、左白線におけるノード1401は、領域FLに特徴点セグメントあり(丸印)、SL、RLに特徴点セグメント無し(×印)を表すノードである。
【0086】
各ノードからそのノードに直接遷移している線は、その状態を維持することを示す。
【0087】
また、各ノードを結ぶ矢印は、線種が破線の場合に遷移するノードである。すなわち、時計回りに遷移し、隣かその隣のノードへ遷移すれば破線の遷移に合致するものとする。例えば、現フレームでノード1401にいる場合、次のフレームでノード1402か1403のいずれかに遷移すれば破線の状態遷移モデルに合致し、この合致状態が1周以上続けば破線となる。
【0088】
例えば、ノード1401からノード1402に遷移し、続いてノード1402からノード1404に遷移し、さらに、ノード1404からノード1406に遷移し、そして、ノード1406からノード1401に遷移することで、1周することとなり(後述する累積値が6に対応)、破線と判断する。
【0089】
ただし、遷移するノードを隣またはその隣とする、合致状態が1周以上で破線とする等の条件については、本実施例の説明のために設定したものであり、必ずしもこれに限定されるものではない。例えば、遷移するノードを予め決めておくのではなく、遷移すると考えられるノードを車速に応じて予想し、それに合致すれば破線の遷移に合致するとしてもよい。
【0090】
これについて、
図15を参照しながら説明する。
図15は、ノードを車速に応じて予測して、破線の状態遷移に合致するか否かを判断する例の説明図である。
【0091】
図15において、白線を捕捉する領域は、領域1504であり、白線1504Lの下端のy座標をy(t)とする。
【0092】
また、車両1301の左には区画線としての破線があり、それを構成する白線の長さはd0、白線間の互いの距離をd1とする。このとき、車両1301は、領域FL(FLを包囲する点線)にて白線1502の下端点を捕捉しており、領域RL(RLを包囲する点線)にて白線1501の上端点を捕捉している。白線1502の下端点及び白線1501の上端点、それぞれのy座標はy(p2)及びy(p1)である。
【0093】
また、白線1501の下端のy座標はy(p0)=y(p1)−d0であるが、捕捉領域1504の領域外である。白線1502の上端点も同様に、y座標はy(p3)=y(p2)+d0であるが、捕捉領域1504の領域外である。
【0094】
時刻tの時点で、車両1301の直進方向における破線の端点座標を求める。座標を求める範囲は、次の画像フレームが得られるまでの時間と車速によって決まる。例えば、次の画像フレームが得られるまでの時間が1秒で、車速が40km/hとすると、車両1301は時刻t+1までに約11m進むことになる。したがって、約11m先で捕捉すると予想される白線の端点座標を求める。
【0095】
ここで、d0=3.5m、d1=4.5mとすると、車両1301が11m進む間に破線の1周期分(d0+d1)+3mを進むことになる。したがって、捕捉領域1505の領域FLで捕捉した白線の下端点は、車両1301から相対的に見た場合、3m下方に位置し、y座標はy(p2)’となる。
【0096】
領域RLで捕捉した白線上端点も同様に、車両1301から相対的に見た場合、3m下方にずれ、白線を捕捉する捕捉領域1505の領域外となる。また、捕捉領域外であった、白線1502の上端点が3m下方にずれて、捕捉領域1505内に入ったように見える。したがって、白線1503の端点は、捕捉領域1505の領域FLで上端点、領域SLで下端点が捕捉される。
【0097】
さらに、各端点の相対座標を求め、各領域のセグメント長を求めれば、ノードパターンがわかる。本実施例の場合は、捕捉領域1505において、FLで在り、SLで在り、RLで無しのため、「○○×」となり、ノード1402に遷移すると予想できる。そして、時刻t+1において、実際にノードパターンを特定し、予想と合致するか判断すればよい。
【0098】
図16は、状態遷移モデルの、どのノードにいるかを判定する処理フローである。
図16に示した処理フローは、左右の白線それぞれに対して実施する。まずステップ1601で、各カメラ101の特徴点を、
図13の領域ごとに集約する。領域ごとの集約は、当該特徴点を抽出したカメラ101に関しては考慮せず、各特徴点の俯瞰座標のみに基づいて実行される。次に、ステップ1602で、各領域の特徴点を使うか否かを判定する。これは、
図7のステップ702の信頼度判定の結果に基づいて実行する。ステップ1602の処理については後述する。
【0099】
次に、各領域のループに入る。各領域とは、例えば左白線であればFL、SL、RLのことである。
【0100】
まず、ステップ1603で、ステップ1602の結果を評価し、当該領域のデータを使わない場合にはループの先頭に戻り、次の領域の処理を実行する。そうでなければ、ステップ1604にて、各領域における特徴点セグメント長の最大値を求める。
【0101】
次に、ステップ1605で、その長さが閾値1より長いか否かを判定する。閾値1より長ければセグメントありと判定し(ステップ1606)、短ければセグメントなしと判定する(ステップ1607)。
【0102】
なお、セグメント長は、特徴点同士の距離の累積であり、特徴点同士の距離が閾値2(図示しない)より小さければセグメントの継続と判断し、それ以上であればセグメントの切れ目と判断する。各領域についてセグメントの有無を判断したら、現在フレームのノードを確定する(ステップ1608)。セグメントがいずれの領域にも存在しなかった場合には、どのノード無しとして処理する。
【0103】
図17は、線種を判定するフローである。まず、
図17のステップ1701で、
図16のフローで確定した現在フレームのノードを得る。次に、ステップ1702で、ノードが無いか否かを判定し、ノード不検知であればステップ1704にて、連続3回ノードが無かったか否かを判断する。もし、連続して3回ノードが無かったのであれば、不検知とする(ステップ1710)。そうでない場合には、前フレームの結果を継続する(ステップ1708)。
【0104】
ステップ1702でノードありの場合、前フレームで不検知だったか否かを判断する(ステップ1703)。前フレームで不検知だった場合には実線とする(ステップ1711)。つまり、不検知の後で最初にノードありとなった場合には実線とする。
【0105】
ステップ1703において、前フレームでノードありであった場合には、ステップ1705で、状態遷移が破線のパターンに合致するか否かを判定する。この判定においては、前フレームのノードから現在フレームのノードまでの移動距離が0〜2の場合に破線のパターンに合致しているとみなす。但し、0(すなわち、移動しない)は連続3回以内の場合のみとする。
【0106】
ステップ1705の判定で、破線の遷移パターンに合致しない場合には、連続3回目か否かを判定する(ステップ1706)。連続3回目の場合には実線とする(ステップ1711)。連続3回目では無い場合には前フレームの結果を継続する(ステップ1709)。
【0107】
ステップ1705の判定で、破線の遷移パターンに合致している場合、ステップ1707で、
図7の遷移を1周したか否かを判定する(ノードの時系列的データを用いて判定する)。1周していれば破線として線種を確定し(ステップ1712)、そうでない場合には実線とする(ステップ1711)。1周したか否かは、前フレームのノードからの差分を累積した値が6以上になったか否かで判定が可能である。この累積値は、線種がステップ1704の判定でNo、またはステップ1703の判定でYesになった場合に0にリセットされ、そうでない場合に累積されていくものである。
【0108】
以上の処理につき、
図18に示された特徴点の出現事例を用いて更に説明する。
図18の(a)〜(e)は、それぞれ、
図13で定義した白線の捕捉領域を示している。
【0109】
図18の(a)においては、カメラ101−Frから特徴点セグメント1801、1804が、カメラ101−SLから特徴点セグメント1802が、カメラ101−Rrから特徴点セグメント1803が、それぞれ抽出されている。捕捉領域としてみれば、領域FL、SL、RL、FRに特徴点セグメントが出現していることになる。
【0110】
したがって、左白線のノードパターンは「○○○」となり、
図14に示したノード1403が現フレームのノードとなる。また、右白線のノードパターンは「○××」となり、ノード1401が現フレームのノードとなる。この時点で、右白線、左白線はともに実線と判定される。
【0111】
次の、
図18の(b)においては、左白線のノードパターンは
図18の(a)と同じである。
図18の(b)の右白線については、カメラ101−Frから特徴点セグメント1804が抽出され、カメラ101−SRから特徴点セグメント1805が抽出されている。領域FR、SRにセグメントが現れているため、ノードパターンは「○○×」となり、ノード1402が現フレームのノードとなる。また、右白線において、前フレームのノードからの移動距離は1となり、累積値も1となる。この時点でも、右白線、左白線はともに実線と判定される。
【0112】
次の
図18の(c)においては、左白線のノードパターンに変化は無い。一方、右白線については、カメラ101−SRから特徴点セグメント1805が抽出され、カメラ101−Rrから特徴点セグメント1806が抽出されている。領域SR、RRにセグメントが出現しているため、ノードパターンは「×○○」となり、ノード1404が現フレームのノードとなる。前フレームからの移動距離は2となり、累積値は3となる。この時点でも、右白線、左白線はともに実線と判定される。
【0113】
次の
図18の(d)においては、左白線のノードパターンに変化は無い。一方、右白線については、カメラ101−Rrから特徴点セグメント1806が抽出されている。領域RRのみにセグメントが出現しているため、ノードパターンは「××○」となり、ノード1405が現フレームのノードとなる。前フレームからの移動距離は1となり、累積値は4となる。この時点でも、右白線、左白線はともに実線と判定される。
【0114】
次の
図18の(e)においては、左白線のノードパターンに変化は無い。一方、右白線については、カメラ101−Frから特徴点セグメント1807が抽出されている。領域FRのみにセグメントが出現しているため、ノードパターンは「○××」となり、ノード1401が現フレームのノードとなる。前フレームからの移動距離は2となり、累積値は6となる(
図14のノードを1周する)。この時点で、右白線は実線であり、左白線は破線と判定される。
【0115】
図19は、内部で保持するデータ構造を示す表である。
図19に示したデータは
図13で示した領域ごとに保持する。
【0116】
図19において、領域数1901は、データを保持している領域数であり、本実施例では、FL、FR、SL、SR、RL、及びRRの6となる。領域情報1902は、線種判定に必要な情報である。このうち、現在ノード1903は、現フレームのノードであり、ノード1401〜1406に割り振られたIDが格納される。セグメント長1904は、特徴点セグメントの長さであり、cm単位で格納されるのが好適である。停止数1905は、同じノードに停滞している連続フレーム数である。
【0117】
誤検知数1906は、状態遷移に乗らなかった連続フレーム数である。不検知数1907は、線種が確定できなかった連続フレーム数である。特徴点数1909は、当該領域に含まれる特徴点数である。俯瞰座標1910は、特徴点数1909分の特徴点の俯瞰座標が格納されている。マスクフラグ1911は、線種判定の際に当該の領域のデータを使うか否かにつき、領域ごとにフラグが格納されている。このフラグが立っている領域がある場合、線種判定の際に、ノード1401〜1406のノードパターンのうち、当該領域についてマスクされる。
【0118】
図20は、
図16に示したステップ1602のマスク領域判定の処理フローである。カメラ101−Fr、101−Rrは、設置場所より前方に白線が見えるため、抽出される特徴点もそれぞれ領域FL、FR、領域RL、RRのみに集約される。一方、カメラ101−SL、101−SRでは、実線の場合に横長に見えることになり、抽出される特徴点は複数領域に分散する。
【0119】
したがって、カメラ101−SLが信頼できない場合には、領域SLをマスクしてよい。一方、カメラ101−Fr、101−Rrが信頼できない場合は、カメラ101−SLでの特徴点抽出状況や信頼度を考慮してマスクの有無を判断する必要がある。
図20は、これを踏まえた処理フローである。なお、左白線の判定を前提として説明する。
【0120】
図20において、まず、ステップ2001は、カメラ101−SLが信頼できるか否かによる分岐である。信頼できない場合には、ステップ2002で領域SLをマスクする。信頼できる場合は、ステップ2003の、カメラ101−SLが不検知か否かの分岐へ進み、不検知でない場合には何もせずに処理を終了する。ステップ2003において、カメラ101−SLが不検知の場合にはカメラ101−Fr、101−Rrのマスク判定を実行する。
図20では、カメラ101−Frの判定が先になっているが、どちらを先に実行してもよい。
【0121】
ステップ2004は、カメラ101−Frが信頼できるか否かの分岐であり、信頼できない場合にはステップ2005にて、領域FLをマスクする。そうでない場合には、ステップ2006の、カメラ101−Rrが信頼できるか否かの分岐へ進み、信頼できない場合にはステップ2007にて、領域RLをマスクする。そうでない場合には処理終了である。
【0122】
なお、マスク処理は、車線変更にも適用可能である。車線変更で車両1301が跨ぐ白線は、サイドカメラ101−SL、101−SRで捕捉することができない。したがって、車線変更の方向に設置されているサイドカメラ101−SL又は101−SRでの情報は信頼できないとみなして
図19の処理を実行すればよい。例えば、右車線へ移動する場合には、カメラ101−SRが信頼できないとして処理を実行すればよい。
【0123】
図21は、サイドカメラが信頼できないとされた場合における破線の状態遷移モデルを示す図である。なお、信頼できないとされる理由は、前述したとおり、カメラレンズが汚れている、誤検知の可能性がある、ということである。ここでも、左白線の判定を前提とし、領域SLがマスクされた場合を例に説明する。この場合、各ノードのノードパターンにおいて領域SLの部分をマスクする(
図21において、領域SLに対応する箇所をグレー表示している)。つまり、領域FL、RLだけの情報で線種を判定する。また、特徴点抽出結果から作成されるノードパターンも同様に、SLの部分をマスクする。こうすることで、状態遷移モデルを作り直すことなく線種判定を実行できる。
【0124】
なお、フロントカメラ101−Frが信頼できない場合も同様に、FLの部分をマスクした状態遷移モデルを作成する。この場合は、左サイドカメラ101−SL及びリアカメラ101−Rrにより、領域SL、RLだけの情報で線種を判定する。リアカメラ101−Rrが信頼できない場合も同様に、領域RLの部分をマスクした状態遷移モデルを作成する。この場合は、フロントカメラ101−Fr及び左サイドカメラ101−SLにより、領域FL、SLだけの情報で線種を判定する。
【0125】
これまでは直線道路を前提として説明してきたが、道路がカーブの場合も適用可能である。カーブにおいては、特徴点を俯瞰座標に変換すると、特徴点セグメントも曲がって見える。この場合は、カーブの曲率に基づいて、特徴点を直線状に並べ直すことで、これまで述べた処理が実行可能である。
【0126】
図22は、上記のカーブに対応するために必要な処理のフローである。この処理は座標変換部202が行う。
【0127】
図22において、まず、ステップ2201で、片側の白線の全特徴点座標に基づいて曲線近似する。曲線近似については、様々なもの手法が公知であるため、それらを適用可能である。次に、ステップ2202で、当該曲線において、x座標が極大(または極小)となるy座標を求める。次に、ステップ2203にて、特徴点をy座標順にソートする。
【0128】
次に、特徴点のy座標順のループに入る。まず、ステップ2204にて、曲線との距離が最短のx座標を調べる。それが確定したら、その前のy座標にて確定した、曲線との距離が最短の特徴点とのユークリッド距離を計算する(ステップ2205)。そして、特徴点座標と距離をバッファリングする(ステップ2206)。
【0129】
ループを抜けたら、x=極大(極小)x座標となる直線を設定し(ステップ2207)、特徴点同士の距離を保持しながら、曲線との距離が最短の特徴点を当該直線の上に並べ替える(ステップ2208)。
【0130】
上述したカーブ対応処理を模式的に示したのが
図23である。
図23の(a)は処理前、
図23の(b)が処理後の図である。
【0131】
図23の(a)において、曲線2301は、左白線から抽出された特徴点p
l1〜p
l5による近似曲線である。曲線2302は、右白線から抽出された特徴点p
r1〜p
r4による近似曲線である。なお、特徴点の記号の添字は、y座標順にソートされている。また、各特徴点間の距離d
l1〜d
l4、d
r1〜d
r3は、
図22に示したステップ2205にて計算された結果である。また、車線幅wは、曲線2301、2302の極大(極小)となる点同士の距離である。
図22のステップ2207を実行する際は、これらの極大(極小)点を通る直線をy軸に平行に設定するため、車線幅wがそのまま維持される。
【0132】
このようにして、曲線2301、2302に対して設定された直線が、
図23の(b)に示す直線2303、2304である。
図22に示したステップ2208で、これらの直線上に、特徴点p
l1〜p
l5、p
r1〜p
r4を並べ替える。この際は、距離d
l1〜d
l4、d
r1〜d
r3が維持されるように並べ替える。こうすることで、カーブであっても直線と同じ処理を用いることが可能である。
【0133】
次に、車線変更時の処理について説明する。例えば右車線への変更の際は車両が右白線を跨ぎ、それがやがて左白線になる。車線変更中であっても、跨ぐ白線は捕捉され続けており、また、その捕捉位置が変わる。したがって、例えば右車線への変更時には、右白線に関して得られた情報を左白線に、左車線への変更時には左白線に関して得られた情報を右白線に引き継ぐ。これによって、車線変更時の性能低下を防ぐことができる。
【0134】
車線変更の処理について、
図24に示した車線変更の処理フローを用いて説明する。
図24において、まず、ステップ2401で、捕捉する白線を切り替えるか否かを判定する。この判定には、車両1301と、跨いでいる白線との位置関係を用いるのが好適である。例えば右車線への変更の場合、跨いでいる白線が車両1301の真ん中より左に移動した時点等と決めればよい。なお、前述したように、車線変更方向の白線は、サイドカメラでは捕捉できないため、この判定はフロントカメラ101−Fr、リアカメラ101−Rrのいずれか、あるいは両者を用いるのが好適である。
【0135】
ステップ2402は、ステップ2401の結果による分岐である。切替え不要の場合には、ステップ2405にて、
図3に示した処理を実行する。
図3の処理はこれまでに述べてきたとおりである。
【0136】
ステップ2402において、切替え要の場合にはステップ2403にて、変更方向の白線情報を反対側白線情報バッファに移し、ステップ2404にて、変更方向の白線情報は初期化する。こうすることで、跨いでいる白線については車線変更中であっても継続的に線種判定が可能である。
【0137】
車線変更の判定処理は、状態遷移判定部204により行われる。
【0138】
これまでに述べてきた線種判定手法では、破線間隔に応じて領域SL、SRの範囲を変えることで、様々な破線間隔にも対応可能である。車両が走行中の道路種別をカーナビゲーションシステムから受け取り、更に
図25の道路別区画線情報2501を参照することで、破線間隔を得ることが可能である。
【0139】
本実施例では、SLの範囲をカメラ101−Frと101−Rrの間の領域としていたが、この範囲を可変にすることで様々な破線間隔に対応可能である。
【0140】
この処理について
図26に処理フローを示す。
図26において、まず、ステップ2601で、走行中の道路種別を得る。次に、ステップ2602にて、当該道路種別をキーとして破線間隔情報を得る。次に、ステップ2603にて、現在の領域SL、SRのy方向長と、破線間情報から得られた破線間隔とを比較する。領域SL、SRのy方向長の方が長ければ、ステップ2604に進み、領域SL、SRのy方向長を破線間隔と同じ値とする。
【0141】
また、高速道路等の分流、合流における太い破線においても、車両1301の走行地点をカーナビゲーションシステムから得ることで、太い破線に対応した領域設定が可能となる。
【0142】
なお、
図14に示した状態遷移モデルによる破線判断においては、1周するのに必要な最低のノード数は3である(例えば、1401→1403→1405→1401であれば、ノード1401、1403及び1405の3つ)。このため、破線判断のために必要な画像フレームは最低3フレームである。
【0143】
また、上述したように、フロントカメラ101−Frが信頼できない場合は、左サイドカメラ101−SL及びリアカメラ101−Rrが使用され、リアカメラ101−Rrが信頼できない場合は、フロントカメラ101−Fr及び左サイドカメラ101−SLが使用される。また、サイドカメラ101−SLが信頼できない場合は、フロントカメラ101−Fr及びリアカメラ101−Rrが使用される。
【0144】
よって、区画線判断のために必要な信頼性を有するカメラの個数は、車両の片側で最低2個である。
【0145】
ただし、サイドカメラ101−SLが、領域FLの下端部より上方及び領域RLの上端部の下方まで撮像可能なカメラであれば、サイドカメラ101−SLのみで区画線判断が可能であるから、この場合、サイドカメラ101−SLが信頼性を有するときは、区画線判断のために必要なカメラの個数は、車両の片側で最低1個である、よって、車両全体としては信頼性を有するカメラの個数は2個である。
【0146】
このため、本発明の他の実施例として、車両の両側面(左右の側面)にのみ、カメラ(左右のサイドカメラ101−SL、101−SR)を配置し、そのカメラの信頼性を判断し、信頼性を有するカメラの状態遷移を判断して区画線の線種を判断する構成も含まれる。
【0147】
以上のように、本発明の一実施例によれば、車両の前方、後方及び側方(側面)に配置した複数の撮像部を備え、これら複数の撮像部が撮像した画像に基づいて、信頼度を判定し(利用可能な撮像部の判定)、誤検知していると判断した撮像部からの画像を除外し、画像の特徴点を抽出して特徴点の出現位置の状態遷移を判定することにより区間線の種別を判断するように構成している。
【0148】
従って、路面における区画線の線種を高精度に判定可能な区画線認識装置を実現することができる。
【0149】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。
【0150】
例えば、上述した例は、本発明の区画線認識装置を車両に搭載した場合の例であるが、区画線を利用して走行する移動体(走行ロボット等)に搭載する場合にも適用可能である。