車線逸脱警告システム

「車線逸脱警告システム」は、自動車の走行中において、運転手が車線変更を意図していないのに自車が走行中のレーンから車両をはみ出してしまった際に警告音を出して運転手にレーン逸脱したことを警告してくれるシステムです。車両の前方を撮影しているカメラの映像からリアルタイムにレーンの領域の道路上での座標を検出し、同時に自車の位置を算出することで、レーンと自車の位置関係を計算し、これによりレーンが逸脱した場合に警告をしてくれるというのが基本的な仕組みです。

従来は自動車会社が販売時にカメラと同時に内部に据え付けで搭載する形での提供が普通のシステムだったのですが、カメラ一台で実現できる技術であるので近年はスマートフォンアプリとしても提供されるようになってきています。例えば以下の動画のiOnRoadは、iPhone/Android向けに販売されている車線逸脱警告アプリです。このデモンストレーション動画のように、車内のハンドル脇に自分でスマートフォンを設置することで使用することができます。

iOnRoadのデモ

この連載はカメラを用いたコンピュータビジョン技術の連載なので詳しくは触れませんが、当然これらのシステムは自動車が取得する加速度センサやハンドリングの情報、GPSによる位置情報などと連携してシステム化されているので、必ずしもカメラから全ての情報を取得する必要がないことが特徴と言えます。

レーン検出の仕組み

では、車線逸脱警告システムに用いられる、車両前方動画からのレーン検出の仕組みを紹介していきましょう。以下は典型的なレーン検出の仕組みがわかりやすいレーン検出処理の動画です。

レーン検出の典型的な動画

車線逸脱警告システムでは、この動画の左上に表示されているように、入力画像を真上から見下げた「鳥瞰画像」に変換したのちに、レーンの領域が白色になるように白と黒だけの「2値化画像」に変換した画像を用います。この2値化画像中のレーンと思われる領域にレーンの曲線モデルをあてはめて、映像中のどのような曲線の形でレーンが存在するかを検出します。車線逸脱警告システムでは自車が現在走行中のレーンからはみ出していないかが判定できれば良いので、そのためには「(1)レーンの3D位置」「(2)自車の3D位置」の2つの情報が必要です。以下の図で、典型的な車線逸脱警告システムの処理手順を示します。

車線逸脱警告システムの処理フロー

ここでの各処理を簡単に説明しましょう。

1. 前処理

画像中の「射影変換(ホモグラフィ)」により、元の画像を真上から見た画像に変換します。車載カメラの場合、カメラの据え付け場所と角度が決まっているので、ずっと平坦な道を走行する場合は同じカメラ角度・位置に従った射影変換を動画中の全てのフレームで行うことができます。また、傾斜がある道や平坦でない道の場合、その都度、どういう射影変換を行えば真上から見た画像にできるかを推定するアルゴリズムを導入して行います。

更に、このあとの処理でなるべく綺麗にレーン領域が他の領域と区別がついた画像にしておくとレーン検出の精度がよくなるので、影の部分を取り除く処理や、露光の補正処理、コンストラストの調整などの「画像フィルタ処理」を行います。

2. レーン検出

まずは、入力画像を加工して、レーン部分の検出を行います。まずは元のカラー画像を、各画素での明るさや色の種類をもとに輝度をもとにしたグレー値画像に変更します。このグレー画像を、自動的に境界値を決めてくれるような適応的フィルタを用いて、境界値を境に画素の値を255(白)もしくは0(黒)の2値だけに分けた「2値画像」に変換します。これにより、レーンの領域は255(白)として残った画像が生成されます(※画像の量子化ビット数が8bitのグレー画像で、すなわち0(黒)~255(白)の値を撮る場合)。

ただし、実際の走行時の前方映像は、このレーン検出を行った時点でも綺麗にレーン部分だけ残るわけではありません。道路以外の部分で255(白)のまま残っている領域も多いわけです。また、各種撮影環境の変化によりレーンとそれ以外の境界が前処理後も区別がつきにくい場合が多く、従ってこのあとのレーンあてはめ処理や、時系列トラッキング処理が重要になってきます

3. レーン部分へのレーンモデルのあてはめ

(2)で用意できた2値画像のレーン領域にレーンモデルを「曲線あてはめ」することで、曲線が2値画像中のどこにどのような曲線形状で存在するかを検出します。

レーン検出ではspilne曲線という多項式曲線のレーンモデルを2値画像にあてはめます。レーン検出以外でもCG/CAD分野でもよく用いられるB-spline曲線に代表される各種spline曲線は、そのパラメータの値を色々と変えることで多様な曲線の形を表現できます。2値画像のレーン部分に対して、最も曲線の形がフィットしているパラメータを計算することで、レーンモデルのパラメータ推定結果としてレーンの形状と位置を推定することができます。

4. 時系列フィルタリングによる平滑化と、自動車センサーの情報との統合(同期)

自動車の処理は動画処理なので、毎回の1フレームごとの(1)~(3)の処理にランダムな誤差が載ってくると、その誤差によるデータの揺らぎにより、各フレームでの推定結果を動画としてつなげてみたときにランダムノイズが混ざった滑らかでないデータになります。

そこで、「カルマンフィルタ」という時系列フィルタを用いて時系列予測により全体として滑らかな推定結果を得る処理を行います。「カルマンフィルタ」は、以前紹介した「パーティクルフィルタ」のように、「これまでのフレームの情報から時系列モデルをもとに、次のフレームの情報を予測する」アルゴリズムです。

カルマンフィルタはパーティクルフィルタのように複雑な確率分布は表現していません。そのかわりカルマンフィルタでは、求めたい推定値(ここでのレーンのパラメータなどの追跡対象の値)の動的モデル(等速直線運動のような一方向への物体の動き)と、そこに毎フレームごとに加算されているガウス分布の雑音という「動的モデル+ガウス雑音」という単純な形式で入力データの値(観測値)が構成されていると仮定します。つまりは、観測値からガウス雑音部分を差し引けば、滑らかな動的モデルによる時系列遷移がその中に存在しているという仮定のもとで、各フレームの値を1つ前のフレームの値から予測し、モデルで仮定したとおりの動的モデルでの滑らかなデータの予測を行うというものです。パーティクルフィルタと比べると、単純で直線的な運動ならカルマンフィルタを用いた方が計算コストも低く使いやすいという違いがあります(カルマンフィルタは人物追跡のように急に運動方向が変わってしまう物の追跡には不向き。急には方向転換できない、船や飛行機などの運動の追跡は得意)。

カルマンフィルタにより毎フレームでの(1)~(3)の計算結果を時系列方向にもフィルタリングしておくと、毎フレーム毎の誤差分をモデルに従って取り除いた「時系列データの全体の滑らかさ」を予測により生み出すことができます。また平滑化と同時に追跡を行っているわけで、障害物や影で一時的にレーンが画像に移らなくなってもカルマンフィルタがその間に予測を継続しておくことで、レーンが写るようになった時点で追跡を復活することができます。

更には、動画以外で取得した、より精度の高い自動車センサーからの自動車の位置の情報を加味してカルマンフィルタの予測をすることで、「より確からしい(誤差の少ない)」レーン推定結果を得る事が可能になります(ちなみにこのように複数のセンサの特性を活かしてより精度の高いデータ計測を行う事を。工学分野では俗に「センサーフュージョン」と呼びます)。