ヒストグラムと階調 — 明るさの分布を読む・操る

画像の明るさを画素ごとに数え上げて棒グラフにしたものがヒストグラム。画像を見なくても「暗い・明るい・眠い(コントラスト不足)」がひと目で分かる、いわば画像の健康診断表です。読み方から、トーンカーブによる補正、自動補正の代表格ヒストグラム均等化まで、すべて動かしながら理解します。

1. ヒストグラム=明るさの人口分布

グレースケール画像の各画素は 0(黒)〜 255(白)の数値です。横軸に輝度、縦軸に「その輝度をもつ画素の数」を取って集計したものがヒストグラム。山が左に寄れば暗い画像、右に寄れば明るい画像、山が狭ければコントラストの低い画像です。

下のデモでボタンを押して画像を切り替え、山の位置と幅がどう動くかを見てください。画像の上(またはヒストグラムの上)をカーソルでなぞると、対応関係がハイライトされます。

画像とヒストグラムの対応 — なぞって確かめる
64×64 の合成風景画像(空・山・地面・太陽)。画像をなぞると、その画素の輝度が属するビン(棒)がオレンジ色になり、同じビンに属する画素が画像側でも光ります。空・山・地面がそれぞれ別の山を作っていることを確かめてみてください。
POINT — ヒストグラムは「場所」を忘れる ヒストグラムは画素の数を数えるだけで、どこにあったかは一切記録しません。画像を左右反転してもバラバラにシャッフルしてもヒストグラムは同じ。だからこそ構図に関係なく「明るさの傾向」だけを取り出せる、というのがミソです。

2. トーンカーブ — 全画素への一括変換

明るさの補正は、入力輝度 r を出力輝度 s に対応づける関数 s = T(r) を全画素に適用するだけで実現できます。この関数のグラフがトーンカーブ。対角線(s = r)なら無変換で、カーブを持ち上げれば明るく、傾きを立てればコントラストが上がります。

s = clip( k · (r − 128) + 128 + b ) b = 明るさ(全体を持ち上げる)、k = コントラスト(中央 128 を支点に傾きを変える)。0〜255 の範囲外はクリップ
s = 255 · (r ⁄ 255)1/γ ガンマ補正。γ > 1 で中間調が明るく、γ < 1 で暗くなる。両端 0 と 255 は動かないのが特徴
トーンカーブ操作 — カーブ・画像・ヒストグラムが連動
水色のカーブが s = T(r)、点線は無変換の対角線。明るさはカーブごと上へ平行移動=ヒストグラムが右へスライド。コントラストはカーブの傾き=ヒストグラムが左右に広がる/縮む。ガンマは中間調だけを曲げます。強くかけすぎると右下に赤い警告(クリップした画素数)が出ます。
注意 — 白飛び・黒つぶれは戻せない カーブが 0 や 255 に張り付いた区間では、異なる輝度がすべて同じ値に潰されます。一度クリップして保存すると元の階調差は消滅し、あとからどんな補正をしても復元できません。ヒストグラムの端に張り付いた高い棒は、その危険信号です。

3. ヒストグラム均等化 — 分布を自動で広げる

低コントラスト画像を人手でカーブ調整する代わりに、画像自身の統計から最適なカーブを自動で作る方法がヒストグラム均等化です。使うのは累積分布関数(CDF)——「輝度 r 以下の画素が全体の何割か」を表す、必ず単調増加する関数です。

よく使われる輝度帯では CDF が急に立ち上がる=出力の幅が広く割り当てられ、ほとんど使われない輝度帯は圧縮されます。結果としてヒストグラムが 0〜255 いっぱいに広がり、コントラストが上がります。

sk = 255 · CDF(rk) = (255 ⁄ MN) · Σj≤k nj nj = 輝度 j の画素数、MN = 総画素数。「自分より暗い画素の割合」がそのまま出力輝度になる
ヒストグラム均等化 — CDF がカーブになる瞬間
進行度: 0%
左=画像、中央=写像のグラフ、右=ヒストグラム(灰色の輪郭が元、緑が現在)。「均等化する」を押すと、オレンジの実効カーブが対角線から水色の CDF 曲線へと変形し、それに連れて狭かった山が全域に広がり、画像が鮮明になります。動き続ける点は「入力→出力」の対応を走査しています。
POINT — CDF がそのまま変換カーブになる 均等化の写像 T は CDF を 255 倍しただけ。CDF は単調増加なので明暗の順序が逆転しない(暗い画素は補正後も相対的に暗いまま)ことが保証されます。「分布を平らにしたい → 累積を直線にすればよい → だから CDF で写像する」という一直線のロジックです。

4. まとめ

一歩先へ — 実務での均等化 画像全体で一括均等化すると、空だけ・影だけといった局所の階調が犠牲になることがあります。実務では画像をタイルに分けて局所的に均等化し、増幅しすぎを抑える CLAHE(コントラスト制限付き適応的均等化)が定番。またカラー画像では RGB を別々に均等化すると色相が狂うため、輝度チャンネルだけに適用するのが鉄則です。