外光による影響を排除した色差による画像処理

LCDや7SEGに表示される数字を自動で読み取りたいと思って実験してみた。画像処理はほとんどやったことがないのだがググってみると一般的には複数の画像処理を行い最終的には二値化画像を生成するようなのでまねてやってみたら...元画像の品質や外光による影響を大きく受けたりして調整作業がとてもシビアだ。

もっと安直な方法はないものかと...外光の映り込みによる影響を受けること、フルカラー画像をグレイスケール変換してしまうと重要な色情報が欠落してしまうこと、などから輝度差を除外した色差によるカラーエッジ判定を行う方法を考えてみた。

色差は隣接するピクセルのRGB値をそれぞれ減算して求めるが輝度差の影響を排除するため減算結果の最小値/最大値の差を色差とする方法を実験してみた。RGBの場合、輝度が違う同色は各RGB値が一律に変化することに着目した方法である。

【色差の計算方法】

※単純にするため本プログラムでは人間の目の色感度差等の補正はしていないがカメラ側が補正しているなら同じように補正すべきかも。

最初はカラーエッジ検出だけを考えていたが色差が判断できるのならその逆の同色も判断できるだろうと指定ピクセルと同色のピクセルを検出する実験をしてみたところ想定外にうまくいってしまった。しかも数字認識処理のために画像イメージ全体を前処理する必要もなく極めて高速に処理できるというメリットがある。

【参考情報】
色差式というものがあるが今回は使っていない。

新しい色差式(CIE DE2000)について。
17. 色差について

【元画像】
test.bmp (クリック後に元画像のDLが可能)

【カラーエッジ検出】
./icdd test.bmp -e 5

【同色検出】
./icdd test.bmp -f 1950 1140 50

【プログラム (Eclipse-MinGW) 】
目視確認用のモノクロ画像を生成するプログラム。