プログラムの使い方
アプレットを起動すると、上方に原画像を選択するための選択ボックスが現れ、その下に、原画像(左上)、赤を抽出した画像(右上)、それを収縮処理した画像(左下)、それをさらに膨張処理した画像(右下)が表示されます。いろいろな原画像を用いて、交通標識を認識した結果を確認してください。
プログラムの実行結果
下の図は、実行結果の一例を示します。画像選択のための選択ボックスは省略されています。左上は、交通標識に陰影のある原画像で、右上は「赤」の部分を抽出した二値画像、左下は、それを収縮(erosion)した画像、右下は収縮処理した結果をさらに膨張(dilation)した画像です。収縮により小さなノイズが除去され、膨張によって、少しやせ細った交通標識がはっきりしています。ただし、完全にはノイズが除去されていませんので、さらに形状による最終的な認識が必要になります。
まとめ
交通標識の認識は、世界中の自動車メーカーや大学、研究所において鋭意研究中で、Intelligent Vehicle(知能を持った車)の領域として、学会発表が多数あります。これらのすべてを知ることはできませんが、公開されているウエブサイトから、一部を垣間見ることができます。
赤の抽出とノイズの除去は、昼間の交通標識の場合には、RGB成分の比率を用いる方法が最も良好な結果が得られました。夜間には、照明のスペクトラムにバラツキが大きかったり、反射光が強すぎて彩度の低い(白っぽい)状態になったりして、十分な結果が得られませんでした。
昼間の抽出結果のノイズを減らすには、抽出するhueの範囲を狭くするのが効果的です。しかし、夜間の交通標識の抽出は一層困難になります。夜間には、交通標識の強い反射のためにノイズが相対的に減少しますので、昼間はhueの範囲を狭く、夜間はhueの範囲を広くするなど、昼間と夜間で抽出条件を切り替える必要があります。
参考資料
この記事は、筆者のウエブサイト『Visual c++ 6.0を用いた易しい画像処理(14)-原画像から赤色を抽出し、一旦拡張して縮小する-(ただし、現在はVisual C++ 2005 Express Edition版に改定)』を一部変更(交通標識の抽出結果の欠如を重視して、クロージング処理を行なっていたのを、今回は、ノイズ除去に重点を移してオープニング処理にしました)してJava言語に書き直し、分かりやすく加筆したものです。
ウエブ上には多数の優れた資料があり、赤の抽出については本文中で紹介しました。二値画像の膨張(dilation)、収縮(erosion)などを含む一般的な画像処理については、下記があります。
- 『C言語による画像処理入門』 阿居院猛・長尾智晴 著、昭晃堂、2000年11月
- 『コンピュータ画像処理』 田村秀行 著、オーム社、2002年12月
- 『ディジタル画像処理の基礎と応用-基本概念から顔画像認識まで-』 酒井幸市 著、CQ出版、2003年8月