直方圖均衡化

直方圖均衡化是圖像處理領域中利用圖像直方圖對對比度進行調整的方法。

<image>

## 縱覽

這種方法通常用來增加許多圖像的全局對比度，尤其是當圖像的有用數據的對比度相當接近的時候。通過這種方法，亮度可以更好地在直方圖上分布。這樣就可以用於增強局部的對比度而不影響整體的對比度，直方圖均衡化通過有效地擴展常用的亮度來實現這種功能。

這種方法對於背景和前景都太亮或者太暗的圖像非常有用，這種方法尤其是可以帶來X光圖像中更好的骨骼結構顯示以及曝光過度或者曝光不足照片中更好的細節。這種方法的一個主要優勢是它是一個相當直觀的技術並且是可逆操作，如果已知均衡化函數，那麼就可以恢復原始的直方圖，並且計算量也不大。這種方法的一個缺點是它對處理的數據不加選擇，它可能會增加背景噪聲的對比度並且降低有用信號的對比度。

## 實現

考慮一個離散的灰度圖像 {x}，讓 ni 表示灰度 i 出現的次數，這樣圖像中灰度為 i 的像素的出現機率是

$$\ p_x(i) = p(x=i) = \frac{n_i}{n},\quad 0 \le i < L$$

L 是圖像中所有的灰度數（通常為256），$n$ 是圖像中所有的像素數，$p_x(i)$ 實際上是像素值為 i 的圖像的直方圖，歸一化到 0,1。

把對應於 px 的累積分布函數，定義為：

$\ cdf_x(i) = \sum_{j=0}^i p_x(j)$,

是圖像的累計歸一化直方圖。

我們創建一個形式為 y = T(x) 的變換，對於原始圖像中的每個值它就產生一個 $y$，這樣 $y$ 的累計機率函數就可以在所有值範圍內進行線性化，轉換公式定義為：

$$\ cdf_y(i) = iK$$

對於常數 K。CDF的性質允許我們做這樣的變換（參見逆分布函數）；定義為：

$$\ cdf_y(y^\prime) = cdf_y(T(k)) = cdf_x(k)$$

其中 k 屬於區間 0,L)。注意 T 將不同的等級映射到 ${0..1}$ 域，為了將這些值映射回它們最初的域，需要在結果上應用下面的簡單變換：

$$\ y^\prime = y \cdot(\max\{x\} - \min\{x\}) + \min\{x\}$$

上面描述了灰度圖像上使用直方圖均衡化的方法，但是通過將這種方法分別用於圖像RGB顏色值的紅色、綠色和藍色分量，從而也可以對彩色圖像進行處理。

## 彩色圖像直方圖均衡化

實際上，對彩色分量rgb分別做均衡化，會產生奇異的點，圖像不和諧。一般採用的是用HSL和HSV色彩空間進行亮度的均衡即可。

## 例子

下面的這個例子是一個8位的8×8灰度圖像：

$$\begin{bmatrix} <pre> 52 & 55 & 61 & 66 & 70 & 61 & 64 & 73 \\ 63 & 59 & 55 & 90 & 109 & 85 & 69 & 72 \\ 62 & 59 & 68 & 113 & 144 & 104 & 66 & 73 \\ 63 & 58 & 71 & 122 & 154 & 106 & 70 & 69 \\ 67 & 61 & 68 & 104 & 126 & 88 & 68 & 70 \\ 79 & 65 & 60 & 70 & 77 & 68 & 58 & 75 \\ 85 & 71 & 64 & 59 & 55 & 61 & 65 & 83 \\ 87 & 79 & 69 & 68 & 65 & 76 & 78 & 94 </pre> \end{bmatrix}$$

該灰度圖像的灰度值出現次數如下表所示，為了簡化表格，出現次數為0的值已經被省略

灰度值｜出現次數｜灰度值｜出現次數｜灰度值｜出現次數｜灰度值｜出現次數｜灰度值｜出現次數

52｜1｜64｜2｜72｜1｜85｜2｜113｜1

55｜3｜65｜3｜73｜2｜87｜1｜122｜1

58｜2｜66｜2｜75｜1｜88｜1｜126｜1

59｜3｜67｜1｜76｜1｜90｜1｜144｜1

60｜1｜68｜5｜77｜1｜94｜1｜154｜1

61｜4｜69｜3｜78｜1｜104｜2

62｜1｜70｜4｜79｜2｜106｜1

63｜2｜71｜2｜83｜1｜109｜1

累積分布函數（cdf）如下所示，與上一表格類似，為了簡化，累積分布函數值為0的灰度值已經被省略

灰度值｜cdf｜灰度值｜cdf｜灰度值｜cdf｜灰度值｜cdf｜灰度值｜cdf

52｜1｜64｜19｜72｜40｜85｜51｜113｜60

55｜4｜65｜22｜73｜42｜87｜52｜122｜61

58｜6｜66｜24｜75｜43｜88｜53｜126｜62

59｜9｜67｜25｜76｜44｜90｜54｜144｜63

60｜10｜68｜30｜77｜45｜94｜55｜154｜64

61｜14｜69｜33｜78｜46｜104｜57

62｜15｜70｜37｜79｜48｜106｜58

63｜17｜71｜39｜83｜49｜109｜59

如表格所示，灰度值最小值為52，最大值為154. 通常，直方圖均衡化算式如下:

$$h(v) = <pre> \mathrm{round} \left( \frac {cdf(v) - cdf_{min}} {cdf_{max} - cdf_{min}} \times (L - 1) \right) </pre>$$

累積分布函數最小值cdfmin在本例中為1，最大值cdfmax在本例中為64，而L則是灰度級數（如本例中，圖像為8位深度，則灰度級數共有2^8=256級數,這也是最常見的灰度級數）.則對於本例的直方圖均衡化算式為:

$$h(v) = <pre> \mathrm{round} \left( \frac {cdf(v) - 1} {63} \times 255 \right) </pre>$$

例如，灰度為78的像素的累積分布函數為46，均衡化後，灰度值變化為：

$$h(78) = <pre> \mathrm{round} \left( \frac {46 - 1} {63} \times 255 \right) </pre> = <pre> \mathrm{round} \left( 0.714286 \times 255 \right) </pre> = 182$$

直方圖均衡化後，圖像的灰度值變化如下表所示：

$$\begin{bmatrix} <pre> 0 & 12 & 53 & 93 & 146 & 53 & 73 & 166 \\ 65 & 32 & 12 & 215 & 235 & 202 & 130 & 158 \\ 57 & 32 & 117 & 239 & 251 & 227 & 93 & 166 \\ 65 & 20 & 154 & 243 & 255 & 231 & 146 & 130 \\ 97 & 53 & 117 & 227 & 247 & 210 & 117 & 146 \\ 190 & 85 & 36 & 146 & 178 & 117 & 20 & 170 \\ 202 & 154 & 73 & 32 & 12 & 53 & 85 & 194 \\ 206 & 190 & 130 & 117 & 85 & 174 & 182 & 219 </pre> \end{bmatrix}$$

注意：原最小灰度值52變為了0，而最大灰度值154變為了255

<image>

｜

<image>

原始圖像｜均衡化後圖像

### 全尺寸圖像

<image>

｜

<image>

<image>

｜

<image>

## 參考文獻

- Acharya and Ray, Image Processing: Principles and Applications, Wiley-Interscience 2005 ISBN 0471719986
- Russ, The Image Processing Handbook: Fourth Edition, CRC 2002 ISBN 0849325323

## 外部連結

- "Histogram Equalization" at Generation5
- Free histogram equalization plugin for Adobe Photoshop and PSP (broken link)
- Page by Ruye Wang with good explanation and pseudo-code