圖像直方圖均衡化和規定化是怎麼做的?
2017年11月9日更新:感謝知友 @羅maochun 指出了原文中的重要錯誤,現已更正。
----------------------------------
為簡化問題,僅討論灰度圖像的直方圖均衡。
設輸入圖像為二元函數 f(x, y) ,輸出圖像為二元函數 g(x, y),顯然二者尺寸相等。我們知道,那些灰度值分布較為平均的圖像,通常對比度較高。比如,下圖中 g 的灰度較分散(有白的有灰的有黑的),所以對比度較高;f 的灰度很集中,所以顯得灰濛濛的。直方圖均衡的目的,就是對 f 進行處理產生 g,使得 g 的灰度值比 f 更分散。
怎麼做呢?如果我們有一個恰當的 灰度映射函數 T 就好了,它能把輸入灰度值 r 映射為輸出灰度值為 s,即 。假設圖像的灰度值連續,由黑到白取值為1~L中的實數。灰度映射函數 T 可能長這樣:
用圖形來表達就是:
對圖像施以該灰度映射,圖示如下:
看起來不錯。不過——
有一句老話叫做「具體問題具體分析」,這告訴我們:決不可能使用某個特定的 T 一勞永逸。那麼,有沒有辦法「自動地」根據實際情況生成 T 呢?答案是肯定的。請接著往下看。
設任意灰度值 t 在 f 中出現的概率為函數 ,在 g 中出現的概率為函數 。這兩個函數均可以直接由圖像統計出來。然後,我們定義兩個函數
(意義:f 中灰度值小於 n 的概率)
以及
(意義:g 中灰度值小於 n 的概率)
那麼必然有
為什麼呢?這是因為我們必須保證:原本比 r 暗的灰度,在變換後依然比 s 暗;原本比 r 亮的灰度,在變換後依然比 s 亮。如果連這一點都不能保證,那麼輸出的圖像就會黑白顛倒一團糟。
比方說,若 ,變換後 。那麼,f 中灰度值小於1/3的像素數目 == g 中灰度值小於5/2的像素數目,用頻率估算概率,也就是 f 中灰度值小於1/3的概率 == g 中灰度值小於5/2的概率。還不懂?看圖!
弄清楚上面的式子後,自然得到下面的式子(積分後就等於(1) ):
再接下來,如果我們令變換 ,那麼:
其中的第三行,t 是積分變數,真正的自變數是積分上限 r。
由 (2)(3) 得
奇蹟出現了:g 中各灰度出現概率相等,為常數1/L。也就是說,各灰度被完全均攤了!
於是我們知道,無論輸入圖像是什麼,只要統計它之中各灰度值出現的概率 ,然後生成映射函數 ,剩下的事就是逐個映射圖中灰度即可。
現實中數字圖像的灰度值是離散的,對此我們只需略作修改。假設圖像最多含有 L 種灰度級,由黑到白依次編號為 。每個灰度級在 f 中出現的概率依次為 ,在 g 中出現的概率依次為 。
函數定義改為: 以及 ,其餘同理。
可惜的是,在灰度值離散的情況下,r 和 s 均為整數,我們必須對映射結果取整,這導致 g 中各灰度值出現的概率未必相等。但是可以確定的是: g 的灰度級在一定程度上比 f 更分散了。
至於直方圖匹配呢,原理相同,只是多一步而已,詳見圖像處理教材,在此不再贅述。
參考資料:
Digital Image Processing (3rd Edition), R.C. Gonzalez and R.E. Woods
均衡化和規定化都是通過全局直方圖調節來改變圖像的對比度,其實就是根據一個表來做映射。均衡化一句話,就是拿圖像本身的累積分布表(cdf)來做映射。規定化就是圖像B拿圖像A的累積分布表(cdf)來做映射。個人理解,歡迎指正。
建議參考 《數字圖像處理》。
數字圖像處理(第三版),電子工業出版社,p72-82
推薦閱讀: