Color Constancy のアルゴリズム (第1回)

本日は画像処理の中でも割と古典的?と思われるColor Constancyのアルゴリズムをいくつか紹介したいと思います。このアルゴリズムはEbnerの「Color Constancy」という本の7章に紹介されているもので、LandのRetinex理論をベースとしたものです。

紹介するアルゴリズムは

  • Hornのアルゴリズム
  • Blakeのアルゴリズム
  • Mooreのアルゴリズム
  • Rahmanのアルゴリズム
  • 準同型フィルタを用いたアルゴリズム
  • Faugerasのアルゴリズム

です。

ちょっと長くなってしまいそうなので2回に分けましょうかね。というわけでレッツスタート。


Hornのアルゴリズム

Hornのアルゴリズムはなだらかに色変化する成分が照明光の成分であろうという仮定に基づいて照明の成分を除去します。具体的にはラプラシアンフィルタを適用した後、閾値処理を行うことで得られた信号の2回微分成分をポアソン方程式を解くことで元の画像に戻すということをしています。まぁ、あまり詳しい解説をしても伝わらないかと思いますので、詳しくは本を見ていただけると助かります。では、結果の画像です。

入力画像01
input01

出力画像01
horn01

入力画像02
input02

出力画像02
horn02


Blakeのアルゴリズム

BlakeのアルゴリズムはHornのアルゴリズムとほぼ同等の仮定を用いていますが、緩やかに変化する照明成分を除去するための閾値処理が異なっています。Hornの手法ではラプラシアンフィルタを適用後に閾値処理をしていたのですが、より閾値処理の分解能を上げる目的でBlakeは1階微分→閾値処理→1階微分というように、2回の偏微分処理の間に閾値処理を挟みました。

出力画像01
blake01

出力画像02
blake02

さっきより結果自体が良くなっているかといわれると少し微妙な感じもしますが、閾値の設定に対して結果のシビアさが減っていると思います。


Mooreのアルゴリズム

MooreのアルゴリズムはRetinex理論をうまく適用するために、局所的には光源色が一定であるという仮定を置きました。これにより、非一様光源の場合にもRetinex理論をうまく適用できるように工夫しました (もちろんRetinex理論それ自体は複数光源下でも成り立つようなものですが) 。

入力画像01
moore01

出力画像02
moore02

下の画像02は少し色合いが変な感じはしますが、どちらもこれまでと比べてかなり良い結果になっているのではないでしょうか?アルゴリズム自体は非常に単純なので、本を参照してもらうか、ソースコードを見てもらえると良いかと思います。


ソースコード

今回紹介したアルゴリズムのソースコードですが、そこそこ量があるので、私のGitHubで公開してあります。Linuxユーザの人はOpenCVがインストールしてあれば付属のMakefileでコンパイルできると思います。Windowsのとかの人は申し訳ないですが、適切にヘッダをインクルードしてもらえればたぶん動くはずです。

Color Constancy – GitHub by tatsy

第2回はこちらからどうぞ

Color Constancy のアルゴリズム (第2回)