>> Rによる画像処理プログラミング入門:目次

画像の輝度を調整する

画像の輝度を任意の値に合わせる方法を考えます。ある画像の平均輝度が 0.5 だとして、これを 0.3 など別の値になるようにしたい、ということです。

一見すると、上の例の場合だと画像の全ピクセルの画素値を -0.2 すればいいだけのように思えるかもしれませんが、これは上手くいきません。画素値が元から 0.2 より小さなピクセルの画素値は、変換後も 0 で下げ止まりにする必要があります。そのようなピクセルが存在するため、輝度を一律にシフトさせても全てのピクセルの輝度が -0.2 になるわけではないため、平均輝度も -0.2 にはなりません。

ここではガンマ補正を用いた方法を使いましょう。
ガンマ補正とはピクセルの輝度をある指数のべき乗で変換することですが、べき指数の値によって画像全体の輝度も変化します。指数が1より大きければ輝度は低下し、1より小さければ輝度は増加します。

画像を明るくしたい(目標とする輝度が画像の現在の輝度よりも大きい)のなら1より小さい指数で、画像を暗くしたい(目標とする輝度が画像の現在の輝度よりも小さい)のなら1より大きい指数で、画像をべき乗してやれば、画像の輝度は目標とする輝度に近付くことになります。

問題は、指数として具体的にどの値を与えればよいのか、ということです。画像の現在の輝度と目標とする輝度の誤差を最小化するような指数を段階的に求める、という最適化問題としてこれを解けば良いでしょう。


adjustLuminance( img, targetValue ) という関数を作りました。変換したい画像 img と目標とする輝度 targetValue を引数として入力し、出力として変換後の画像を返す関数です。
mean 関数を使って画像の平均輝度を求めていますが、変換後の画像の平均輝度は確かに目標とする値にほぼ等しくなっています。