(57)【特許請求の範囲】
【請求項１】
路面を撮像する撮像手段と、
前記撮像手段により撮像された画像データから車線境界線候補を抽出する抽出手段と、
多重線に関する多重線情報を管理する管理手段であって、当該多重線情報は、多重線を構成する線分の数、線分の位置、線幅および車線境界線に該当する線分を識別するための識別情報を含む、前記管理手段と、
前記抽出手段により抽出された車線境界線候補から単線または多重線を検出する検出手段と、
前記検出手段により車線境界線候補の単線または多重線が検出されたとき、前記多重線情報に基づき前記車線境界線候補の車線境界線を判定する判定手段とを有し、
前記判定手段は、検出された車線境界線候補の線分の数が前記多重線情報の線分の数よりも少ない場合には、少なくとも車線境界線候補の線分の線幅と多重線情報の線分の線幅とを対比することで車線境界線候補の線分に該当する多重線情報の線分を特定し、車線境界線候補において不足する仮想線分を作成し、前記多重線情報の前記識別情報に基づき車線境界線を判定する、車線境界検出装置。
【請求項２】
前記判定手段は、線幅の差による識別ができない場合には、線分の位置を対比し、車線境界線候補に該当する多重線情報の線分を識別する、請求項１に記載の車線境界検出装置。
【請求項３】
車線境界検出装置はさらに、前記検出手段により検出された単線または多重線の検出結果に基づき前記多重線情報を前記管理手段に登録する登録手段を含み、
前記判定手段は、二重線の検出状態から単線を検出したとき、検出された単線が前記多重線情報としての二重線のいずれの線分に該当するかを判定し、不足する線分を仮想的に作成する、請求項１または２に記載の車線境界検出装置。
【請求項４】
車線境界検出装置はさらに、前記検出手段により検出された単線または多重線の検出結果に基づき前記多重線情報を前記管理手段に登録する登録手段を含み、
前記判定手段は、三重線の検出状態から二重線あるいは単線を検出したとき、検出された二重線あるいは単線が前記多重線情報としての三重線のどの二重線あるいは単線に該当するかを判定し、不足する線分を仮想的に作成する、請求項１または２に記載の車線境界検出装置。
【請求項５】
車線境界検出装置はさらに、前記判定手段の判定結果を出力する出力手段を含む、請求項１ないし４いずれか１つに記載の車線境界検出装置。
【請求項６】
請求項１ないし５いずれか１つに記載の車線境界検出装置と、
車線境界検出装置によって検出された車線境界線に基づき車両が車線境界線を逸脱したか否かを判定する逸脱判定手段とを含む運転支援装置。
【請求項７】
運転支援装置はさらに、前記逸脱判定手段により車両が車線境界線を逸脱したと判定されたとき、警告を与える警告手段を含む、請求項６に記載の運転支援装置。
【請求項８】
運転支援装置はさらに、道路地図画面上に自車位置を表示するナビゲーション手段を含み、前記逸脱判定手段および前記警告手段は、前記ナビゲーション手段が実行されているときに実施される、請求項７に記載の運転支援装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、撮像画像から車線境界線を検出する車線境界検出装置に関し、特に、多重線を検出した際の車線境界線の検出方法に関する。
【背景技術】
【０００２】
車両に搭載されたカメラ等の映像手段によって取得した路面画像から道路の白線(車線境界線)を検出する方法において、多重線に対応する方法として、例えば、特開２００３−３０８５３４がある。
この方法では、図２８Ａないし図２８Ｃに示すように、路面画像を横方向へ走査して、画像の明度が相対的に所定以上高く変化するアップエッジと、画像の明度が相対的に所定以上低く変化するダウンエッジを検出して路面の白線による明部を抽出する。路面画像の縦方向の各位置で、この中点を白線位置候補点とする。全ての走査が終わった後、白線位置候補点に対してハフ変換を行い、仮白線位置（白線中央位置を規定する線）を決定する。横方向の走査において、明部に対応するアップエッジとダウンエッジとからなるペアエッジが複数検出されたときには、図２８Ｂ、図２９Ｂの（ｂ−１）、（ｂ−２）（ｃ）に示すようにペアエッジ数、ペアエッジの間の間隔（白線間の間隔）に基づいて、複数のペアエッジの配列（白線の配列）を判定し、配列ごとに予め定義した相対位置を白線位置候補点とする。
【０００３】
（ｂ−１）、（ｂ−２）は、ペアエッジ間の間隔（白線間の間隔）によって、二重線と、三重線の外側の２本の補助線が現れたかを判断して白線位置候補点を決める。例えば、図２９（ａ）の場合、二重線の部分では外側のペアエッジの中点を白線候補点とすると、それぞれの走査に対して、図２９（ｂ）のように白線位置候補点が算出され、ハフ変換の結果、a、bの仮白線位置（白線中央位置を規定する線）が決定される。
【０００４】
また、特許文献１には、路面を撮像した撮像画像中から境界線候補を抽出し、抽出された境界線候補が、車線境界線および複数の補助線からなる複合線である場合に、当該境界線候補の線種を識別し、当該境界線候補の中から信頼性が最も高いものを基準線として設定し、当該基準線が補助線である場合には補正を加えて境界パラメータを設定する車線境界検出装置、車線境界検出プログラムが開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特許第５４０２８２８号
【発明の概要】
【発明が解決しようとする課題】
【０００６】
特許文献１の方法は、多重線の全てを検出することを前提にし、検出された線分の中で信頼性の最も高い線分を基準に車線境界線を算出するものであるため、多重線の一部しか検出することができなかった場合には、車線境界線を算出することができなくなる可能性がある。例えば、図２４（ａ）の二重線を撮像した場合には、車線境界線を正しく検出できるが、図２４（ｂ）のように、二重線のうちの補助線だけしか存在しない場合には、車線境界線を正しく検出することができない。図２５は、図２４（ａ）から図２４（ｂ）に遷移したときの車線境界線の俯瞰図である。車線境界線の位置がＰ１からＰ２にずれてしまう。
【０００７】
また、図２６（ａ）に示すような三重線の場合、白線のかすれや劣化、あるいはカメラ画像の解像度などの状況などにより、図２６（ｂ）、（ｃ）のように、２本の線分しか検出できないときがある。図２６に対する白線位置候補点の検出結果を図２７に示す。図２６（ａ）、（ｂ）の場合、車線境界線を正しく検出できるが、図２６（ｃ）の場合、二重線の右側のペアエッジの中点を白線候補点とすると、車線境界線が誤る可能性がある。
【０００８】
本発明は、このような従来の課題を解決するものであり、多重線の一部が欠落した場合であっても車線境界を検出することができる車線境界検出装置およびこれを利用した運転支援装置を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明に係る車線境界検出装置は、路面を撮像する撮像手段と、前記撮像手段により撮像された画像データから車線境界線候補を抽出する抽出手段と、多重線に関する多重線情報を管理する管理手段であって、当該多重線情報は、多重線を構成する線分の数、線分の構成および車線境界線の識別を含む、前記管理手段と、前記抽出手段により抽出された車線境界線候補から単線または多重線を検出する検出手段と、前記多重線情報を参照し、前記検出手段の検出結果に基づき前記多重線情報を作成する作成手段と、作成された多重線情報を前記管理手段に登録する登録手段と、を有する。
【００１０】
好ましくは前記作成手段は、前記検出手段により検索された線分に一致する多重線情報が前記管理手段に登録されているか否かを検索する検索手段を含み、前記作成手段は、前記検索手段により検索された多重線情報の線分の数が前記検出手段により検出された線分の数よりも大きい場合には、前記多重線情報に基づき仮想線分を作成する。好ましくは前記作成手段は、前記仮想線分を作成するとき、前記仮想線分を含む多重線における車線境界線を識別する。好ましくは車線境界検出装置はさらに、前記管理手段から多重線情報を削除する削除手段を有し、前記削除手段は、前記作成手段によって参照された回数に基づき前記多重線情報を削除する。好ましくは車線境界検出装置はさらに、前記検出手段の検出結果または前記作成手段により作成された多重線情報を出力する出力手段を含む。
【００１１】
本発明に係る運転支援装置は、上記構成の車線境界検出装置と、車線境界検出装置によって検出された車線境界線に基づき車両が車線境界線を逸脱したか否かを判定する逸脱判定手段とを含む。好ましくは運転支援装置はさらに、前記逸脱判定手段により車両が車線境界線を逸脱したと判定されたとき、警告を与える警告手段を含む。好ましくは運転支援装置はさらに、道路地図画面上に自車位置を表示するナビゲーション手段を含み、前記逸脱判定手段および前記警告手段は、前記ナビゲーション手段が実行されているときに実施される。
【発明の効果】
【００１２】
本発明によれば、抽出された車線境界線候補から単線または多重線を検出し、管理手段に管理された多重線情報を算出して、検出された単線または多重線から多重線情報を作成するようにしたので、一部が欠落された車線が撮像された場合であっても、多重線情報を参照して欠落した車線を補うことができ、これにより、車線境界線の位置を正確に検出することができる。
【図面の簡単な説明】
【００１３】
【図１】本発明の実施例に係る車線境界検出装置の構成を示すブロック図である。
【図２】本発明の実施例に係る車線境界検出装置の全体の処理を示すフローである。
【図３】図２に示す画像の取得および車線境界線候補の抽出を示すフローである。
【図４】水平ラインの取得を説明する図である。
【図５】水平ラインのグループ化を説明する図である。
【図６】線分の抽出方法を説明する図である。
【図７】抽出された線分の管理方法を説明する図である。
【図８】車線境界線の管理方法を説明する図である。
【図９】本実施例における多重線検出処理を示すフローである。
【図１０】抽出された車線境界線候補が三重線に該当する場合の一例を示す図である。
【図１１】多重線情報の作成を説明する図である。
【図１２】車線境界線の判断処理を示すフローである。
【図１３】三重線情報の登録処理を示すフローである。
【図１４】二重線情報の登録処理を示すフローである。
【図１５】二重線情報から仮想三重線の作成処理を説明する図である。
【図１６】単線情報の登録処理を示すフローである。
【図１７】単線情報から仮想二重線の作成処理を説明する図である。
【図１８】単線情報から仮想三重線の作成処理を説明する図である。
【図１９】多重線検出状態の管理を説明する図である。
【図２０】多重線検出管理手段における多重線情報の有無を判定するフローである。
【図２１】新規の多重線情報を登録する処理を示すフローである。
【図２２】多重線検出管理手段における多重線情報の更新処理を示すフローである。
【図２３】多重線検出管理手段の状態の変化を説明する図である。
【図２３Ａ】本実施例の車線境界検出装置による二重線の検出例を説明する図である。
【図２３Ｂ】本実施例の車線境界検出装置による三重線の検出例を説明する図である。
【図２４】従来の車線境界検出装置における課題を説明する図である。
【図２５】図２４の白線の俯瞰図を示す図である。
【図２６】従来の車線境界検出装置における課題を説明する図である。
【図２７】従来の車線境界検出装置おける白線位置候補点の検出結果を示す図である。
【図２８Ａ】従来の車線境界検出装置における撮像画像の走査を説明する図である。
【図２８Ｂ】単線および二重線の検出方法を説明する図である。
【図２８Ｃ】三重線の検出方法を説明する図である。
【図２９】従来の車線境界線の検出例を示す図である。
【発明を実施するための形態】
【００１４】
本発明の車線境界検出装置は、好ましくは撮像装置によって撮像された画像を解析することにより車線境界を検出する機能を有する。本発明の車線境界装置は、汎用のコンピュータ装置、あるいは車載用のコンピュータ装置によって構成されることができる。また、本発明の車線境界検出装置は、車両に搭載可能なもの、あるいは車両に搭載されたもののいずれであってもよい。さらに本発明の車線境界検出装置は、車線境界線検出機能に加えて、例えば、ナビゲーション機能、運転支援機能、自動運転機能などを備え、これらの機能と複合的に実施されるものであってもよい。
【実施例】
【００１５】
次に、本発明の実施例について図面を参照して詳細に説明する。図１は、本実施例の車線境界検出装置の構成を示すブロック図である。図１（ａ）に示すように、車線境界検出装置１００は、車両の前方、後方、側方等のいずれかに搭載された撮像部２００と、ユーザーからの指示等を入力する入力部３００と、音声や画像等を出力する出力部４００と、記憶部５００と、制御部６００とを含む。但し、この構成は一例であり、本発明の車線境界検出装置は、このような構成に限定されない。
【００１６】
撮像部２００は、自車の前方または後方の道路を車載カメラ等で撮像し、その撮像データを制御部６００へ提供する。制御部６００は、撮像データを画像処理等によって解析し、その解析結果から車線境界線を検出する。車線境界線の検出結果は、例えば、ナビゲーション機能、運転支援機能、あるいは自動運転機能などにおいて利用される。１つの例では、ナビゲーション機能の走行車線の判定に利用されたり、あるいは、自車のレーン逸脱判定に利用されたりし、レーンを逸脱した場合には、出力部４００から警告等が発せられる。
【００１７】
制御部６００は、車線境界装置１００が有する少なくとも車線境界検出機能を実行する。制御部６００は、好ましい態様では、ＲＯＭ、ＲＡＭなどを含むマイクロコントローラ等から構成され、ＲＯＭまたはＲＡＭは、種々のプログラムを格納することができる。本実施例では、制御部６００は、車線境界検出プログラムを実行する。記憶部５００は、例えば、種々のアプリケーションソフトウエア、車線境界検出に必要なデータ等を記憶する。
【００１８】
図１（ｂ）は、制御部６００が実行する車線境界線検出プログラムの機能的な構成を示している。同図に示すように、車線境界線検出プログラムは、撮像部２００を構成する撮像カメラ１から入力された撮像データに基づき車線境界線候補を抽出する車線境界線候補抽出手段２と、多重線情報を管理する多重線検出管理手段３と、多重線検出管理手段３の多重線情報を参照して、抽出された車線境界線候補から複数の線分を含む多重線を検出し、検出した多重線を１つの車線境界線候補として出力する多重線検出手段４と、を含んで構成される。検出された車線境界線の情報は、種々の用途において利用可能である。例えば、車線境界線の情報は、車用の走行時に車線逸脱判定システムに利用され、自車が車線境界線を逸脱するか否かの判定に利用される。また、このような逸脱判定の結果は、運転支援システムにおいて利用することができ、車線逸脱と判定された場合には、運転支援システムは警報を発し、運転者に注意を促すことができる。さらに逸脱判定の結果は、自動運転システムやナビゲーション装置に利用することができ、例えば、片側複数車線の道路を自車が走行中に、自車が走行しているレーン判定にも利用され得る。
【００１９】
本実施例の車線境界線を検出するための全体の処理を図２に示す。この処理は繰り返し行われる。先ず、撮像カメラ１から画像が取得される。画像が魚眼画像のように歪みを持つ場合、その歪みが補正される（ステップ１１）。次に、取り込んだ画像から車線境界線候補抽出手段２により単線の車線境界線候補を抽出する（ステップ１２）。この処理の詳細を図３に示す。多重線検出管理手段３の多重線情報を参照して、単線の車線境界線候補から、多重線検出手段４を用いて単線から構成される多重線を検出し、検出した多重線を１つの車線境界線候補としてまとめて出力する。多重線として構成されなかった単線は、そのまま単線の車線境界線候補として出力する（ステップ１３）。この多重線検出処理の詳細を図９に示す。多重線検出管理手段３の状態を更新して終了する（ステップ１４）。この多重線検出管理の状態の更新処理の詳細を図２２に示す。
【００２０】
次に、車線境界線候補抽出手段の動作について説明する。ステップ１２の単線の境界線候補を抽出する処理を図３に示す。ステップ１１で取り込んだ画像からグレースケールの輝度画像を取り出す（ステップ２１）。グレースケールの画像から水平ラインを取り出す（ステップ２２）。水平ラインの取り出しは、図４に示すように、輝度画像を水平方向（Ｘ方向）にスキャンして、画像の輝度が相対的に所定以上高く変化するアップエッジ点（正のエッジ点）と、画像の輝度が相対的に所定以上低く変化するダウンエッジ点（負のエッジ点）を検出して、白線による明部を抽出する。これら抽出した正のエッジ点と負のエッジ点の組で、正のエッジ点から負のエッジ点までの長さが、ある所定の長さ（白線幅）を満足する部分を水平ラインとして取り出す。このとき、正のエッジ点は、水平ラインの左エッジ点、負のエッジ点は右エッジ点になる。
【００２１】
この水平ラインの取得を決められた走査範囲を下から上方向へ行う。取り出した例を図５に示す。次に、取り出した水平ラインに対して、Ｘ方向で重なった水平ライン群をグループ化する（ステップ２３）。グループ化は、グループ毎に水平ライン数と各水平ラインの左右エッジ点の画素位置、Ｘ座標とＹ座標をまとめる。例えば、図４で水平ラインを取得した結果を示す図５では、２つのグループに分けられる。左側のグループ０の１２個の水平ラインから構成され、グループ１の１３個の水平ラインから構成される。グループ化した水平ライン群から車線境界線候補となる線分を抽出する（ステップ２４）。
【００２２】
線分の抽出は、グループ化した水平ライン群を図６に示すように、３次元座標の路面（Ｚ＝０）に投影して、その各水平ラインの中点、すなわち、左エッジ点と右エッジ点の中央値を求め、これらの値から最小２乗法で線分の直線式Ｙ＝ａＸ＋ｂ  (Ｚ＝０)の係数ａ（傾き）とｂ（Ｙ切片）を算出する。この３次元の座標で、（Ｘ，Ｙ）＝（０，０）は車の中央である。また、グループ毎に水平ラインの幅（左右エッジ点間の距離）の平均から線幅を、先頭の水平ラインと末尾の水平ラインの中点位置から線分長を算出する。
【００２３】
抽出した線分情報は、図７に示す抽出線分管理extractlines.line[i]に格納される。線分の直線式Ｙ＝ａＸ＋ｂ  （Ｚ＝０）の係数ａ、ｂをextractLines.line[i].a、extractLines.line[i].bに格納する。線幅、線長をextractLines.line[i].width、extractLines.line[i].lengthに格納する。extractLines.line[i]の格納順は、係数ｂ(以下、Ｙ軸上での位置と呼ぶ)で降順に格納する。extractLinesは、単線の車線境界線候補を格納する。これが、ステップ１２の車線境界線候補の抽出処理の出力であり、ステップ１３の多重線検出処理の入力となる。
【００２４】
次に、多重線の検出処理について具体的に説明する。ステップ１３の多重線の検出処理の出力、つまり多重線検出手段４の出力である車線境界線候補を格納する車線境界線管理lmCandidateを図８に示す。lmCandidateは、車線境界線候補数lmCandidate.numLMarksと、車線境界線候補数分の車線境界線候補lmCandidate.laneMark[i]，ｉ＝０，１，・・・，lmCandidate.numLMarks - 1から構成される。lmCandidate.laneMark[i]は、多重線を構成する各線分情報を管理するために、線分数lmCandidate.laneMark[i].numと、各線分の情報を格納する線分lmCandidate.laneMark[i].line[j],j＝０，１，２と、車線境界線lmCandidate.laneMark[i].baseLineから構成される。本実施例では、三重線まで対応している。
【００２５】
単線の場合、lmCandidate.laneMark[i].numは１で、この単線の情報をlmCandidate.laneMark[i].baseLineと、lmCandidate.laneMark[i].line[0]に格納する。
二重線の場合、lmCandidate.laneMark[i].numは２で、二重線を構成する２本の線分情報をlmCandidate.laneMark[i].line[0]、line[1]に格納し、これら２本の線分から算出した車線境界線をlmCandidate.laneMark[i].baseLineに格納する。
三重線の場合、lmCandidate.laneMark[i]. numは３で、三重線を構成する３本の線分情報をlmCandidate.laneMark[i].line[0]、line[1]、line[2]に格納し、これらの車線境界線をlmCandidate.laneMark[i].baseLineに格納する。
【００２６】
ステップ１３の多重線の検出処理を図９に示す。先ず、多重線検出手段４の出力であるlmCndidateの車線境界線候補数lmCandidate.numLMarksを０に初期化する（ステップ４０１）。次に、入力の抽出線分管理extractLinesのインデックスｉを０に初期化する（ステップ４０２）。ｉが抽出線分数未満か否かを判断して、抽出線分があるか否かを判断する（ステップ４０３）。ｉが抽出線分数以上の場合は、抽出線分がないので終了する。ｉが抽出線分数未満の場合は、三重線判断を行う（ステップ４０４）。
【００２７】
三重線判断は、図１０に示す２種類の三重線を判断する。図１０（ｂ）は、真中の線分がない両側の２本の線分だけの三重線である。図１０（ａ）の三重線判断は、extractLines.line[i]、line[i+1]、line[i+2]の３本の抽出線分で行う。図１０（ｂ）の三重線判断は、extractLines.line[i]、line[i+1]の２本の抽出線分で行う。これらの判断において、図１０（ａ）の判断の場合、ｉ＋２＞＝extractLines.numのとき、図１０（ｂ）の判断の場合、ｉ＋１＞＝extractLines.numのとき、つまり、抽出線分数をオーバーするとき、判断は行わない。
【００２８】
図１０（ａ）に対する三重線判断は、次の７つの条件が成り立つとき三重線と判断する。
(1)各線分の線幅が0.11m以上0.50m未満
(2)左側２本の線分のＹ軸上の距離（以下、距離と呼ぶ）、(extractLines.line[i].b − extractLines.line[i+1].b)の絶対値が0.55m以下
(3)左側２本の線分の傾きの差、 (extractLines.line[i].a − extractLines.line[i+1].a)の絶対値が０．０６以下
(4)右側２本の線分の距離、(extractLines.line[i+1].b − extractLines.line[i+2].b)の絶対値が0.55m以下
(5)右側２本の線分の傾きの差、(extractLines.line[i+1].a − extractLines.line[i+2].a)の絶対値が０．０６以下
(6)両側２本の線分の距離、(extractLines.line[i].b − extractLines.line[i+2].b)の絶対値が0.55mを超え1.00m以下
(7)両側２本の線分の傾きの差、(extractLines.line[i].a − extractLines.line[i+2].a)の絶対値が０．０８以下
【００２９】
図１０（ｂ）に対する三重線判断は、次の３つの条件が成り立つとき三重線と判断する。
(1)各線分の線幅が0.11m以上0.50m未満
(2)２本の線分の距離、(extractLines.line[i].b − extractLines.line[i+1].b)の絶対値が0.55mを超え1.00m以下
(7)２本の線分の傾きの差、(extractLines.line[i].a − extractLines.line[i+1].a)の絶対値が０．０８以下
【００３０】
ステップ４０４の三重線判断で三重線と判断した場合、三重線情報を図１１に示す変数laneMarkに作成する（ステップ４０５）。なお、laneMarkは、lmCandidateの１つの車線境界線候補lmCandidate.laneMark[i]と同じ構成である。図１０（ａ）の場合、laneMark.numへ３を設定し、laneMark.lane[0]、laneMark.lane[1]、laneMark.lane[2]へそれぞれextractLines.line[i]、extractLines.line[i+1]、 extractLines.line[i+2]を格納する。車線境界線を示すlaneMark.baseLineは、三重線の真中の線分であるlaneMark.line[1]を設定する。
【００３１】
図１０（ｂ）の場合、laneMark.numへ３を設定し、laneMark.lane[0]、laneMark.lane[1]、laneMark.lane[2]へそれぞれextractLines.line[i]、extractLines.line[i]と extractLines.line[i+1] の中央値から作成した線分、 extractLines.line[i+1]を格納する。車線境界線を示すlaneMark.baseLineは、三重線の真中の線分であるlaneMark.line[1]を設定する。
【００３２】
この三重線情報を引数に図１３に示す三重線情報の登録処理を呼び出し、図１９に示す多重線検出状態管理mlMngの多重線管理情報の更新、あるいは新規登録を行い、出力となるlmCandidateに格納する（ステップ４０６）。三重線の登録処理後、抽出線分extractLinesのインデックスiに三重線判断に使用した線分数を加算して、次の線分の判断を行う（ステップ４０７）。三重線判断に使用した線分数は、図１０（ａ）の場合３、図１０（ｂ）の場合２である。ステップ４０４の三重線判断で三重線と判断できなかった場合、二重線の判断を行う（ステップ４０８）。
【００３３】
二重線判断は、extractLines.line[i]、line[i+1]の２本の抽出線分で行う。二重線判断は、次の３つの条件が成り立つとき二重線と判断する。
(1)各線分の線幅が0.11m以上0.50m未満
(2)左側２本の線分の距離、(extractLines.line[i].b − extractLines.line[i+1].b)の絶対値が0.55m以下
(3)左側２本の線分の傾きの差、(extractLines.line[i].a − extractLines.line[i+1].a)の絶対値が０．０６以下
【００３４】
ステップ４０８の二重線判断で二重線と判断した場合、二重線情報を図１１に示す変数laneMarkに作成する（ステップ４０９）。laneMark.numへ２を設定し、laneMark.lane[0]、 laneMark.lane[1] へそれぞれextractLines.line[i]、extractLines.line[i+1]を格納する。車線境界線を示すlaneMark.baseLineは、図１２に示す車線境界線の判断処理で設定する。
【００３５】
車線境界線の判断は、 extractLines.line[i]とextractLines.line[i+1]の線幅の差が0.07mを超えるか否かを判断し（ステップ４０９１）、超える場合は、線幅を比較して、線幅が小さい方を車線境界線とする（ステップ４０９２、４０９３、４０９４）。線幅で判断できないときは、線長の差が1.00mを超えるか否かを判断し（ステップ４０９５）、超える場合は、線長が長い方を車線境界線とする（ステップ４０９６、４０９７、４０９８）。線長の差が1.00mを超えない場合は、 extractLines.line[i]と extractLines.line[i+1] の中央値から作成した線分を車線境界線とする（ステップ４０９９）。
【００３６】
ステップ４０９で二重線情報を作成後、この二重線情報を引数に図１４に示す二重線情報の登録処理を呼び出し、図１９に示す多重線検出状態管理mlMngの多重線管理情報の更新、あるいは新規登録を行い、出力となるlmCandidateに格納する（ステップ４１０）。二重線の登録処理後、抽出線分extractLinesのインデックスiに、二重線判断に使用した線分数２を加算して、次の線分の判断を行う（ステップ４１１）。
【００３７】
ステップ４０８の二重線判断で二重線と判断できなかった場合、単線情報を図１１に示す変数laneMarkに作成する（ステップ４１２）。laneMark.numへ１を設定し、laneMark.lane[0]と車線境界線を示すlaneMark.baseLine へextractLines.line[i] を格納する。単線情報を作成後、この単線情報を引数に図１６に示す単線情報の登録処理を呼び出し、該当する二重線、あるいは三重線情報がある場合は、図１９に示す多重線検出状態管理mlMngの多重線管理情報の更新を行い、出力となるlmCandidateに格納する（ステップ４１３）。次に、抽出線分extractLinesのインデックスiに単線の線分数1を加算して、次の線分の判断を行う（ステップ４１４）。
【００３８】
三重線情報の登録処理を図１３に示す。図２０に示す多重線検出管理手段３の関数checkMLMngを、三重線情報の基準線のＹ軸上の位置ｂを引数として呼び、図１９に示す多重線検出状態の多重線管理情報mlMng.multi[idx]に該当する多重線情報があるか否かを判断する（ステップ４０６１、４０６２）。この関数は、該当する多重線情報がある場合、 mlMng.multi[]のインデックスを返す。該当する多重線情報がない場合は、−１を返す。この値は変数ｉｄｘに設定される。該当する多重線情報がある場合は、その情報を三重線情報laneMarkで更新し（ステップ４０６３）、その多重線管理情報の存在状況mlMng.multi[idx].stateを初期値１０にリセットする（ステップ４０６４）。該当する多重線情報がない場合は、図２１に示す新規登録処理を呼び、多重線検出状態管理の多重線管理情報mlMng.multi[i] に、三重線情報laneMarkを新規登録する（ステップ４０６５）。次に、出力lmCandidateへ三重線情報laneMarkを登録し（ステップ４０６６）、車線境界線候補数lmCandidate.numLMarksを1増やし（ステップ４０６７）、終了する。
【００３９】
二重線情報の登録処理を図１４に示す。図２０に示す関数checkMLMngを、二重線情報の車線境界線のＹ軸上の位置ｂを引数として呼び、図１９に示す多重線検出状態の多重線管理情報に該当する多重線情報があるか否かを判断する（ステップ４１００１、４１００２）。該当する多重線情報がある場合は、 この多重線情報が二重線か否かを判断する（ステップ４１００３）。二重線の場合、  その多重線情報を二重線情報laneMarkで更新し（ステップ４１００４）、その多重線管理情報の存在状況mlMng.multi[idx].stateを初期値１０にリセットする（ステップ４１００５）。次に、出力lmCandidateへ二重線情報laneMarkを登録し（ステップ４１００６）、車線境界線候補数lmCandidate.numLMarksを1増やし（ステップ４１０１１）、終了する。該当する多重線情報が二重線でない場合、つまり、三重線の場合、この多重線情報mlMng.multi[idx].laneMarkと二重線情報laneMarkから仮想三重線vLaneMarkを作成する（ステップ４１００７）。
【００４０】
仮想三重線vLaneMarkを作成する処理を図１５を用いて説明する。仮想三重線vLaneMarkの構成は、図１１に示すlaneMarkと同じである。例えば、該当する多重線情報が図１５（ａ）、二重線情報が図１５（ｂ）とする。二重線情報laneMarkを構成している２本の線分が、図１５（ｃ）のように、三重線の右側２本の線分に対応するか、それとも図１５（ｄ）のように、三重線の左側２本の線分に対応するかを判断する。この判断は、二重線情報の車線境界線laneMark.baseLineが２本の線分のどちらに該当するかで行う。laneMark.line[0]が車線境界線の場合は、図１５（ｃ）に示すように、三重線の右側２本の線分に対応する。laneMark.line[1]に車線境界線の場合は、図１５（ｄ）に示すように、三重線の左側２本の線分に対応する。laneMark.baseLineが２本の線分のどちらにも該当しない場合、つまり車線境界線がlaneMark.line[0]とlaneMark.line[1]の中央値で作成された線分の場合は、mlMng.multi[idx].laneMark.baseLineとこれら線分のＹ軸上の距離で判断する。距離の小さい方を車線境界線と判断する。どちら側の２本の線分に該当するか判断後、仮想三重線vLaneMarkを作成する。
【００４１】
図１５（ｃ）の場合、次のようにvLaneMarkを作成する。
(1)vLaneMark.line[1]にlaneMark.line[0]を設定する。
(2)vLaneMark.line[2]にlaneMark.line[1]を設定する。
(3)vLaneMark.line[0]にmlMng.multi[idx].laneMark.line[0]を設定する。
Ｙ軸上の位置vLaneMark.line[0].bをvLaneMark.line[1].bを基準にした次の値に置き換える。
vLaneMark.line[1].b −
(mlMng.multi[idx].laneMark.line[1].b − 
mlMng.multi[idx].laneMark.line[0].b) 
(4)vLaneMark.baseLineにvLaneMark.line[1]を設定する。
(5) vLaneMark.numに３を設定する。
【００４２】
図１５（ｄ）の場合、次のようにvLaneMarkを作成する。
(1)vLaneMark.line[0]にlaneMark.line[0]を設定する。
(2)vLaneMark.line[1]にlaneMark.line[1]を設定する。
(3)vLaneMark.line[2]にmlMng.multi[idx].laneMark.line[2]を設定する。
Ｙ軸上の位置vLaneMark.line[2].bをvLaneMark.line[1].bを基準にした次の値に置き換える。
vLaneMark.line[1].b −
(mlMng.multi[idx].laneMark.line[1].b − 
mlMng.multi[idx].laneMark.line[2].b) 
(4)vLaneMark.baseLineにvLaneMark.line[1]を設定する。
(5)vLaneMark.numに３を設定する。
【００４３】
ステップ４１００７で多重線情報mlMng.multi[idx].laneMarkと二重線情報laneMarkから仮想三重線vLaneMarkを作成後、この仮想三重線vLaneMarkで多重線情報mlMng.multi[idx].laneMarkを更新する（ステップ４１００８）。この場合、三重線から二重線へ切り替わっている可能もあるので、多重線管理情報の存在状況mlMng.multi[idx].stateをリセットしない。次に、出力lmCandidateへ仮想三重線情報vLaneMarkを登録し（ステップ４１００９）、車線境界線候補数lmCandidate.numLMarksを１増やし（ステップ４１０１１）、終了する。ステップ４１００２の判断で、該当する多重線情報がない場合、図２１に示す新規登録処理を呼び、多重線検出状態管理の多重線管理情報mlMng.multi[i] に、二重線情報laneMarkを新規登録する（ステップ４１０１０）。
次に、出力lmCandidateへ二重線情報laneMarkを登録し（ステップ４１００６）、車線境界線候補数lmCandidate.numLMarksを１増やし（ステップ４１０１１）、終了する。
【００４４】
単線情報の登録処理を図１６に示す。図２０に示す関数checkMLMngを、単線情報の車線境界線のＹ軸上の位置ｂを引数として呼び、図１９に示す多重線検出状態の多重線管理情報に該当する多重線情報があるか否かを判断する（ステップ４１３０１、４１３０２）。該当する多重線情報がある場合は、 この多重線情報が二重線か否かを判断する（ステップ４１３０３）。二重線の場合、mlMng.multi[idx].laneMarkと単線情報laneMarkから仮想二重線vLaneMarkを作成する（ステップ４１３０４）。
【００４５】
仮想二重線vLaneMarkを作成する処理を図１７を用いて説明する。例えば、該当する多重線情報が図１７（ａ）、単線情報図１７（ｂ）とする。単線情報laneMarkの１本の線分が、図１７（ｃ）のように、二重線の右側の線分に対応するか、それとも図１７（ｄ）のように、二重線の左側の線分に対応するかを判断する。この判断は、次のように判断する。
(1)単線情報の線幅laneMark.line[0].widthと二重線の左側線分の線幅mlMng.multi[idx].laneMark .line[0].widthの差diffLeftを求める。
(2)単線情報の線幅laneMark.line[0].widthと二重線の右側線分の線幅mlMng.multi[idx].laneMark .line[1].widthの差diffRightを求める。
(3)diffLeftとdiffRightの差が0.04m以上ならば、小さい方の線分を対応させる。例えば、diffLeftとdiffRightの差が0.04m以上でdiffLeftが小さい場合、二重線の左側線分が対応する。
(4)  (3)でdiffLeftとdiffRightの差が0.04m未満の場合、線幅で判断できないので、線分のＹ軸上の距離で判断する。
laneMark.line[0].bと二重線の左側線分Ｙ軸上の位置mlMng.multi[idx].laneMark .line[0].bの差（距離）、 laneMark.line[0].bと二重線の右側線分Ｙ軸上の位置mlMng.multi[idx].laneMark .line[1].bの差（距離）を求め、距離が小さい方の線分が対応すると判断する。どちらの線分に対応するか判断後、仮想二重線vLaneMarkを作成する。
【００４６】
図１７（ｃ）のように、二重線の右側線分に対応する場合、次のようにvLaneMarkを作成する。
(1)vLaneMark.line[1]にlaneMark.line[0]を設定する。
(2)vLaneMark.line[0]にmlMng.multi[idx].laneMark.line[0]を設定する。
Ｙ軸上の位置vLaneMark.line[0].bをvLaneMark.line[1].bを基準にした次の値に置き換える。
vLaneMark.line[1].b −
(mlMng.multi[idx].laneMark.line[1].b − 
mlMng.multi[idx].laneMark.line[0].b)
(3)車線境界線vLaneMark.baseLineをmlMng.multi[idx].laneMark.baseLineの情報を基に設定する。
mlMng.multi[idx].laneMark.line[0]が車線境界線の場合、vLaneMark.line[0]を設定する。mlMng.multi[idx].laneMark.line[1]が車線境界線の場合、vLaneMark.line[1]を設定する。
mlMng.multi[idx].laneMark.line[0]とmlMng.multi[idx].laneMark.line[1]の中央値が車線境界線の場合、vLaneMark.line[0]とvLaneMark.line[1]の中央値を算出して設定する。
(4)vLaneMark.numに２を設定する。
【００４７】
図１７（ｄ）のように、二重線の左側線分に対応する場合、次のようにvLaneMarkを作成する。
(1)vLaneMark.line[0]にlaneMark.line[0]を設定する。
(2)vLaneMark.line[1]にmlMng.multi[idx].laneMark.line[1]を設定する。
Ｙ軸上の位置vLaneMark.line[1].bをvLaneMark.line[0].bを基準にした次の値に置き換える。
vLaneMark.line[0].b −
(mlMng.multi[idx].laneMark.line[0].b − 
mlMng.multi[idx].laneMark.line[1].b) 
(3)車線境界線vLaneMark.baseLineを前述した図１７(c)と同様にmlMng.multi[idx].laneMark.baseLineの情報を基に設定する。
(4) vLaneMark.numに２を設定する。
ステップ４１３０４で、二重線情報mlMng.multi[idx].laneMarkと単線情報laneMarkから仮想二重線vLaneMarkを作成後、この仮想二重線vLaneMarkで多重線情報mlMng.multi[idx].laneMarkを更新する（ステップ４１３０６）。次に、出力lmCandidateへ仮想二重線情報vLaneMarkを登録し（ステップ４１３０７）、車線境界線候補数lmCandidate.numLMarksを１増やし（ステップ４１３０９）、終了する。ステップ４１３０３の判断で二重線でない場合、つまり三重線の場合、mlMng.multi[idx].laneMarkと単線情報laneMarkから仮想三重線vLaneMarkを作成する（ステップ４１３０５）。
【００４８】
仮想三重線vLaneMarkを作成する処理を図１８を用いて説明する。例えば、該当する多重線情報が図１８（ａ）、単線情報が図１８（ｂ）とする。単線情報laneMarkの1本の線分が、図１８（ｃ）、（ｄ）、（ｅ）のように、三重線の左側線分、中央線分、あるいは右側線分に対応するかを判断する。この判断は、次のように判断する。
(1)単線情報の線幅laneMark.line[0].widthと三重線の左側線分の線幅mlMng.multi[idx].laneMark.line[0].widthの差diffLeftを求める。
(2)単線情報の線幅laneMark.line[0].widthと三重線の中央線分の線幅mlMng.multi[idx].laneMark.line[1].widthの差diffCenterを求める。
(3)単線情報の線幅laneMark.line[0].widthと三重線の右側線分の線幅mlMng.multi[idx].laneMark.line[2].widthの差diffRightを求める。
(4)diffLeft、diffCenter、diffRightで0.07mを超えるものを除く。
残っている線分が１つならば、それが対応する線分となる。
残っている線分が２つ以上ならば、残っている線分のY軸上の距離で判断する。１つも残ってなければ、３本の線分で判断する。
(5)三重線の残っている線分について、laneMark.line[0].bとの差（距離）を求め、最も距離が小さい線分を対応する線分とする。
【００４９】
図１８（ｃ）のように、三重線の左側線分に対応する場合、次のようにvLaneMarkを作成する。
(1)vLaneMark.line[0]にlaneMark.line[0]を設定する。
(2)vLaneMark.line[1]にmlMng.multi[idx].laneMark.line[1]を設定する。
Ｙ軸上の位置vLaneMark.line[1].bをvLaneMark.line[0].bを基準にした次の値に置き換える。
vLaneMark.line[0].b −
(mlMng.multi[idx].laneMark.line[0].b − 
mlMng.multi[idx].laneMark.line[1].b)
(3)vLaneMark.line[2]にmlMng.multi[idx].laneMark.line[2]を設定する。
Ｙ軸上の位置vLaneMark.line[2].bをvLaneMark.line[0].bを基準にした次の値に置き換える。
vLaneMark.line[0].b −
(mlMng.multi[idx].laneMark.line[0].b − 
mlMng.multi[idx].laneMark.line[2].b) 
(4)vLaneMark.baseLineにvLaneMark.line[1]を設定する。
(5)vLaneMark.numに３を設定する。
【００５０】
図１８（ｄ）のように、三重線の中央線分に対応する場合、次のようにvLaneMarkを作成する。
(1)vLaneMark.line[1]にlaneMark.line[0]を設定する。
(2)vLaneMark.line[0]にmlMng.multi[idx].laneMark.line[0]を設定する。
Ｙ軸上の位置vLaneMark.line[0].bをvLaneMark.line[1].bを基準にした次の値に置き換える。
vLaneMark.line[1].b −
(mlMng.multi[idx].laneMark.line[1].b − 
mlMng.multi[idx].laneMark.line[0].b)
(3)vLaneMark.line[2]にmlMng.multi[idx].laneMark.line[2]を設定する。
Ｙ軸上の位置vLaneMark.line[2].bをvLaneMark.line[1].bを基準にした次の値に置き換える。
vLaneMark.line[1].b −
(mlMng.multi[idx].laneMark.line[1].b − 
mlMng.multi[idx].laneMark.line[2].b)
(4)vLaneMark.baseLineにvLaneMark.line[1]を設定する。
(5) vLaneMark.numに３を設定する。
【００５１】
図１８（ｅ）のように、三重線の右側線分に対応する場合、次のようにvLaneMarkを作成する。
(1)vLaneMark.line[2]にlaneMark.line[0]を設定する。
(2)vLaneMark.line[0]にmlMng.multi[idx].laneMark.line[0]を設定する。
Ｙ軸上の位置vLaneMark.line[0].bをvLaneMark.line[2].bを基準にした次の値に置き換える。
vLaneMark.line[2].b −
(mlMng.multi[idx].laneMark.line[2].b − 
mlMng.multi[idx].laneMark.line[0].b)
(3)vLaneMark.line[1]にmlMng.multi[idx].laneMark.line[1]を設定する。
Ｙ軸上の位置vLaneMark.line[1].bをvLaneMark.line[2].bを基準にした次の値に置き換える。
vLaneMark.line[2].b −  (mlMng.multi[idx].laneMark.line[2].b − 
mlMng.multi[idx].laneMark.line[1].b)
(4)vLaneMark.baseLineにvLaneMark.line[1]を設定する。
(5)vLaneMark.numに３を設定する。
【００５２】
ステップ４１３０５で、三重線情報mlMng.multi[idx].laneMarkと単線情報laneMarkから仮想三重線vLaneMarkを作成後、この仮想三重線vLaneMarkで多重線情報mlMng.multi[idx].laneMarkを更新する（ステップ４１３０６）。次に、出力lmCandidateへ仮想三重線情報vLaneMarkを登録し（ステップ４１３０７）、車線境界線候補数lmCandidate.numLMarksを１増やし（ステップ４１３０９）、終了する。ステップ４１３０２の判断で、該当する多重線情報がない場合は、単線情報laneMarkを出力lmCandidateへ登録し（ステップ４１３０７）、車線境界線候補数lmCandidate.numLMarksを１増やし（ステップ４１３０９）、終了する。
【００５３】
図１９に、多重線検出管理手段３で多重線検出状態を管理する多重線検出状態管理mlMngを示す。mlMngは、管理している多重線管理情報の数を示す多重線管理情報数mlMng.numMLinesと、多重線管理情報mlMng.multi [i], i=0, 1, …, mlMng.numMLines -1から構成される。mlMng.multi [i]は、多重線情報mlMng.multi[i].laneMarkと、多重線の存在状況を示す存在状況mlMng.multi[i].stateから構成される。mlMng.multi[i].laneMarkは、多重線を構成する線数mlMng.multi[i].laneMark.numと、多重線を構成する各線分情報を格納する線分mlMng.multi[i].laneMark.line[j], j=0, 1, 2と、車線境界線mlMng.multi[i].laneMark.baseLineから構成される。mlMng.multi[i].laneMarkは、図８の車線境界線候補lmCndidate.laneMark[l]と同じ構成である。多重線検出状態管理mlMngに新規に多重線情報を登録するとき、mlMng.multi[i].stateに、ある初期値、本実施例では５、を設定する。また、この多重線情報を仮想でない多重線情報で更新したとき、 mlMng.multi[i].stateに、ある初期値、本実施例では１０に設定する。
【００５４】
mlMng.multi[i].stateは、１画像を処理する毎に１減算する。この値が０になったとき、この多重線は路面上にないと見なし、多重線状態管理mlMngからこの情報を削除する。これにより、多重線検出が連続に続かなくても多重線が存在している状態を保持することができる。また、ノイズなどにより誤って多重線検出を行っても、ある一定回数内に多重線を検出しなければ、多重線であるという状態から速やかに抜けることができる。mlMng.multi [i]は、多重線情報の基準線のＹ軸上の位置mlMng.multi[i].laneMark.baseLine.bの値で降順に格納する。
mlMng.numMLinesは、本装置の初期化時に、０が設定される。
【００５５】
図１９に示す多重線検出状態管理の多重線管理情報mlMng.multi[i]内に該当する多重線情報があるか否かを判断する関数checkMLMngを図２０に示す。この関数の引数は、単線、あるいは多重線の車線境界線のＹ軸上の位置ｂである。また、この関数は、多重線管理情報mlMng.multi[i]内に該当する多重線情報がある場合、その多重線情報を含む多重線管理情報のインデックスｉを、ない場合は、−１を返す。この関数は、引数のＹ軸上の位置から0.50m未満の範囲でＹ軸上の距離が最も小さいものを検索する。
【００５６】
先ず、関数値を格納する変数idxを−１（該当なし）に設定する（ステップ３１０１）。idxは、最短距離である多重線管理情報のインデックスを格納する。Ｙ軸上の最短の距離を示す変数minDiffを0.50mに初期化する（ステップ３１０２）。多重線管理情報のインデックスｉを０に初期化する（ステップ３１０３）。ｉが多重線管理情報数mlMng.numMLines未満か否かを判断する（ステップ３１０４）。ｉが多重線管理情報数未満ならば、ｉの示す多重線管理情報の車線境界線のＹ軸上の位置mlMng.multi[i].baseLine.bと引数ｂからＹ軸上の距離を求め、変数diffBに格納する（ステップ３１０５）。算出した距離diffBが最短の距離miDiffより小さいか否かを判断する（ステップ３１０６）。diffBがminDiffより小さい場合は、この情報を保存するために、idxにｉを、minDiffにdiffBを格納し（ステップ３１０７、３１０８）、ｉを１加算して次の多重線管理情報を調べる。ステップ３１０４において、ｉが多重線管理情報数以上ならば、idxの値を関数値として返して（ステップ３１１０）、終了する。
【００５７】
図１９に示す多重線検出状態管理の多重線管理情報mlMng.multi[i]に、新規の多重線情報laneMarkを登録する処理を図２１に示す。先ず、多重線情報を追加するエリアを求める。多重線管理情報のインデックスｉを０に初期化する（ステップ３２０１）。ｉが多重線管理情報数mlMng.numMLines未満か否かを判断する（ステップ３２０２）。多重線管理情報数未満ならば、追加する多重線情報の車線境界線のＹ軸上の位置laneMark.baseLine.bと多重線管理情報の車線境界線のＹ軸上の位置mlMng.multi[i].laneMark.baseLine.bを比較して、格納する位置を求める（ステップ３２０３、３２０４）。なお、多重線管理情報は、多重線情報の車線境界線のＹ軸上の位置の値で降順に格納する。格納する位置が求まったら、その位置から後ろにある多重線管理情報を1つ後ろにずらし、格納エリアを空ける（ステップ３２０５、３２０６、３２０７、３２０８）。格納エリアが空いたら、追加する多重線情報を格納する（ステップ３２０９）。また、その多重線管理情報の存在状況mlMng.mult[i].stateを５に初期化し（ステップ３２１０）、多重線管理情報数mlMng.numMLinesに１加算して（ステップ３２１１）、終了する。
【００５８】
ステップ３２０２において、ｉが多重線管理情報数以上ならば、多重線情報laneMarkは、多重線管理情報の末尾に追加することになる。図２２に多重線検出管理の状態の更新処理を示す。この処理は、１画像処理毎に呼ばれ、多重線検出状態管理の多重線管理情報の存在状況mlMng.multi[i].state を１減算し、この値が０になった多重線管理情報を削除する。例えば、三重線状態での検出が、三重線、単線、単線、三重線などのように、途中で三重線以外が現れることがある。そのため、例えば、三重線状態から単線状態へ変わることを確実に判断するために、一定期間様子を見ることが必要になり、そのために、この処理を行う。多重線管理情報のインデックスｉを０に初期化する（ステップ３３０１）。ｉが多重線管理情報数mlMng.numMLines未満か否かを判断する（ステップ３３０２）。ｉが多重線管理情報数以上ならば、多重線検出状態管理内の全ての多重線管理情報に対する処理が終わったので終了する。
【００５９】
ｉが多重線管理情報数未満ならば、ｉの示す多重線管理情報の存在状況mlMng.multi[i].stateを１減算して（ステップ３３０３）、この値が０以下か否かを判断する（ステップ３３０４）。mlMng.multi[i].stateが０以下でなければ、ｉを１加算して（ステップ３３０５）、次の多重線管理情報の処理を行う。mlMng.multi[i].stateが０以下ならば、 この多重線管理情報を削除するために、ｉ以降の多重線管理情報mlMng.multi[j], j= i+1,…, mlMng.numMlines-1を前に詰める処理を行い（ステップ３３０６、３３０７、３３０８、３３０９）、多重線管理情報数mlMng.numMlinesを1減算し（ステップ３３１０）、次の多重線管理情報の処理を行う。
【００６０】
この多重線検出管理の状態の更新処理の例を示す。例えば、車線の片側で、多重線、あるいは単線が、図２３に示すように、各画像で検出された場合、多重線検出管理の状態の更新処理の結果、多重線検出状態管理mlMngは、次のようになる。ただし、もう一方は、すべて単線が検出される、画像mの開始時、多重線管理情報数は０であると仮定する。
【００６１】
(1)画像m
mlMng.numMLines = ０
(2)画像m+1
mlMng.numMLines = １
mlMng.multi[0].state = ４
mlMng.multi[0]. laneMark.num = ２
mlMng.multi[0]. laneMark.line[0] = 画像ｍ＋１の左側線分
mlMng.multi[0]. laneMark.line[1] = 画像ｍ＋１の右側線分
mlMng.multi[0]. laneMark.baseLine = mlMng.multi[0]. laneMark.line[1]
ここで、存在状況mlMng.multi[0].stateが４になるのは、二重線情報を新規登録したとき、５に初期化されるが、この処理で１減算されるためである。単線状態から二重線検出状態になる。
(3)画像ｍ＋２
mlMng.numMLines = １
mlMng.multi[0].state = ９
mlMng.multi[0]. laneMark.num = ２
mlMng.multi[0]. laneMark.line[0] = 画像ｍ＋２の左側線分
mlMng.multi[0]. laneMark.line[1] = 画像ｍ＋２の右側線分
mlMng.multi[0]. laneMark.baseLine = mlMng.multi[0]. laneMark.line[1]
(4)画像ｍ＋３
mlMng.numMLines = １
mlMng.multi[0].state = ８
mlMng.multi[0]. laneMark.num = ２
mlMng.multi[0]. laneMark.line[0] = 画像ｍ＋３の線分（補助線）
mlMng.multi[0]. laneMark.line[1] = 仮想線分（画像ｍ＋３の線分とｍ＋２の多重線管理情報から作成）
mlMng.multi[0]. laneMark.baseLine = mlMng.multi[0]. laneMark.line[1]
(5)画像ｍ＋４
mlMng.numMLines = １
mlMng.multi[0].state = ７
mlMng.multi[0]. laneMark.num = ２
mlMng.multi[0]. laneMark.line[0] =仮想線分（画像ｍ＋４の線分とｍ＋３の多重線管理情報から作成）
mlMng.multi[0]. laneMark.line[1] = 画像ｍ＋４の線分（車線境界線）
mlMng.multi[0]. laneMark.baseLine = mlMng.multi[0]. laneMark.line[1]
(6)画像ｍ＋５
mlMng.numMLines = １
mlMng.multi[0].state = ９
mlMng.multi[0]. laneMark.num = ２
mlMng.multi[0]. laneMark.line[0] =画像ｍ＋５の左側線分
mlMng.multi[0]. laneMark.line[1] = 画像ｍ＋５の右側線分
mlMng.multi[0]. laneMark.baseLine = mlMng.multi[0]. laneMark.line[1]
(7)画像ｍ＋６
mlmng.numMLines = １
mlMng.multi[0].state = ８
mlMng.multi[0]. laneMark.num = ２
mlMng.multi[0]. laneMark.line[0] =仮想線分（画像ｍ＋６の線分とｍ＋５の多重線管理情報から作成）
mlMng.multi[0]. laneMark.line[1] = 画像ｍ＋６の線分（車線境界線）
mlMng.multi[0]. laneMark.baseLine = mlMng.multi[0]. laneMark.line[1]
(8)画像ｍ＋１３
mlMng.numMLines = １
mlMng.multi[0].state = １
mlMng.multi[0]. laneMark.num = ２
mlMng.multi[0]. laneMark.line[0] =仮想線分（画像ｍ＋１３の線分とｍ＋１２の多重線管理情報から作成）
mlMng.mult[0]. laneMark.line[1] = 画像ｍ＋１３の線分（車線境界線）
mlMng.multi[0]. laneMark.baseLine = mlMng.multi[0]. laneMark.line[1]
(9)画像ｍ＋１４
mlMng.numMLines = ０
mlMng.multi[0].stateが０になり、多重線管理情報mlMng.multi[0]は、削除される。二重線検出状態から単線検出状態になる。
【００６２】
次に、本実施例による車線境界検出装置による車線境界の検出例を説明する。図２３Ａは、単線の検出状態から二重線の検出状態へ遷移したときの車線境界の検出例である。例えば、ずっと単線が続いた状態で、図２３Ａ（ａ）に示すような二重線を検出したとする。この場合、多重線検出手段４は、二重線を検出し、２本の線分の車中央からの距離（位置）Ｌａ、Ｌｂ、線幅、線長と、車線境界線の識別とを検出する。多重線検出管理手段３は、検出された二重線情報を管理する。多重線検出管理手段３は、二重線が検出される毎に二重線情報を更新する。
【００６３】
二重線が検出された状態から、同図（ｂ）に示すような補助線だけかなる単線が検出されたとき、多重線検出管理手段３に管理された二重線情報を用いて、多重線検出手段４は、検出された単線が車線境界線または補助線のどちらの線分に該当するか判定する。この判定は、例えば、線幅を基準に線幅の違いがない線分が選択され、線幅で判定がつかない場合は、管理されている二重線情報の各線分の位置との距離を基準に距離の小さい方が選択される。次に、多重線検出手段４は、仮想二重線を作成する。すなわち、二重線の内、無い方の線分が二重線情報の線分情報を参照して作成される。同図（ｂ）の場合、同図（ｃ）に示すように、仮想車線境界線が作成される。これにより、車線境界線の位置がわかる。
【００６４】
図２３Ｂは、単線の検出状態から三重線の検出状態へ遷移したときの車線境界の検出例である。例えば、ずっと単線が続いた状態で、図２３Ｂ（ａ）に示すような三重線を検出したとする。この場合、多重線検出手段４は、三重線を検出し、３本の線分の車中央からの距離（位置）Ｌａ、Ｌｂ、Ｌｃ、線幅、線長と、車線境界線の識別とを検出する。多重線検出管理手段３は、検出された三重線情報を管理する。多重線検出管理手段３は、三重線が検出される毎に三重線情報を更新する。
【００６５】
三重線検出状態で二重線が検出されたとき、それがどの２本の線分かが判断される。同図（ｂ）に示すような左側の２本が検出されたとき、三重線情報を参照して、どちら側の２本の線分に該当するか判断する。判断は、検出した２本の線分と、三重線情報の１本目と２本目の線分、三重線情報の２本目と３本目の線分との比較で行う。線幅の対比で判断し、線幅の差が小さい方が選択され、線幅で判断がつかないときは、各線分の距離の総和で判断し、距離の総和が小さい方が選択される。次に、多重線検出手段４は、仮想三重線を作成する。すなわち、三重線の内、無い線分が三重線情報の線分情報を参照して作成される。同図（ｂ）の場合、同図（ｃ）に示すように、仮想補助線が作成される。これにより、車線境界線の位置が正確に判定される。
【００６６】
このように本実施例の車線境界検出装置によれば、多重線の一部が欠落された場合であっても、管理された多重線情報を参照することにより欠落した多重線の一部を作成することができるため、車線境界の位置をより正確に検出することが可能になる。
【００６７】
以上、本発明の好ましい実施の形態について詳述したが、本発明は、特定の実施形態に限定されるものではなく、特許請求の範囲に記載された発明の要旨の範囲において、種々の変形、変更が可能である。
【符号の説明】
【００６８】
１：撮像カメラ                            ２：車線境界線候補抽出手段
３：多重線検出管理手段                    ４：多重線検出手段
１００：車線境界検出装置                  ２００：撮像部
３００：入力部                            ４００：出力部
５００：記憶部                            ６００：制御部
【図１】
0006756455.tif 000002
【図２】
0006756455.tif 000003
【図３】
0006756455.tif 000004
【図４】
0006756455.tif 000005
【図５】
0006756455.tif 000006
【図６】
0006756455.tif 000007
【図７】
0006756455.tif 000008
【図８】
0006756455.tif 000009
【図９】
0006756455.tif 000010
【図１０】
0006756455.tif 000011
【図１１】
0006756455.tif 000012
【図１２】
0006756455.tif 000013
【図１３】
0006756455.tif 000014
【図１４】
0006756455.tif 000015
【図１５】
0006756455.tif 000016
【図１６】
0006756455.tif 000017
【図１７】
0006756455.tif 000018
【図１８】
0006756455.tif 000019
【図１９】
0006756455.tif 000020
【図２０】
0006756455.tif 000021
【図２１】
0006756455.tif 000022
【図２２】
0006756455.tif 000023
【図２３】
0006756455.tif 000024
【図２３Ａ】
0006756455.tif 000025
【図２３Ｂ】
0006756455.tif 000026
【図２４】
0006756455.tif 000027
【図２５】
0006756455.tif 000028
【図２６】
0006756455.tif 000029
【図２７】
0006756455.tif 000030
【図２８Ａ】
0006756455.tif 000031
【図２８Ｂ】
0006756455.tif 000032
【図２８Ｃ】
0006756455.tif 000033
【図２９】
0006756455.tif 000034