はじめに
ヒストグラムは画像の明るさの分布を表わすものですが、これを補正すると、より鮮明な画像に変換できます。ヒストグラムの拡張と平坦化の2種類の補正方法を選んで実行できるようにし、カラー画像の改善を図りました。
- 完成版のアプレットを見る
対象読者
画像のヒストグラムに興味を持ち、レタッチソフトなどにあるヒストグラム補正機能の原理を知りたい人。
必要な環境
J2SE 5.0を使っていますが、それより古いバージョンでも大丈夫です。
ヒストグラムとは
ヒストグラム(Histogram)とは分布図のことで、レタッチソフトなどに用いられるヒストグラムは、横軸に左から0~255のレベルを示し、縦軸にはLuminosity(輝度)、RGB(R、G、Bの平均)、R、G、Bを切り替えて表示します。
ヒストグラムが左に偏っていると暗い画像、右の場合は明るすぎる画像で、中心に集中しているとコントラストの低い眠い画像になります。
ヒストグラムの補正
原画像のヒストグラムをとり、これを補正してから、画像を表示すると、コントラストが改善された画像が得られます。ヒストグラムの補正方法には、ヒストグラムの拡張(Histogram SpreadingまたはHistogram Stretching)と、ヒストグラムの平坦化(Histogram Equalization)の2種類があります。ヒストグラムの拡張のみを行ない、これを平坦化と称している場合もあります。
補正の対象とするヒストグラムは、Luminosity(輝度)、またはRGB(R、G、Bの平均)が一般的です。
ヒストグラムの拡張
図1の左に示すような、分布範囲が狭く単峰性のヒストグラムを持った画像を補正するのに適した方法です(例は暗い画像)。原画像のmin
レベルを補正画像の0レベルに、原画像のmax
レベルを補正画像の255レベルになるように、比例的にレベルを拡張すると、図の右のようなヒストグラムができます。全ピクセル数(この場合は面積)は同じですから、拡張すると、ヒストグラムに隙間が生じます(図はイメージを表していますので、実際とはやや異ります)。
本稿で紹介するプログラムでは、濃度レベルは、0から255までの256レベルとし(プログラムではLEVEL=256
で定義)、全体のピクセル数(SIZE=76800
で定義)の0レベルから数えて1%に当るレベルをmin
、99%をmax
、50%レベルをmid
(ヒストグラムの拡張には使用しませんが参考値として)としています。1%から99%は一例で、既存ソフトでは、これを任意に変更できるものもあります。
ヒストグラムの拡張は、min
レベルをレベル0に、max
レベルをレベル255に変換し、中間レベルは比例配分で変換して行ないます。具体的には、原画像の任意のレベルをd
としたとき、補正後のレベルd1
は、下の式で表わされます。
dの範囲 | d1の値 |
これは、図2のトーンカーブでレベル変換するのと同じ意味を持ち、コントラストの向上に役立つことが分かります。暗い原画像の場合には、傾斜部分が左に、明るい場合は右に移動します。
ヒストグラムの平坦化
これは、明部と暗部を共に持つ原画像の補正に適しています。図3の上部に示すように、ヒストグラムが両端に分かれている画像の場合は、min
とmax
の値が0と255に近いので、ヒストグラムの拡張はあまり効果がありません(ここでは、説明のためにmin
とmax
を示していますが、ヒストグラムの平坦化には使用しません)。
原画像の全ピクセル数をSIZE
とすると、0から255までの、すべてのレベルの頻度がSIZE/256
になるように変換するのが、ヒストグラムの理想的な平坦化です。
これを式で表わすと、
となります。ただし、P(i)
は原画像ヒストグラムにおけるレベルi
のピクセル数です。d1
は整数値をとりますので、小さいP(i)
が続くと、異なるd
に対して同一のd1
が割り当てられ、大きいP(i)
が来ると、d1
が不連続になりますので、理想どおりにはなりません。
実際には、原画像ごとに上記の計算を行い、d
とd1
の変換表(Look Up Table)をあらかじめ作成しておき、これでヒストグラムの変換を行ないます。
図3の左下は、理想的な補正をイメージ的に示したものですが、実際には、頻度の大きいレベルを細かい複数のレベルに分割することはしないで、隣のレベルとの間隔を広げて調整しますので、図3の右下に示すようになります。これもイメージ的な図ですが、部分的に平均すると、頻度値がほぼ一定していることが分かります。
カラー画像のヒストグラム補正の問題点
ヒストグラム補正による画像の改善は、グレイスケール画像には非常に効果があります。しかし、カラー画像では色相のズレの問題が発生します。たとえば、カラー画像にグレイの部分があったとします。このピクセルにおいては、R、G、B各成分は同じです。しかし、画像の他の部分に赤色の濃い部分があると、相対的にRは低い値となり、コントラスト増強のためにR成分が抑えられ、シアンがかった色に変わってしまいます。このように、ヒストグラム補正はピクセルごとのR、G、B比率を保存するものではないことに注意してください。
これを防ぐために、画像を色相(Hue)、彩度(Saturation)、輝度(LuminanceまたはLuminosity)で表現し、輝度のみをヒストグラム変換し、色相、彩度はそのままにする手法もあります。