直方圖均衡化(色調均化)(一)

繼續討論Photoshop(PS)“圖像(Image)>調整(Adjust)”菜單的功能。閱讀本文之前需要先了解一下《直方圖》。

http://dbis.nankai.edu.cn/multimedia/color/f9784916187e374a20a4e984.html

色調均化(Equalize)

關鍵詞:直方圖修正;直方圖均衡化;直方圖均勻化;灰度直方圖均衡化

Photoshop菜單:圖像>調整>色調均化

公式:

(公式中Sk表示均衡化後的灰度值,∑表示總和,nj是原圖中某個灰度色階j的像素數量,j的範圍是0~k,N是圖像像素總數。)

“色調均化”命令重新分佈圖像中像素的亮度值,以便它們更均勻地呈現所有範圍的亮度級。使用此命令時,Photoshop嘗試對圖像進行直方圖均衡化(Histogram Equalization),即在整個灰度範圍中均勻分佈每個色階的灰度值。

當掃描的圖像顯得比原稿暗,而您想平衡這些值以產生較亮的圖像時,可以使用“色調均化”命令。配合使用“色調均化”命令和“直方圖”命令,可以看到亮度的前後比較。

使用“色調均化”命令:

1. 選擇菜單圖像>調整>色調均化。

2. 如果已選擇一個圖像區域,在彈出的對話框中選擇要均化的內容,然後點按“好”。

  • “僅色調均化所選區域”只均勻地分佈選區的像素。          
  • “基於所選區域色調均化整個圖像”基於選區中的像素均勻分佈所有圖像的像素。         

原理

直方圖均衡化是一種灰度變換算法,所以我們重點研究灰度圖像的直方圖均衡化。

絕對的均勻

圖A是一個黑白灰均勻漸變,0~255的每一個色階的灰度數量都是相同的。圖B的是圖A的像素打亂了順序隨機分佈的,每種灰度的數量都與圖A的相同,因而它的直方圖也與圖A的相同。

圖A和圖B的直方圖。每種灰度數量是相同的,直方圖呈一個黑色矩形。

近似的均勻

對於一般的圖像,由於每種灰度的像素數量並不相同,我們沒辦法把每種灰度的分量調得像圖A、B那麼均勻,但是可以做到近似的均勻。也就是說,把直方圖橫向平均分成幾份之後,使每一份的像素數量大致相等。

下面是一幅圖片的直方圖,共有19200個像素,從左到右平均分成三份。均衡化之後,每份的像素數量都在6400左右。

手工調整方法

我們拍攝或掃描的照片往往會由於光線太強或太弱,使圖像對比度減弱,細節分辨不清。這樣的圖像直方圖灰度往往都集中在某一色階範圍之內,我們需要將這些灰度拉伸到整個灰度級上,並使它們在直方圖中均勻的分佈,以達到增強圖像的目的。

現在我們要通過Photoshop的曲線調整(圖像>調整>曲線)來把一幅圖片的灰度分佈調整均勻。

上圖的直方圖圖形可以近似地看成三個高峯兩個低谷。先把曲線的起點和終點(黑白場)拉到與圖形等寬,再通過曲線把兩個低谷拉高一些,這時灰度分佈就顯得比較均勻了。

調整之後的圖像和直方圖。

直方圖均衡化就是要通過某種算法來實現上面手工調整的效果。

算法

經典算法

下面以一幅3*2像素的簡單圖片(圖C)爲例,來說明灰度直方圖均衡化的算法。

 (圖C)

圖C的直方圖:

注意看百分位(Percentile)這一項。一般軟件的百分位是 當前色階的像素數量÷總像素數量,而Photoshop不同,Photoshop顯示的是 當前色階與前面色階的所有像素數量÷總像素數量。因此圖C色階爲100時的百分位就是(3+2)/6=5/6=83.33%,這個百分位其實就是我們要求的灰度值(範圍0~1),把它轉換成0~255的範圍,要再乘255。

求出每個色階的百分位之後,再乘255,就可以求出與其對應的灰度值來。

色階 數量 出現頻率 百分位 255*百分位
50 3 3/6 3/6=50% 255*50%=128
100 2 2/6 (3+2)/6=83.33% 255*83.33%=212
200 1 1/6 (3+2+1)/6=100% 255*100%=255

根據每個色階的 色階->255*百分位 的對應關係組成一個灰度映射表,然後根據映射表來修改原來圖片每個像素的灰度值。對於圖C,用128替換50,用212替換100,用255替換200。這樣,灰度直方圖的均衡化就完成了。

Photoshop的算法

經過經典算法均衡化的圖片,最亮的像素值總是255,因爲最後一級色階(255)的百分位一定是100%。而最暗的是由色階0的數量決定的,像素值不一定是0。

Photoshop通過對比度拉伸的方法使最暗的像素值變爲0,其它像素也相應變暗,最亮的像素保持255不變。對比度拉伸後的效果可能會比經典算法稍顯偏暗。

對比度拉伸的算法,類似於使用色階調整命令把黑場設成Min時的效果,Min是指像素數量不爲0的第一個色階。

對比度拉伸的公式:C = (Level - Min) * Scale = (Level - Min) * 255 / (255-Min)

圖C均衡化之後的灰度值分別是128、212、255,爲了精確,我們使用保留2位小數的形式(127.50、212.42、255.00)來進行對比度拉伸的計算。

Min = 127.50 '均衡化之後的最小值
Scale = 255/(255-Min) = 2

(127.50-Min)*Scale = 0*2 = 0
(212.42-Min)*Scale = 84.92*2 = 170
(255.00-Min)*Scale = 127.5*2 = 255

'新的映射表:
50  -> 0
100 -> 170
200 -> 255

經典算法和Photoshop算法的直方圖比較。

彩色算法

彩色的直方圖均衡化其實就是對圖像某個或多個顏色通道進行灰度直方圖均衡化運算,常見的有以下幾種方法:

  1. 統計所有RGB顏色通道的直方圖的數據並做均衡化運算,然後根據均衡化所得的映射表分別替換R、G、B通道顏色值。

  2. 分別統計R、G、B顏色通道的直方圖的數據並做均衡化運算,然後根據R、G、B的映射表分別替換R、G、B通道顏色值。

  3. 用亮度公式或求RGB的平均值的方式計算亮度通道,然後統計亮度通道的直方圖的數據並做均衡化運算,然後根據映射表分別替換R、G、B通道顏色值。

Photoshop用的是第一種方法。

總結

直方圖均衡化是灰度變換的一個重要應用,它高效且易於實現,廣泛應用於圖像增強處理中。圖像的像素灰度變化是隨機的,直方圖的圖形高低不齊,直方圖均衡化就是用一定的算法使直方圖大致平和。

均衡化處理後的圖象只能是近似均勻分佈。均衡化圖象的動態範圍擴大了,但其本質是擴大了量化間隔,而量化級別反而減少了,因此,原來灰度不同的象素經處理後可能變的相同,形成了一片的相同灰度的區域,各區域之間有明顯的邊界,從而出現了僞輪廓。

如果原始圖像對比度本來就很高,如果再均衡化則灰度調和,對比度降低。在泛白緩和的圖像中,均衡化會合並一些象素灰度,從而增大對比度。均衡化後的圖片如果再對其均衡化,則圖像不會有任何變化。

灰度直方圖均衡化的算法,簡單地說,就是把直方圖的每個灰度級進行歸一化處理,求每種灰度的累積分佈,得到一個映射的灰度映射表,然後根據相應的灰度值來修正原圖中的每個像素。

經典的直方圖均衡化算法可能存在以下一些不足:

  1. 輸出圖像的實際灰度變化範圍很難達到圖像格式所允許的最大灰度變化範圍。          
  2. 輸出圖像的灰度分佈直方圖雖然接近均勻分佈, 但其值與理想值1/n仍有可能存在較大的差異, 並非是最佳值。          
  3. 輸出圖像的灰度級有可能被過多地合併。由於灰度的吞噬也易造成圖像信息的丟失。         

爲此人們提出了許多改進的直方圖均衡算法,詳細內容請參閱本文末尾提供的參考資料。

公式

要寫論文的同學可能需要用數學的方式來描述,下面我把前面講的內容概括成公式,以供參考。

概率密度函數(PDF)

爲了計算方便,我們需要將直方圖歸一化,即把灰度範圍由0~255變爲0~1。歸一化後的直方圖其實就是一個概率密度函數(PDF,probability density function),均衡化就是令概率密度爲1。

我們用Pr(r)來表示原圖像的PDF,用Ps(s)表示均衡化之後的PDF,r、s分別代表均衡化前後的灰度值,r,s∈[0,1]。根據概率論的知識,可得出:

公式中T-1(s)代表T(r)的逆變換函數。

因爲我們要求的概率密度爲1,即:

因此:

由此得出:ds = Pr(r) * dr

等式兩邊對r積分,即可得出PDF的均衡化公式:

公式中T(r)代表r的灰度變換函數,∫表示積分,w爲假設變量。

累積分佈函數(CDF)

對於圖像而言,我們需要使用離散形式的公式(Discrete Formulation)。

某個灰度級像素出現的概率爲:Pr(rk) = nk / N

Pr(rk)是原圖像第k個灰度級像素出現的概率,rk是第k個灰度級,即當前色階k,k∈[0,1]。nk是rk像素數量。N是圖像像素總數(圖像大小),N=∑knk

圖像的灰度直方圖均衡化公式:

公式中,T(rk)來表示原圖像的第k個灰度級的轉換函數。∑表示總和。∑nj/N表示0~j個灰度級的像素數量總和與像素總數的比值,也就是前面講過的百分位(當前色階與前面色階的所有像素數量÷總像素數量)。∑Pr(rk)表示第0~k的灰度級出現概率累積相加。因爲s是歸一化的數值(s∈[0,1]),要轉換爲0~255的顏色值,需要再乘上255,即S=∑Pr(rk)*255。

這個轉換公式也被稱爲圖像的累積分佈函數(CDF,cumulative distribution function)。

相關資料

使用“色調均化”命令 (Photoshop) http://www.8esky.com/handbook/photoshop7/Help/1_8_17_3.html

Visual C++實現數字圖像增強處理 http://www.yesky.com/20021224/1645640_1.shtml

VB圖像處理之圖像的色彩糾正 http://www.pcbookcn.com/article/2358.htm

結合局部對比度增強的直方圖均衡化圖像增強算法 http://www.ahcit.com/lanmuyd.asp?id=1536

一種用於夜間圖像增強的算法 http://www.wanfangdata.com.cn/qikan/periodical.Articles/qhdxxb/qhdx99/qhdx9909/990922.htm

圖像處理技術 http://www.fjtu.com.cn/fjnu/courseware/0334/course/_source/web/lesson/char6/j2.htm

VC++6.0在灰度數字圖像增強處理中的應用 http://dev.yesky.com/43/2591543.shtml

Histogram Equalization http://fourier.eng.hmc.edu/e161/lectures/contrast_transform/node3.html

Histogram Equalization http://www.clarkson.edu/class/image_process/qa1/Histogram%20Equalization.htm

Image Processing Fundamentals - Histogram-based Operations http://www.ph.tn.tudelft.nl/Courses/FIP/noframes/fip-istogram.html

Point Operations - Histogram Equalization http://homepages.inf.ed.ac.uk/rbf/HIPR2/histeq.htm

發佈了24 篇原創文章 · 獲贊 12 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章