惠為君
(鹽城工學院,江蘇鹽城 224051)
圖像增強是指對圖像進行灰度變換,使圖像與視覺響應相匹配,加強圖像的視覺效果的一種圖像處理方法。灰度變換的方法很多,其中的一種是點運算,指用一個單調遞增的函數對原圖像的灰度進行非線性運算,從而實現對比度增強[1-3]。
如圖1 所示,x 表示變換源圖像的灰度值,y 表示目標圖像的灰度值。變換函數y=T(x)需要滿足以下兩個要求:

圖1 變換函數
1) 0 ≤x ≤255,0 ≤y ≤255,x 和y 的取值范圍相同。這一條保證變換以后,像素值不能超過范圍。
2)T(x)在區間[0 255]上嚴格單調遞增。這一條保證源像素值和目標像素值大小一一對應。不允許出現灰度倒置甚至于灰度翻轉,否則影響視覺效果。
不是所有的單調遞增函數都可用于灰度變換。常用的變換函數有兩種形式,函數Ⅰ和函數Ⅱ。對于函數Ⅰ,源圖像像素范圍[0 128]變換到[0 N2],對于函數Ⅱ,則變換到[0 N1]。可以看出,N2>128,N1<128,函數Ⅰ拉伸了低灰度級,壓縮了高灰度級,函數Ⅱ則相反。可知,曲線斜率大于1的時候,灰度拉伸,小于1的時候,灰度壓縮。
一幅數字圖像中,不同灰度值的像素的數目是不同的。由于光照等的影響,像素值的分布不同,如果光照較強,高灰度級像素較多,如果光照弱,低灰度級像素較多[4]。
設置的變換函數需要把灰度值相對集中的灰度范圍拉伸,灰度值分布較少的灰度范圍壓縮,使得總體上灰度的分布更均勻。
在需要拉伸的灰度區域,設置的變換函數斜率大于1,在需要壓縮的灰度區域變換函數斜率小于1。因此,灰度值越集中,對應的變換函數的斜率越大,反之越小,灰度變換函數的斜率與灰度分布有關。
直方圖均衡指的是利用圖像的直方圖,構建符合以上要求的變換函數,實現圖像增強[5]。
為了方便討論,假設圖像的灰度值連續分布,其取值范圍[0,L-1]。灰度值分布具有隨機性,用概率密度為f(x)表示,其含義表示灰度值x 附近單位區間的像素數目占總數的百分比。
T(x)單調遞增,x,y 的灰度值變化范圍都取[0,L-1],符合變換函數的要求。灰度值y 對應的概率密度為g(y)。對于任意x,必然存在y,使得公式(2)成立。
式(2)兩邊對x求導:g(y)dy/dx=f(x)
式(1)對x求導:dy/dx=(L -1)f(x)
得到g(y)=1/(L -1)
變換以后,概率密度函數g(y)為常數,灰度值分布為均勻分布。變換之前,x 的分布局限在一個較小的范圍,反映在視覺效果上,圖像不清晰,變換以后灰度值分布是均勻的,圖像對比度增強,在視覺效果上圖像更清晰。
對于數字圖像,j表示灰度級,xj表示灰度級j對應的灰度值,nxj表示灰度值為xj的像素數目。灰度值xj的范圍為[0,L-1],N 表示像素的總數目。和模擬圖像對應的數字圖像變換函數定義如表1所示。最終得到變換函數:

表1 數字圖像灰度變換函數
由于變換函數與直方圖有關,變換結果為均勻分布,因此稱這種圖像增強方法為直方圖均衡。yi為目標圖像的灰度值,xi為源圖像的灰度值,i為對應的灰度級。
直方圖均衡算法實現步驟如下:
1)獲取圖像灰度級分布i。
2)統計灰度級i對應的像素數目ni。
3)計算灰度直方圖的歸一化概率表達式:p(si)=ni/N,N為像素總的數目。
4)計算累積灰度直方圖。
5)進行取整擴展,計算映射后輸出圖像各灰度級對應灰度值的歸一化表達形式tk。
6)確定映射關系sk→tk。
7)統計映射后各灰度級的像素數目nk。
8)得到新的灰度統計直方圖的歸一化概率表達形式:pt(tk)=nk/N,N 為輸出圖像的像素數目,即原始圖像的像素數目。
基于Python 和OpenCV 實現以上直方圖均衡算法[6-7]。其步驟如下:
1) 調用cv2.imread()函數,讀取JPEG 數字圖像[2],通過參數設置,直接保存為n灰度圖像數據。對各個灰度級進行累計計算,并歸一化。
2)累積直方圖函數pix_gray(img_gray),累積直方圖函數乘以(L-1)得到轉換函數。
3)利用轉換函數實現源圖像的直方圖均衡,得到目標圖像。
4)保存目標圖像。
在讀取圖像之后,實現直方圖灰度級統計的函數如下:
其中,N=h×w,表示總的像素數目,lut 存放變換的結果。
測試了三種256 色灰度圖像,這三種圖像的灰度值分布都比較集中,一種灰度值較小的像素較多,如圖2 所示,一種灰度值居中的像素較多,如圖3 所示,一種灰度值較大的像素較多,如圖4所示。

圖2 灰度值偏小圖像及處理結果

圖3 灰度值居中圖像及處理結果

圖4 灰度值偏大圖像及處理結果
由圖2 直方圖可知,圖像像素值主要分布在0~100 之間,源圖像偏暗。轉換函數分為兩個部分,0~100之間部分斜率較大,對0~100級之間的灰度有很好的拉伸效果。由于拉伸以后,圖像灰度均勻分布,目標圖像清晰很多。
由圖3 直方圖可知,圖像像素值主要分布在100~200 之間,源圖像灰蒙蒙的。轉換函數在100~200之間部分斜率較大,對100~200級之間的灰度有很好的拉伸效果。由于拉伸以后,汽車和地磚清晰很多。
由圖4 直方圖可知,圖像像素值主要分布在100~255之間,源圖像偏亮。轉換函數在100~200之間部分斜率較大,對100~255級之間的灰度有很好的拉伸效果。由于拉伸以后,陽光下的植物清晰很多。
由于光照等環境的影響,圖像的灰度值分布可能比較集中,這就導致圖像對比度較小、不清晰。利用直方圖累積函數作為變換函數可以對源圖像進行點運算,對源圖像的灰度范圍進行拉伸或壓縮,目標圖像的灰度值將是均勻分布,這樣圖像的對比度將增強,清晰度將提高。直方圖均衡將灰度值集中的灰度值拉伸,并不代表灰度值一定增多。