特許第6525853号(P6525853)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ アルパイン株式会社の特許一覧

特許6525853電子装置、白線検出プログラムおよび白線検出方法
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6525853
(24)【登録日】2019年5月17日
(45)【発行日】2019年6月5日
(54)【発明の名称】電子装置、白線検出プログラムおよび白線検出方法
(51)【国際特許分類】
   G06T 7/60 20170101AFI20190527BHJP
   G06T 1/00 20060101ALI20190527BHJP
【FI】
   G06T7/60 200J
   G06T1/00 330A
【請求項の数】8
【全頁数】21
(21)【出願番号】特願2015-215588(P2015-215588)
(22)【出願日】2015年11月2日
(65)【公開番号】特開2017-90955(P2017-90955A)
(43)【公開日】2017年5月25日
【審査請求日】2018年5月31日
(73)【特許権者】
【識別番号】000101732
【氏名又は名称】アルパイン株式会社
(74)【代理人】
【識別番号】100098497
【弁理士】
【氏名又は名称】片寄 恭三
(72)【発明者】
【氏名】櫛田 敏夫
(72)【発明者】
【氏名】箱崎 智広
【審査官】 片岡 利延
(56)【参考文献】
【文献】 特開2011−165050(JP,A)
【文献】 特開2009−163096(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06T 7/60
G06T 1/00
(57)【特許請求の範囲】
【請求項1】
白線を検出する機能を備えた電子装置であって、
路面を撮像する撮像手段と、
前記撮像手段により撮像された画像データの輝度情報と第1のしきい値とを比較することにより画素間の輝度差が第1のしきい値以上となるエッジを含む白線候補を抽出する抽出手段と、
前記白線候補が他の白線候補と隣接するか否かを判定する判定手段と、
前記白線候補が他の白線候補に隣接すると判定された場合、白線候補の隣接する側の輝度差を、第2のしきい値よりも大きな輝度差に補正する補正手段と、
前記白線候補と第2のしきい値とを比較することにより前記白線候補の中から第2のしきい値以下の非白線候補を除去する除去手段と、
前記非白線候補が除去された白線候補に基づき白線を検出する検出手段とを有し、
第1のしきい値は、第2のしきい値よりも輝度差の大きい画素を抽出する、電子装置。
【請求項2】
前記白線候補の一方の側が他の白線候補に隣接するとき、前記補正手段は、前記白線候補の隣接する側の輝度差を、隣接しない側の輝度差に置換する、請求項1に記載の電子装置。
【請求項3】
前記白線候補の両側が他の白線候補に隣接するとき、前記補正手段は、前記白線候補の両側の輝度差を、複数の白線候補の中の白線候補に隣接しない側の輝度差に置換する、請求項1に記載の電子装置。
【請求項4】
前記抽出手段は、画像データを水平方向に走査する走査手段を含み、
前記補正手段は、前記走査手段により1つの水平ラインが走査される毎に、水平ラインの白線候補の輝度差を補正する、請求項1ないし3いずれか1つに記載の電子装置。
【請求項5】
前記抽出手段はさらに、前記走査手段によって走査された複数の水平ライン群をグループ化する手段を含み、前記補正手段は、グループ化された後に各水平ラインの白線候補の輝度差を補正する、請求項に記載の電子装置。
【請求項6】
前記検出手段は、二重の白線または三重の白線を検出する、請求項1に記載の電子装置。
【請求項7】
路面を撮像する撮像手段を備えた電子装置が実行する白線検出プログラムであって、
前記撮像手段により撮像された画像データの輝度情報と第1のしきい値とを比較することにより画素間の輝度差が第1のしきい値以上となるエッジを含む白線候補を抽出するステップと、
前記白線候補が他の白線候補と隣接するか否かを判定するステップと、
前記白線候補が他の白線候補に隣接すると判定された場合、前記白線候補の隣接する側の輝度差を、第2のしきい値よりも大きな輝度差に補正するステップと、
前記白線候補と第2のしきい値とを比較することにより前記白線候補の中から第2のしきい値以下の非白線候補を除去するステップと、
前記非白線候補が除去された白線候補に基づき白線を検出するステップとを有し、
第1のしきい値は、第2のしきい値よりも輝度差の大きい画素を抽出する、白線検出プログラム。
【請求項8】
路面を撮像する撮像手段を備えた電子装置における白線検出方法であって、
前記撮像手段により撮像された画像データの輝度情報と第1のしきい値とを比較することにより画素間の輝度差が第1のしきい値以上となるエッジを含む白線候補を抽出するステップと、
前記白線候補が他の白線候補と隣接するか否かを判定するステップと、
前記白線候補が他の白線候補に隣接すると判定された場合、前記白線候補の隣接する側の輝度差を、第2のしきい値よりも大きな輝度差に補正するステップと、
前記白線候補と第2のしきい値とを比較することにより前記白線候補の中から第2のしきい値以下の非白線候補を除去するステップと、
前記非白線候補が除去された白線候補に基づき白線を検出するステップとを有し、
第1のしきい値は、第2のしきい値よりも輝度差の大きい画素を抽出する、白線検出方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、車線の白線を検出する機能を備えた電子装置に関し、特に、二重の白線や三重の白線を精度良く検出する方法に関する。
【背景技術】
【0002】
車両に搭載されたカメラで撮像した路面画像に基づき、道路の白線(レーンマーク)を検出する技術が存在する。例えば、特許文献1では、路面画像中の輝度が「暗」から「明」に変化するエッジ点(以下、正のエッジ点と呼ぶ)と、輝度が「明」から「暗」に変化するエッジ点(以下、負のエッジ点と呼ぶ)を検出し、これらのエッジ点に対するピークをペアとして探索することにより白線(レーンマーク)を検出している。特許文献2では、正のエッジ点に関し、画像内の平均輝度をしきい値として、左側の画素の輝度がしきい値未満で右側の画素の輝度がしきい値以上の画素をエッジ点として抽出し、左側の画素との輝度の差がしきい値以上となる画素をエッジ点として抽出する方法を開示している。特許文献3では、正のエッジ点と負のエッジ点間を、レーンマークを構成する水平ラインとして取り出し、それらをグループ化し、グループ内の水平ラインの中点、あるいは最少二乗法で求められた線をレーンマークとして検出している。
【0003】
さらに特許文献4では、撮像手段によって撮像された原画像に基づき作成された2値化画像の濃度平均値を利用した道路の白線認識方法を開示している。特許文献5では、周囲の構造物やノイズの影響を受けずに、線上マークの検出に係る信頼性を向上させた、線上マーク検出方法および装置を開示している。こうして検出された白線情報は、例えば、レーン逸脱を警報するシステムや自動運転システムに利用される。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開平11−85999号公報
【特許文献2】特開2004−310522号公報
【特許文献3】特開2013−186660号公報
【特許文献4】特開平11−167624号公報
【特許文献5】特開2000−57351号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
特許文献1ないし3等に記載のエッジ点検出方法を用いれば、例えば、図19(A)に示すような、重複していない単一の白線Lであれば、画像を水平方向に走査したときに得られる白線Lと路面Rとの輝度差Pが十分であり、正および負のエッジ点Zを正確に抽出することができる。
【0006】
しかし、図19(B)に示すような、二重線L1または三重線L2のような多重白線の場合、カメラの解像度や画像のひずみ補正などの影響により、白線間の画素数が少ないと、白線が隣接した側の輝度差P1が十分に生じないことがある。例えば、二重線L1を走査したとき、正のエッジ点aが選択され、次に負のエッジ点bが輝度差P1がしきい値未満となり選択されず、次にエッジ点cが選択される。その結果、二重線が単線と認識されることがある。三重線の場合にも同様に、両側が隣接する中央の白線が認識されず、単線または二重線と認識されることがある。
【0007】
一方、輝度差を判定するためのしきい値を小さくすれば、エッジ点bのような小さな輝度差を検出することが可能であるが、路面上の小さいわだちやタイヤ痕なども一定の輝度を生じさせるため、これらのノイズを白線と誤認識してしまうおそれがある。
【0008】
本発明は、このような従来の課題を解決するものであり、2重線や3重線のような多重線を正確に検出することができる電子装置、白線検出プログラムおよび白線検出方法を提供することを目的とする。
【課題を解決するための手段】
【0009】
本発明に係る白線を検出する機能を備えた電子装置は、路面を撮像する撮像手段と、前記撮像手段により撮像された画像データの輝度情報と第1のしきい値とを比較することにより第1のしきい値以上の輝度差を有する少なくとも1つの白線候補を抽出する抽出手段と、前記白線候補が他の白線候補と隣接するか否かを判定する判定手段と、前記白線候補が他の白線候補に隣接すると判定された場合、白線候補の隣接する側の輝度差を、第2のしきい値よりも大きな輝度差に補正する補正手段と、前記白線候補と第2のしきい値とを比較することにより前記白線候補の中から第2のしきい値以下の非白線候補を除去する除去手段と、前記非白線候補が除去された白線候補に基づき白線を検出する検出手段とを有し、第1のしきい値は、第2のしきい値よりも輝度差の大きい画素を抽出する。
【0010】
好ましくは前記白線候補の一方の側が他の白線候補に隣接するとき、前記補正手段は、前記白線候補の隣接しない他方の側の輝度差を前記一方の側の輝度差に置換する。好ましくは前記白線候補の両側が他の白線候補に隣接するとき、前記補正手段は、前記白線候補の両側の輝度差を、複数の白線候補の中の白線候補に隣接しない側の輝度差に置換する。好ましくは前記抽出手段は、画像データを水平方向に走査する走査手段を含み、前記補正手段は、前記走査手段により1つの水平ラインが走査される毎に、水平ラインの白線候補の輝度差を補正する。好ましくは前記抽出手段はさらに、前記走査手段によって走査された複数の水平ライン群をグループ化する手段を含み、前記補正手段は、グループ化された後に各水平ラインの白線候補の輝度差を補正する。好ましくは前記検出手段は、二重の白線または三重の白線を検出する。
【0011】
本発明に係る白線検出プログラムまたは白線検出方法は、路面を撮像する撮像手段を備えた電子装置が実行するものであって、前記撮像手段により撮像された画像データの輝度情報と第1のしきい値とを比較することにより第1のしきい値以上の輝度差を有する少なくとも1つの白線候補を抽出するステップと、前記白線候補が他の白線候補と隣接するか否かを判定するステップと、前記白線候補が他の白線候補に隣接すると判定された場合、前記白線候補の隣接する側の輝度差を、第2のしきい値よりも大きな輝度差に補正するステップと、前記白線候補と第2のしきい値とを比較することにより前記白線候補の中から第2のしきい値以下の非白線候補を除去するステップと、前記非白線候補が除去された白線候補に基づき白線を検出するステップとを有し、第1のしきい値は、第2のしきい値よりも輝度差の大きい画素を抽出する。
【発明の効果】
【0012】
本発明によれば、白線候補が他の白線候補と隣接すると判定された場合には、白線候補の隣接する側の輝度差を第2のしきい値よりも大きな輝度差に補正し、第2のしきい値以下の非白線候補を白線候補の中から除去し、非白線候補が除去された白線候補に基づき白線を検出するようにしたので、わだちやタイヤ痕のような非白線候補と白線候補から区別することができると同時、多重線のような複数の白線候補を正確に検出することができる。
【図面の簡単な説明】
【0013】
図1図1(A)は、本発明の第1の実施例に係る電子装置の構成を示す図、図1(B)は、白線検出プログラムの機能的な構成を示すブロック図である。
図2】第1の実施例に係るレーンマーク候補抽出部の処理を示すフロー図である。
図3図3(A)は、撮像された画像を水平方向に走査したときの輝度変化を表し、図3(B)は、白線部分の輝度の拡大図である。
図4】水平ラインのグループ化の処理を説明する図である。
図5】線分の抽出の処理を説明する図である。
図6】グループ化された水平ラインの変数の格納例を示す図である。
図7A】第1の実施例に係る非レーンマーク候補除去部のフローを示す図である。
図7B】第1の実施例に係る非レーンマーク候補除去部のフローを示す図である。
図7C】第1の実施例に係る非レーンマーク候補除去部のフローを示す図である。
図8】左側隣接グループ有無の判断処理のフローを示す図である。
図9】右側隣接グループ有無の判断処理のフローを示す図である。
図10】本発明の第1の実施例による白線候補の輝度差の補正の具体例を説明する図である。
図11】本発明の第1の実施例における除去しきい値の変形例を説明する図である。
図12A】関数neighborLinesの処理動作を示すフロー図である。
図12B】関数neighborLinesの処理動作を示すフロー図である。
図12C】関数neighborLinesの処理動作を示すフロー図である。
図13】関数neighborLinesの処理を具体的に説明する図である。
図14】本発明の第2の実施例に係る電子装置の構成を示す図である。
図15】本発明の第2の実施例に係るレーンマーク候補抽出部の動作を示すフロー図である。
図16】第2の実施例による水平ラインのデータの変数の格納例を示す図である。
図17A】第2の実施例による輝度差の補正処理を示すフロー図である。
図17B】第2の実施例による輝度差の補正処理を示すフロー図である。
図18】第2の実施例に係る非レーンマーク候補除去部の処理を示すフロー図である。
図19】従来の白線検出処理の課題を説明する図である。
【発明を実施するための形態】
【0014】
本発明の電子装置は、白線検出機能を備えている。白線検出機能は、好ましくは撮像装置によって撮像された画像を解析することにより実施される。また、本発明の電子装置は、車両に搭載可能なもの、あるいは車両に搭載されたもののいずれであってもよい。さらに本発明の電子装置の機能は、白線検出機能に加えて、例えば、ナビゲーション機能、運転支援機能、自動運転機能などを備えることができる。
【実施例】
【0015】
次に、本発明の実施例について図面を参照して詳細に説明する。図1は、第1の実施例に係る電子装置の構成を示すブロック図である。同図に示すように、電子装置10は、車両の前方または後方に搭載された撮像部20と、各種の信号等を入力する入力部30と、各種の信号等を出力する出力部40と、記憶部50と、制御部60とを含む。但し、この構成は一例であり、本発明の電子装置は、このような構成に限定されない。
【0016】
撮像部20は、自車の前方または後方の道路を撮像し、その撮像データを制御部60へ提供する。制御部60は、撮像データを画像処理等によって解析し、その解析結果から白線を検出する。白線の検出結果は、例えば、ナビゲーション機能、運転支援機能、あるいは自動運転機能などにおいて利用される。1つの例では、ナビゲーション機能の走行車線の判定に利用されたり、あるいは、自車のレーン逸脱判定に利用され、レーンを逸脱した場合には、出力部40から警告が発せられる。
【0017】
制御部60は、電子装置10が有する白線検出機能を実行する。制御部60は、好ましい態様では、ROM、RAMなどを含むマイクロコントローラ等から構成され、ROMまたはRAMは、種々のプログラムを格納することができる。本実施例では、制御部60は、白線検出プログラムを実行する。記憶部50は、例えば、種々のアプリケーションソフトウエアを記憶することができ、制御部60がそれらのソフトウエアを実行することで電子装置10に種々の機能が与えられる。
【0018】
図1(B)は、制御部60が実行する白線検出プログラムの機能的な構成を示している。
同図に示すように、白線検出プログラムは、撮像部20によって撮像された画像データからレーンマーク(白線)候補を抽出するレーンマーク候補抽出部100と、抽出されたレーンマークの中から、わだちやタイヤ痕等の非レーンマークを除去する非レーンマーク候補除去部110と、レーンマーク候補とレーンマーク推定位置から次のレーンマークを検出するレーンマーク検出部120と、検出されたレーンマークから次のレーンマーク位置を推定するレーンマーク位置推定部130とを含む。
【0019】
図2は、レーンマーク候補抽出部100の処理を示すフロー図である。レーンマーク候補抽出部100は、撮像部20によって撮像された画像データを受け取る。画像データが視野角の大きな魚眼レンズによって撮像されたものである場合には、画像データの歪みを補正する。レーンマーク候補抽出部100はさらに、画像データからグレースケールの輝度画像を取り出す(S100)。
【0020】
次に、レーンマーク候補抽出部100は、輝度画像を水平方向に走査することにより、正のエッジ点および負のエッジ点を含む水平ラインを取得する(S102)。水平ラインからの正のエッジ点および負のエッジ点の抽出方法を図3に示す。
【0021】
図3(A)は、撮像画像を水平方向に走査したときに得られた輝度を表し、図3(B)は、白線部分の輝度の拡大図である。正のエッジ点は、次のように抽出する。i番目(iは自然数)画素の輝度<i+1番目の画素の輝度の条件を満足する所定の画素数以内の画素列で、開始画素と最終画素の輝度差がしきい値以上となる画素列を抽出する。抽出された画素列の中で、i+1番目の画素の輝度−i番目の画素の輝度が最大となるi+1番目の画素を正のエッジ点とする。
【0022】
同様に負のエッジ点は、次のように抽出する。i番目の画素の輝度>i+1番目の画素の輝度の条件を満足する所定の画素数以内の画素列で、最終画素と開始画素の輝度差がしきい値以上となる画素列を抽出する。抽出された画素列の中で、i番目の画素の輝度−i+1番目の画素の輝度が最大となるi番目の画素を負のエッジ点とする。
【0023】
図3(B)の具体的を用いて示せば、画素bから画素eまでが正のエッジ点の画素列となり、隣り合う画素の輝度差が最も大きい画素dが正のエッジ点となる。この場合の輝度差は、画素eの最大輝度−画素bの最小輝度の差となる。また、画素hから画素kまでが負のエッジ点の画素列となり、隣り合う画素の輝度差が最も大きい画素iが負のエッジ点となる。この場合の輝度差は、画素hの最大輝度−画素kの最低輝度の差となる。
【0024】
同様に、画素g、hが正のエッジ点、画素e、fが負のエッジ点の画素列となるが、輝度差が小さく、しきい値よりも小さくなるため、エッジ点の画素列として取得されない。
【0025】
ここでは、輝度差を、例えば、正のエッジ点の場合、暗から明になる画素列の最小値と最大値を求めたが、明側として後出する水平ラインの平均値や中央値、暗側としてエッジ点から一定間隔離れた点や一定間隔離れたところの一定範囲の画素列の平均を求めて、これらから輝度差を算出しても良い。
【0026】
抽出された正のエッジ点と負のエッジ点の組で、正のエッジ点から負のエッジ点までの長さが、ある所定の長さ(白線幅)を満足する部分を水平ラインとして取り出す。このとき、正のエッジ点は、水平ラインの左エッジ点、負のエッジ点は右エッジ点になる。この水平ラインの取得を、決められた走査範囲の下から上方向に行うと、図4に示すような複数の水平ラインが抽出される。
【0027】
水平ラインの取得で用いられるしきい値は、2重線や3重線の線間に生じ得る小さな輝度差、わだちやタイヤ痕によって生じ得る輝度差を抽出し得る小さな値に設定される。すなわち、水平ラインで取得された画像は、正のエッジ点および負のエッジ点を含む白線幅の部分、多重線の間の部分、およびわだちやタイヤ痕等の部分を包含し得る。但し、わだちやタイヤ痕等は、後述する非レーンマーク候補除去部110において除去される。
【0028】
次に、レーンマーク候補抽出部100は、水平ラインのグループ化を行う(S104)。レーンマーク候補抽出部100は、取得した水平ライン群に対して、X方向で重なった水平ライン群をグループ化する。グループ化では、後述する図6に示す変数に、グループ数と各グループのデータを格納する。格納は、例えば記憶部50に記憶される。グループのデータは、水平ライン数とグループを構成する水平ラインデータ群から構成される。水平ラインデータは、Y座標が大きい値のものから小さい値の順で格納し、それぞれのデータは、Y座標、左エッジ点のX座標と輝度差、右エッジ点のX座標と輝度差から構成される。ここで格納するX座標、Y座標は、画素位置である。例えば、図3に示す水平ラインの取得結果を表す図4は、水平ライン群を2つのグループに分け、グループ[0]は、12個の水平ラインから構成され、グループ[1]は、13個の水平ラインから構成される。
【0029】
次に、レーンマーク候補抽出部100は、線分の抽出を行う(S106)。線分の抽出は、図5に示すように、各グループの水平ラインを3次元座標の路面(Z=0)に投影して、その各水平ラインの中点、すなわち、左エッジ点と右エッジ点の中央値を求め、これらの値から最小二乗法でレーンマーク候補となる線分の直線式Y=aX+b(Z=0)の傾きaとY切片bを算出する。このときの原点は、好ましくは、車の中央位置であり、X軸上前方がプラス、Y軸上左側がプラスである。また、グループ毎に水平ラインの幅(左右エッジ点間の距離)の平均をとり、レーンマーク幅を算出する。例えば、3次元座標でのX座標、Y座標の単位は、m(メートル)である。線分の抽出の処理では、図6に示す変数に、グループ毎に算出した線分データ(直線式の傾きaとY切片b)とレーンマークデータ(線幅)を格納する。
【0030】
次に、非レーンマーク候補除去部110について説明する。レーンマーク候補抽出部100による抽出では、小さなしきい値により輝度差が小さい多重線間の領域を抽出するため、同時に、わだちやタイヤ痕等のノイズデータも抽出する可能性がある。非レーンマーク候補除去部110は、二重線や三重線など多重線の水平ラインのグループから、輝度差の小さいわだちやタイヤ痕の水平ラインのグループを取り除く処理を行う。図7Aないし図7Cは、非レーンマーク候補除去部の動作フローである(Tは、True、Fは、Faultである)。
【0031】
まず、レーンマーク候補抽出部100で取得した水平ラインのグループ群を、グループの線分のY切片bを使用して降順にソートする(S301)。例えば、図5のグループ[0]、[1]について処理が実行されると、そのグループ内の水平ラインがソートされる。更に、除去するグループを管理する除去対象グループを対象グループ無しに初期化する(S302)。次に、各グループに対して、除去するか否かを判定する。そのために、グループを示す変数iを0に初期化する(S303)。
【0032】
次に、iがグループ数(図6でいえばmの値)未満か否かを判断し(S304)、グループ数以上ならば、対象グループがなくなったので、除去対象グループに登録したグループを削除して(S320)、終了する。iがグループ数未満であれば、グループ[i]が、除去対象か否かを判定する処理を行う。図4の例で言えば、グループ[0]から、除去対象か否かの判定が行われる。
【0033】
この処理では、先ず、除去対象グループの左側および右側に隣接グループがあるか否かを示す変数「neighbor」を、両側に隣接グループ無しを示す値「0」に設定する(S305)。変数「neighbor」は、値が0のとき「隣接グループなし」、1のとき「左側に隣接グループあり」、2のとき「右側に隣接グループあり」、3のとき「両側に隣接グループあり」を示す。
【0034】
次に、グループ[i]の水平ライン群について、左エッジ点の輝度差の平均を求め、変数「posDiff」に格納する(S306)。同様に、グループ[i]の水平ライン群について、右エッジ点の輝度差の平均を求め、変数「negDiff」に格納する(S307)。グループ[i]の左右のエッジ点の輝度差の平均の算出は、図6に示すグループ毎の水平ラインデータが用いられる。
【0035】
左右の輝度差平均の算出後、図8に示す左側隣接グループ有無の判断処理(後述する)を行い、グループ[i]の左側に隣接グループがあるか否かを判定する(S308)。左側に隣接グループがあると判定された場合には、左側の輝度差が小さく出ている可能性があるので、左側の輝度差平均を示すposDiffを、隣接していなければ生成された値に近い右側の輝度差平均を示す変数negDiffに置き換え(S309)、neighborに1を設定する(S310)。
【0036】
同様に、図9に示す右側隣接グループ有無の判断処理(後述する)を行い、グループ[i]の右側に隣接グループがあるか否かを判定する(S311)。右側に隣接グループがあると判定された場合には、右側の輝度差が小さくでている可能性があるので、右側の輝度差平均を示す変数negDiffを、隣接してなければ生成された値に近い左側の輝度差平均を示す変数posDiffで置き換え(S312)、neighborに2を加算する(S313)。
【0037】
左右の隣接グループの有無を判定後、変数neighborが3か否か、つまり、両側に隣接グループがあるか否かを判定する(S314)。両側に隣接グループがある場合は、両側とも輝度差が小さく出ている可能性があるので、左側の輝度差平均を示す変数posDiffと右側の輝度差平均を示す変数negDiffを、除去しきい値よりも大きい値、例えば、除去しきい値+1に設定して、除去対象グループにならないようにする(S315、S316)。両側に隣接グループが存在する場合は、例えば、3重線の真ん中の白線が該当する。
【0038】
隣接グループの判定後、グループ[i]が除去対象グループか否かの判定を行う(S317)。判定は、左右いずれか一方の輝度差平均が除去しきい値以下か否かを判定する。 この除去しきい値は、水平ラインの取得(S102)において、エッジ点を求めるしきい値よりも大きな値であり、単一の白線線のエッジ点と、わだちやタイヤ痕のエッジ点とを区別できる値である。
【0039】
除去対象グループと判定された場合には、グループ[i]を除去対象グループに登録し(S318)、次のグループの判定を行うために、グループを示す変数iを1加算する(S319)。S319後は、S304の判定に戻る。
【0040】
図10は、S308からS317の処理の一例を示す図である。図10(A)に示すように、白線候補を抽出するためのしきい値(例えば、小さな値である2)を設定し、当該しきい値よりも輝度差の大きい水平ラインを取得する(S102)。白線L1、L2の二重線の輝度差P=10、およびその白線L1と白線L2の間の輝度差=5、白線L3、L4、L5の三重線の輝度差=10、および白線L3、L4、L5の間の輝度差=5、わだちやタイヤ痕Nの輝度差=3であるとき、二重線、三重線、わだちやタイヤ痕のすべてがしきい値よりも大きいため、レーンマーク候補として抽出される。図10(B)は、全てのスキャン後の取得された水平ラインを示している。レーンマーク候補に含まれる、わだちやタイヤ痕のようなノイズNは、非レーンマーク候補除去部110によって除去される。
【0041】
例えば、白線L1のグループに対して非レーンマーク候補除去部110の処理が実行されるとき、白線L1の右側に白線L2の隣接グループが存在するため、白線L1の右側のエッジ点の輝度差が、左側のエッジ点の輝度差(平均)に置き換えられる。同様に、白線L2の左側には、隣接する白線L1が存在するため、白線L2の左側のエッジ点の輝度差は、水際のエッジ点の輝度差(平均)に置き換えられる。また、三重線の白線L3の右側のエッジには白線L4が隣接するため、右側のエッジ点は、左側のエッジ点の輝度差に置き換えられ、白線L5も同様に、左側のエッジ点の輝度差が右側のエッジ点の輝度差に置き換えられる。両側において隣接する白線L4に関しては、除去しきい値よりも大きな値、例えば、除去しきい値が7であるとき、左右の輝度差が8に設定される。但し、白線L4の左右のエッジ点を、白線L3の隣接する白線L4が存在しない左側のエッジ点の輝度差、あるいは白線L5の隣接する白線L4が存在しない右側のエッジ点の輝度差に置換するようにしてもよい。
【0042】
図10(C)は、白線の隣接する側のエッジ点の輝度差を補正した後の水冷ラインの輝度差を表している。輝度差の補正を行った後、除去対象グループの判定(S317)が行われ、いずれか一方に除去しきい値よりも大きな輝度差を有する白線L1、L2、L3、L5は、除去対象グループにならずに処理を終える。一方で、ノイズNであるわだちやタイヤ痕は、除去しきい値=7よりも小さな輝度差=3であるため、除去対象グループと判定され、非レーンマーク候補として除去される。
【0043】
ここで、除去しきい値は、次のように対応しても良い。線分の抽出処理(S106)において、例えば、図11の241、242に示すように、原点に最も近い水平ラインまでの距離を求め、距離が大きくなるに従って、この除去しきい値を下げるように可変しても良い。これは、カメラの解像度や画像のひずみ補正などの影響により、遠い位置ほど輝度差が表れ難くなるためである。
【0044】
また、レーンマークの色が黄色の場合は、白に比べて輝度差が出にくいので、線分の色を求めて、色に応じて、除去しきい値を変えるようにしても良い。色の判定は、例えば、水平ラインの取得(S102)で各水平ラインの色、線分の抽出(S104)で水平ライン群の色の中で最も多い色を線分の色とすることができる。
【0045】
次に、上記した左側の隣接グループ有無の判断処理について説明する。図8は、図7BのS308で実行される処理である。まず、グループを示す変数iが1以上か否かを判定する(S3081)。iが1未満ならば、左側に隣接グループが存在しないので、結果を示す変数resultに「隣接グループ無し」を設定して(S3086)、その値を返して終了する。iが1以上ならば、図12に示す2つのグループでY座標が同じ水平ラインで2つの水平ライン間の距離が所定の範囲にある水平ライン数を算出する関数neighborLinesを、1つ前のグループ(左側のグループ)と現在のグループを引数にして呼び出し、該当する水平ライン数を変数numLinesに設定する(S3082)。関数neighborLinesの詳細については後述する。
【0046】
該当する水平ライン数numLinesが現在のグループの水平ライン数の何%になるのかの割合を算出し、これを変数ratioに格納し(S3083)、ratio値が隣接しきい値以上か否かを判定する(S3084)。隣接しきい値未満の場合は、結果を示す変数resultに「隣接グループ無し」を設定して(S3086)、その値を返して終了する。隣接しきい値以上の場合は、結果を示す変数resultに「隣接グループ有り」を設定して(S3085)、その値を返して終了する。
【0047】
次に、図9に示す右側隣接グループ有無の判断処理について説明する。最初に、グループを示す変数iがグループ数−1未満か否かを判断する(S3111)。グループ数−1以上ならば、右側に隣接グループはないので、結果を示す変数resultに「隣接グループ無し」を設定して(S3116)、その値を返して終了する。グループ数−1未満ならば、図12に示す2つのグループでY座標が同じ水平ラインで2つの水平ライン間の距離が所定の範囲にある水平ライン数を算出する関数neighborLinesを、現在のグループと1つ後のグループ(右側のグループ)とを引数にして呼び出し、該当する水平ライン数を変数numLinesに設定する(S3112)。
【0048】
該当する水平ライン数numLinesが現在のグループの水平ライン数の何%になるかの割合を算出し、これを変数ratioに格納し(S3113)、ratio値が隣接しきい値以上か否かを判定する(S3114)。隣接しきい値未満の場合は、結果を示す変数resultに「隣接グループ無し」を設定して(S3116)、その値を返して終了する。隣接しきい値以上の場合は、結果を示す変数resultに「隣接グループ有り」を設定して(S3115)、その値を返して終了する。
【0049】
次に、関数neighborLinesの処理を、図12Aないし図12Cのフローを参照して説明する。neighborLinesは、2つのグループでY座標が同じ水平ラインで2つの水平ライン間の距離が所定の範囲にある水平ライン数を算出する関数であり、引数m、nは、それぞれグループ[m]、グループ[n]を示し、グループ[n]は、グループ[m]の右側にある値(m+1=n)で呼ばれる。
【0050】
まず、Y座標が同じ水平ラインで2つの水平ライン間の距離が所定の範囲にある水平ライン数を示す変数numLinesを0に初期化し(S3401)、グループ[m]の水平ラインを示す変数iを0に初期化し(S3402)、グループ[n]の水平ラインを示す変数jを0に初期化する(S3403)。
【0051】
次に、グループ[m]の水平ラインを示す変数iがグループ[m]の水平ライン未満か否かを判断する(S3404)。水平ライン数以上ならば、比較する水平ラインデータがないので、関数値として変数numLinesの値を返して処理を終了する。水平ライン数未満ならば、同様に、グループ[n]の水平ラインを示す変数jがグループ[n]の水平ライン数未満か否かを判断する(S3405)。水平ライン数以上ならば、比較する水平ラインデータがないので、関数値として変数numLinesの値を返して処理を終了する。
【0052】
水平ライン数未満ならば、グループ[m]の水平ライン[i]のY座標が、グループ[n]の水平ライン[j]のY座標と同じか否かを判断する(S3406)。Y座標が同じ場合は、2つの水平ライン間の距離が所定の範囲にあるか否かを判断する(S3407)。2つの水平ライン間の距離が所定の範囲にあるか否かの判断は、グループ[n]のj番目の水平ライン[j]の左エッジ点X座標とグループ[m]の水平ライン[i]の右エッジ点X座標間の距離(画素数)が範囲しきい値以下か否かを判断して行う。
【0053】
範囲しきい値以下の場合は、X座標が所定の範囲にあると判断して、X座標が所定の範囲にある水平ライン数を示す変数numLinesを1加算する(S3409)。次に、次の水平ラインの比較を行うために、グループ[m]の水平ラインを示す変数iを1加算し(S3410)、グループ[n]の水平ラインを示す変数jも1加算して(S3411)、次の水平ラインの比較を行う。
【0054】
S3406でY座標が異なると判断された場合は、グループ[m]の水平ライン[i]のY座標とグループ[n]の水平ライン[j]のY座標の値の比較を行い(S3408)、グループ[m]の水平ライン[i]のY座標が大きい場合、図6で各グループの水平ラインはY座標が降順に格納されているので、Y座標の値を合わせるために、変数iを1加算して(S3412)、次の水平ラインの比較を行う。グループ[n]の水平ライン[j]のY座標が大きい場合、同様に、Y座標の値を合わせるために、変数jを1加算して(S3413)、次の水平ラインの比較を行う。
【0055】
図13は、関数neighborLinesの処理を具体的に説明する図である。図13(B)は、左側レーンマークが2重線、右側レーンマークが単線からなるレーンの撮像画像図13(A)に基づいて水平ラインを検出し、グループ化した状態を示す図である。なお、図13(B)の方眼は、1マスが1画素を示すものとする。
【0056】
具体例として図13(B)を用いて説明する。図13(B)は、左側レーンマークが二重線、右側レーンマークが単線からなるレーンの撮像画像Dである図13(A)から水平ラインを検出して、グループ化したものである。この画像で1マスが1画素を表す。
【0057】
関数neighborLinesの範囲しきい値を2画素と仮定すると、関数neighborLines(0,1)の結果は、グループ[0]とグループ[1]でY座標が同じ水平ラインが8本あり、この中でグループ[1]の左エッジ点X座標とグループ[0]の右エッジ点X座標の間隔が2画素以下の水平ライン数は8なので、変数numLinesの値は8となる。同様に、関数neighborLines(1,2)を算出すると、全ての左右エッジ間の距離が2以上なので、0となる。
【0058】
図8に示す左側隣接グループの有無の判断処理において、隣接しきい値を0.4と仮定すると、i=0(グループ[0])のとき隣接グループ無し、i=1(グループ[1])のとき隣接グループ有り、i=2(グループ[2])のとき隣接グループ無しとなる。この算出において、処理中の変数ratioの値は、i=1(グループ[1])のとき8/9=0.89、i=2(グループ[2])のとき0/17=0、となる。なお、i=0(グループ[0])のときは、左側に隣接グループはないので、変数ratioの値を算出せずに隣接グループ無しとなる。
【0059】
同様に、図9に示す右側隣接グループ有無の判断処理において、隣接しきい値を0.4と仮定すると、i=0(グループ[0])のとき隣接グループ有り、i=1(グループ[1])のとき隣接グループ無し、i=2(グループ[2])のとき隣接グループ無しとなる。この算出において、処理中の変数ratioの値は、i=0(グループ[0])のとき8/18=0.44、i=1(グループ[2])のとき0/9=0、となる。なお、i=2(グループ[2])のときは、右側に隣接グループはないので、変数ratioの値を算出せずに隣接グループ無しとなる。
【0060】
レーンマーク検出部120は、非レーンマーク候補除去部110から出力されたグループ情報の線分データとレーンマーク位置推定部130から出力されるレーンマークの推定一からレーンマークを検出し、レーンマーク情報を出力する。レーンマーク位置推定部130は、検出したレーンマークの線分データと過去のレーンマークの線分データから、次の線分データを推定する。レーンマーク検出部120やレーンマーク位置推定部130の詳細は、例えば、特許文献3に開示されている。
【0061】
このように本実施例によれば、二重線や三重線のような多重線が撮像されたとき、白線候補が他の白線候補に隣接するか否かを判定し、隣接すると判定された場合には、隣接する側の白線側の輝度差を、ノイズ等の非白線候補を除去するときの除去しきい値よりも大きな輝度差に補正するようにしたので、多重線の白線候補の間隔とわだちやタイヤ痕のようなノイズをと識別することが可能となり、多重線を正確に検出しつつ不要なノイズを削除することができる。
【0062】
次に、本発明の第2の実施例について説明する。第1の実施例は、全ての水平ラインの走査を行った後に、隣接する側のエッジの輝度差を補正するものであるが、第2の実施例は、水平ラインを走査する毎に輝度差の補正を行うものである。図14は、第2の実施例に係る白線検出プログラムの機能的な構成を示すブロック図であり、第1の実施例と同様のものについては同一参照番号を附す。
【0063】
レーンマーク候補抽出部100Aの動作フローを図15に示す。レーンマーク候補抽出部100Aは、まず、撮像部20が撮像した画像からグレースケールの輝度画像を取り出し(S600)、撮像画像の走査位置を示す変数iを0に初期化する(S602)。次に、走査位置を示す変数iが走査数未満か否かを判断する(S604)。変数iが走査数未満ならば、水平方向に走査して水平ラインを取得し(S606)、取得した水平ラインの輝度差を補正する(S608)。次に、変数iに1を加算して(S610)、次の走査処理を行う。すなわち、第1の実施例が全ての水平ラインの取得後に輝度差を補正したのに対し、第2の実施例では、水平ラインを取得する毎に輝度差を補正する。変数iが走査数以上となったとき走査範囲の走査が終了し、第1の実施例のときと同様に、取得した水平ライン群がグループ化され(S612)、線分が抽出される(S614)。
【0064】
次に、水平ラインの取得処理(S606)について説明する。水平ラインの取得は、第1の実施例と同様の処理で、変数iの示した走査位置を水平方向(X方向)に走査して、正のエッジ点と負のエッジ点を抽出する。輝度差のしきい値は小さな値に設定され、2重線や3重線の多重線の間の輝度差や、わだちやタイヤ痕等のノイズの輝度差も抽出され得る。走査してエッジ点を抽出した結果は、図16に示す変数の走査[i]に格納される。すなわち、走査したときのY座標、抽出した水平ライン数(n)、各水平ライン[k](k=0、1、2、・・・、n−1)の情報を格納する。水平ライン[k]のデータは、左右エッジ点のX座標と輝度差から構成される。水平ラインは走査方向で抽出した順、X座標が小さい順に格納される。
【0065】
次に、輝度差の補正処理(S608)について説明する。図17Aおよび図17Bは、輝度差の補正処理を示すフローである。まず、右エッジ点の隣接状態を示す変数preRightlsNearを0に初期化する(S6301)。この変数は、水平ラインの右エッジ点が次の水平ラインの左エッジ点と隣接しているとき1、隣接していないとき0である。次に、水平ラインのインデックスkを0に初期化する(S6302)。
【0066】
次に、水平ラインインデックスkが走査[i]の水平ライン数未満か否か判断する(S6303)。kが水平ライン数以上ならば、処理を終了する。水平ラインインデックスkが走査[i]の水平ライン数未満ならば、変数preRightlsNearが1か否かを判断することにより、1つ前の水平ライン[k−1]の右エッジ点X座標が現在の水平ライン[k]の左エッジ点X座標と隣接しているか否かを判断する(S6304)。
【0067】
1つ前の水平ライン[k−1]の右エッジ点X座標が現在の水平ライン[k]の左エッジ点X座標と隣接していることは、現在の水平ライン[k]の左エッジ点X座標が1つ前の水平ライン[k−1]の右エッジ点X座標と隣接していることになるので、走査[i]の水平ライン[k]の左エッジ点輝度差に隣接していなければ生成された値に近い右エッジ点の輝度差を設定する(S6305)。このように、第2の実施例では、走査[i]の単位で、輝度差の置き換え補正を行っている。
【0068】
次に、水平ラインインデックスkが走査[i]の水平ライン数−1未満か否か、つまり右側に水平ラインがあるか否かを判断する(S6306)。右側に水平ラインがない場合、右エッジ点の隣接状態を示す変数preRightlsNearを0(右側隣接なし)を設定し(S6308)、水平ラインインデックスkを1加算して(S6314)、次の水平ラインの処理を行う。
【0069】
右側に水平ラインがある場合、走査[i]の水平ライン[k]の右エッジ点X座標と右側の走査[i]の水平ライン[k+1]の左エッジ点X座標の距離(画素数)が範囲しきい値以下か否かを判断する(S6307)。差が範囲しきい値以下ならば、右エッジ点が隣接していると判断する。
【0070】
隣接していない場合、右エッジ点の隣接状態を示す変数preRightlsNearを0(右側隣接なし)に設定して(S6308)、水平ラインインデックスkを1加算して(S6314)、次の水平ラインの処理を行う。右エッジ点が隣接していると判断した場合、変数preRightlsNearの値により左エッジ点が隣接しているか否かを判断する(S6309)。左エッジ点も隣接している場合、両エッジ点の輝度差が小さく出ている可能性があるので、両エッジ点の輝度差を(除去しきい値+1)に設定する(S6310、S6311)。
【0071】
左エッジ点が隣接していない場合、走査[i]の水平ライン[k]の右エッジ点輝度差に隣接していなければ生成された値に近い左エッジ点の輝度差を設定する(S6312)。次に、右エッジ点の隣接状態を示す変数preRightlsNearに1(右側隣接あり)を設定し(S6313)、水平ラインインデックスkを1加算して(S6314)、次の水平ラインの処理を行う。
【0072】
次に、輝度差の補正の具体例を、図13(B)を参照して説明する。ここで、範囲しきい値は、2と仮定する。グループ[2]は、隣接する水平ラインがないので、輝度差の補正はない。グループ[0]の水平ライン[k],(k=0、1、・・・、17)の左右エッジ点の輝度差(左エッジ点輝度差,右エッジ点輝度差)を水平ライン順(Y座標の降順)に、(120,22)、(118,20)、(116,18)、(114,18)、(112,14)、(110,18)、(108,18)、(106,20)、(104,80)、(102,102)、(104,102)、(100,100)、(98,100)、(100,100)、(102,100)、(100,102)、(96,98)、(100,100)、グループ[1]の水平ライン[m],m=0、1、・・・、8の左右エッジ点の輝度差を水平ライン順に、(88,140)、(28,138)、(20,136)、(22,134)、(20,132)、(18,132)、(22,130)、(24,128)、(22,126)、と仮定すると、輝度差の補正を行った後の結果は次の通りである。輝度差の補正後のグループ[0]の水平ライン[k],(k=0、1、・・・、17)の左右エッジ点の輝度差は、(120,120)、(118,118)、(116,116)、(114,114)、(112,112)、(110,110)、(108,108)、(106,106)、(104,80)、(102,102)、(104,102)、(100,100)、(98,100)、(100,100)、(102,100)、(100,102)、(96,98)、(100,100)、グループ[1]の水平ライン[m],m=0、1、・・・、8の左右エッジ点の輝度差は、(88,140)、(138,138)、(136,136)、(134,134)、(132,132)、(132,132)、(130,130)、(128,128)、(126,126)となる。
【0073】
水平ラインのグループ化は(S612)、第1の実施例のときの水平ラインのグループ化(S104)と同様の処理である。図16に示す変数に、取り出した水平ラインに対してX方向で重なった水平ライン群をグループ化して、図6に示す変数にグループ数と各グループの水平ラインデータを格納する。第2の実施例では、図6に示す格納の時点で、既に置き換え処理が行われていることになる。線分を抽出(S614)は、第1の実施例のときの線分の抽出(S106)と同様の処理である。図6に示すように格納した各グループの水平ラインのデータから線分データとレーンマークデータを算出して、図6に示す変数に格納する。
【0074】
次に、非レーンマーク候補除去部110Aについて、図18のフローを参照して説明する。この処理は、水平ラインのグループから輝度差が小さい水平ラインのグループを取り除く処理を行う。まず、グループを示す変数iを0に初期化する(S3801)。次に、iがグループ数未満か否かを判断し(S3802)、グループ数以上ならば除去対象グループがなくなったので終了する。グループ数未満ならば、グループ[i]が、除去対象か否かを判定する処理を行う。
【0075】
グループ[i]の水平ライン群について、左エッジ点の輝度差の平均を求め、変数posDiffに格納する(S3803)。同様に、グループ[i]の水平ライン群について、右エッジ点の輝度差の平均を求め、変数negDiffに格納する(S3804)。次に、グループ[i]が削除対象か否かの判定を行う(S3805)。判定は、左右いずれか一方の輝度差平均が除去しきい値以下か否かである。削除対象ならば、グループ[i]を削除する(S3806)。次に、グループを示す変数iに1加算して(S3807)、次の水平ラインのグループの処理を行う。
【0076】
本実施例では、水平ラインが取得される毎に、白線候補が隣接するか否かを判定し、隣接すると判定された場合には、隣接する側の白線側の輝度差を、ノイズ等の非白線候補を除去するときの除去しきい値よりも大きな輝度差に補正するようにしたので、第1の実施例の時と比較して処理時間を短縮することができる。
【0077】
以上、本発明の好ましい実施の形態について詳述したが、本発明は、特定の実施形態に限定されるものではなく、特許請求の範囲に記載された発明の要旨の範囲において、種々の変形、変更が可能である。
【符号の説明】
【0078】
10:電子装置 20:撮像部
30:入力部 40:出力部
50:記憶部 60:制御部
100、100A:レーンマーク候補抽出部
110、110A:非レーンマーク候補除去部
120:レーンマーク検出部
130:レーンマーク位置推定部
L、L1、L2、L3、L4、L5:白線
N:ノイズ
図1
図2
図3
図4
図5
図6
図7A
図7B
図7C
図8
図9
図10
図11
図12A
図12B
図12C
図13
図14
図15
図16
図17A
図17B
図18
図19