圖像直方圖均衡化和規定化是怎麼做的?


2017年11月9日更新:感謝知友 @羅maochun 指出了原文中的重要錯誤,現已更正。

----------------------------------

為簡化問題,僅討論灰度圖像的直方圖均衡。

設輸入圖像為二元函數 f(x, y) ,輸出圖像為二元函數 g(x, y),顯然二者尺寸相等。我們知道,那些灰度值分布較為平均的圖像,通常對比度較高。比如,下圖中 g 的灰度較分散(有白的有灰的有黑的),所以對比度較高;f 的灰度很集中,所以顯得灰濛濛的。直方圖均衡的目的,就是對 f 進行處理產生 g,使得 g 的灰度值比 f 更分散。

怎麼做呢?如果我們有一個恰當的 灰度映射函數 T 就好了,它能把輸入灰度值 r 映射為輸出灰度值為 s,即 s = T(r) 。假設圖像的灰度值連續,由黑到白取值為1~L中的實數。灰度映射函數 T 可能長這樣:

s = T(r) = egin{cases} 1, r in [1, frac{L}{4}] cr 2r - frac{L}{2}, r in [frac{L}{4}, frac{3L}{4}] cr L, r in [frac{3L}{4} , L] end{cases}

用圖形來表達就是:

對圖像施以該灰度映射,圖示如下:

看起來不錯。不過——

有一句老話叫做「具體問題具體分析」,這告訴我們:決不可能使用某個特定的 T 一勞永逸。那麼,有沒有辦法「自動地」根據實際情況生成 T 呢?答案是肯定的。請接著往下看。

設任意灰度值 t 在 f 中出現的概率為函數 p_f(t) ,在 g 中出現的概率為函數 p_g(t) 。這兩個函數均可以直接由圖像統計出來。然後,我們定義兩個函數

S_f(n) = int_{1}^{n}p_f(t)dt (意義:f 中灰度值小於 n 的概率)

以及

S_g(n) = int_{1}^{n}p_g(t)dt (意義:g 中灰度值小於 n 的概率)

那麼必然有

S_f(r) = S_g[T(r)] Leftrightarrow S_f(r) = S_g(s)   cdots cdots(1)

為什麼呢?這是因為我們必須保證:原本比 r 暗的灰度,在變換後依然比 s 暗;原本比 r 亮的灰度,在變換後依然比 s 亮。如果連這一點都不能保證,那麼輸出的圖像就會黑白顛倒一團糟。

比方說,若 r = 1/3 ,變換後 s = T(r) = 5/2。那麼,f 中灰度值小於1/3的像素數目 == g 中灰度值小於5/2的像素數目,用頻率估算概率,也就是 f 中灰度值小於1/3的概率 == g 中灰度值小於5/2的概率。還不懂?看圖!

弄清楚上面的式子後,自然得到下面的式子(積分後就等於(1) ):

p_f(r) cdot dr = p_g(s) cdot ds   cdotscdots (2)

再接下來,如果我們令變換 T(r) = L cdot S_f(r) ,那麼:

egin{align} s = T(r) \ = L cdot S_f(r)\ = L cdot int_{1}^{r}p_f(t)dt \ Rightarrow frac{ds}{dr} = L cdot p_f(r)   cdots cdots (3) end{align}

其中的第三行,t 是積分變數,真正的自變數是積分上限 r。

由 (2)(3) 得

p_g(s) = 1/L

奇蹟出現了:g 中各灰度出現概率相等,為常數1/L。也就是說,各灰度被完全均攤了!

於是我們知道,無論輸入圖像是什麼,只要統計它之中各灰度值出現的概率 p_f ,然後生成映射函數 T(r) = L cdot S_f(r) = L cdot int_{1}^{r} p_f(t)dt ,剩下的事就是逐個映射圖中灰度即可。

現實中數字圖像的灰度值是離散的,對此我們只需略作修改。假設圖像最多含有 L 種灰度級,由黑到白依次編號為 1, 2, cdots, L 。每個灰度級在 f 中出現的概率依次為p_f(1), p_f(2), cdots, p_f(L) ,在 g 中出現的概率依次為 p_g(1), p_g(2), cdots, p_g(L)

函數定義改為: S_f(n) = sum_{i=1}^{n}{p_f(i)} 以及 S_g(n) = sum_{i=1}^{n}{p_g(i)} ,其餘同理。

可惜的是,在灰度值離散的情況下,r 和 s 均為整數,我們必須對映射結果取整,這導致 g 中各灰度值出現的概率未必相等。但是可以確定的是: g 的灰度級在一定程度上比 f 更分散了

至於直方圖匹配呢,原理相同,只是多一步而已,詳見圖像處理教材,在此不再贅述。

參考資料:

Digital Image Processing (3rd Edition), R.C. Gonzalez and R.E. Woods


均衡化和規定化都是通過全局直方圖調節來改變圖像的對比度,其實就是根據一個表來做映射。均衡化一句話,就是拿圖像本身的累積分布表(cdf)來做映射。規定化就是圖像B拿圖像A的累積分布表(cdf)來做映射。個人理解,歡迎指正。


建議參考 《數字圖像處理》。


數字圖像處理(第三版),電子工業出版社,p72-82


推薦閱讀:

TAG:圖像處理 | 圖像 |