画像の局所的な色補正処理

ここ最近、研究室内のあるプロジェクトに使っているカメラのための.NETコンポーネントを作っている。キッカケは「今度またいつか使いたいときに手軽に組み込めると良いよねー」なノリ*1からだったのだが、このコンポーネントの動作テストのために作ったプログラムがパラメータ設定などに役立つ強力なツールに成長してしまい、挙句の果てには画質向上エンジン*2にまで成り上がってしまったのだ。
ある企業さんが絡むのでプロジェクトの詳細は言えないのだが、画像処理を用いたある認識システムを作っている。高精度な認識のためにはできるだけ同一環境(つまり全く同じモノは全く同じ色・大きさで写る環境)での画像撮影が望ましいのだが、これを達成するのはナカナカ簡単ではない。光源の変化(特に光の反射)はもちろん、カメラの機種やレンズが変わっただけでも、適切なパラメータが変化するなどして結果が変わってしまうからだ。
特に今日頭を抱えたのはカメラの色ムラ。ちょうど↓と同じ悩み。

これって人間がパッと見ただけではとても気づかなくて、画素値を調べてやっと差に気づく程度。しかもウチらのケースでは「ここは青が強くてこっちは弱い」みたいに複雑な乱れ具合だったもんだからだいぶ頭を抱えた。またこれに似てるやつで、光のムラ(これは「光源の当たり具合」と「カメラの局所的な感度差」の両方の意味で)も厄介だった。こういうのって一般的なホワイトバランス調整みたいな画像全体がけなやり方では対処できないのである。
んで今日は、その解決のために『画像の局所的な色補正処理』を書きました。ホワイトバランスを自動調整した後に、システムに黒色と白色を教えてあげて、それをもとにカメラの撮像結果を自動補正します。一種の画質の正規化みたいな感じですね。実際には静止画ではなく動画なのですが、PCでのリアルタイム処理も全然イケます。
補正は画像の局所部分ごとに行われるので、色ムラや光ムラはかなり軽減され画質も見違えるほどよくなりましたし、ブライトネスとかガンマ補正をいじっていた今までに比べてパラメータ設定も非常に楽になりました。エンジンON!した途端に黒がグッと濃くなるのが素敵♪。研究員さんや友人からとても感謝・感動されたことは言うまでもありません ( ^▽^)/
なんだか今日は仕事したなー♪という感じです。明日は遊びます!w

*1:研究室内に多々転がっているので使わなモッタイナイなーと思いまして。

*2:すいません。だいぶ誇大表現ですw。