惠為君
(鹽城工學(xué)院,江蘇鹽城 224051)
圖像增強(qiáng)是指對(duì)圖像進(jìn)行灰度變換,使圖像與視覺響應(yīng)相匹配,加強(qiáng)圖像的視覺效果的一種圖像處理方法。灰度變換的方法很多,其中的一種是點(diǎn)運(yùn)算,指用一個(gè)單調(diào)遞增的函數(shù)對(duì)原圖像的灰度進(jìn)行非線性運(yùn)算,從而實(shí)現(xiàn)對(duì)比度增強(qiáng)[1-3]。
如圖1 所示,x 表示變換源圖像的灰度值,y 表示目標(biāo)圖像的灰度值。變換函數(shù)y=T(x)需要滿足以下兩個(gè)要求:
圖1 變換函數(shù)
1) 0 ≤x ≤255,0 ≤y ≤255,x 和y 的取值范圍相同。這一條保證變換以后,像素值不能超過范圍。
2)T(x)在區(qū)間[0 255]上嚴(yán)格單調(diào)遞增。這一條保證源像素值和目標(biāo)像素值大小一一對(duì)應(yīng)。不允許出現(xiàn)灰度倒置甚至于灰度翻轉(zhuǎn),否則影響視覺效果。
不是所有的單調(diào)遞增函數(shù)都可用于灰度變換。常用的變換函數(shù)有兩種形式,函數(shù)Ⅰ和函數(shù)Ⅱ。對(duì)于函數(shù)Ⅰ,源圖像像素范圍[0 128]變換到[0 N2],對(duì)于函數(shù)Ⅱ,則變換到[0 N1]??梢钥闯?,N2>128,N1<128,函數(shù)Ⅰ拉伸了低灰度級(jí),壓縮了高灰度級(jí),函數(shù)Ⅱ則相反??芍€斜率大于1的時(shí)候,灰度拉伸,小于1的時(shí)候,灰度壓縮。
一幅數(shù)字圖像中,不同灰度值的像素的數(shù)目是不同的。由于光照等的影響,像素值的分布不同,如果光照較強(qiáng),高灰度級(jí)像素較多,如果光照弱,低灰度級(jí)像素較多[4]。
設(shè)置的變換函數(shù)需要把灰度值相對(duì)集中的灰度范圍拉伸,灰度值分布較少的灰度范圍壓縮,使得總體上灰度的分布更均勻。
在需要拉伸的灰度區(qū)域,設(shè)置的變換函數(shù)斜率大于1,在需要壓縮的灰度區(qū)域變換函數(shù)斜率小于1。因此,灰度值越集中,對(duì)應(yīng)的變換函數(shù)的斜率越大,反之越小,灰度變換函數(shù)的斜率與灰度分布有關(guān)。
直方圖均衡指的是利用圖像的直方圖,構(gòu)建符合以上要求的變換函數(shù),實(shí)現(xiàn)圖像增強(qiáng)[5]。
為了方便討論,假設(shè)圖像的灰度值連續(xù)分布,其取值范圍[0,L-1]?;叶戎捣植季哂须S機(jī)性,用概率密度為f(x)表示,其含義表示灰度值x 附近單位區(qū)間的像素?cái)?shù)目占總數(shù)的百分比。
T(x)單調(diào)遞增,x,y 的灰度值變化范圍都取[0,L-1],符合變換函數(shù)的要求?;叶戎祔 對(duì)應(yīng)的概率密度為g(y)。對(duì)于任意x,必然存在y,使得公式(2)成立。
式(2)兩邊對(duì)x求導(dǎo):g(y)dy/dx=f(x)
式(1)對(duì)x求導(dǎo):dy/dx=(L -1)f(x)
得到g(y)=1/(L -1)
變換以后,概率密度函數(shù)g(y)為常數(shù),灰度值分布為均勻分布。變換之前,x 的分布局限在一個(gè)較小的范圍,反映在視覺效果上,圖像不清晰,變換以后灰度值分布是均勻的,圖像對(duì)比度增強(qiáng),在視覺效果上圖像更清晰。
對(duì)于數(shù)字圖像,j表示灰度級(jí),xj表示灰度級(jí)j對(duì)應(yīng)的灰度值,nxj表示灰度值為xj的像素?cái)?shù)目?;叶戎祒j的范圍為[0,L-1],N 表示像素的總數(shù)目。和模擬圖像對(duì)應(yīng)的數(shù)字圖像變換函數(shù)定義如表1所示。最終得到變換函數(shù):
表1 數(shù)字圖像灰度變換函數(shù)
由于變換函數(shù)與直方圖有關(guān),變換結(jié)果為均勻分布,因此稱這種圖像增強(qiáng)方法為直方圖均衡。yi為目標(biāo)圖像的灰度值,xi為源圖像的灰度值,i為對(duì)應(yīng)的灰度級(jí)。
直方圖均衡算法實(shí)現(xiàn)步驟如下:
1)獲取圖像灰度級(jí)分布i。
2)統(tǒng)計(jì)灰度級(jí)i對(duì)應(yīng)的像素?cái)?shù)目ni。
3)計(jì)算灰度直方圖的歸一化概率表達(dá)式:p(si)=ni/N,N為像素總的數(shù)目。
4)計(jì)算累積灰度直方圖。
5)進(jìn)行取整擴(kuò)展,計(jì)算映射后輸出圖像各灰度級(jí)對(duì)應(yīng)灰度值的歸一化表達(dá)形式tk。
6)確定映射關(guān)系sk→tk。
7)統(tǒng)計(jì)映射后各灰度級(jí)的像素?cái)?shù)目nk。
8)得到新的灰度統(tǒng)計(jì)直方圖的歸一化概率表達(dá)形式:pt(tk)=nk/N,N 為輸出圖像的像素?cái)?shù)目,即原始圖像的像素?cái)?shù)目。
基于Python 和OpenCV 實(shí)現(xiàn)以上直方圖均衡算法[6-7]。其步驟如下:
1) 調(diào)用cv2.imread()函數(shù),讀取JPEG 數(shù)字圖像[2],通過參數(shù)設(shè)置,直接保存為n灰度圖像數(shù)據(jù)。對(duì)各個(gè)灰度級(jí)進(jìn)行累計(jì)計(jì)算,并歸一化。
2)累積直方圖函數(shù)pix_gray(img_gray),累積直方圖函數(shù)乘以(L-1)得到轉(zhuǎn)換函數(shù)。
3)利用轉(zhuǎn)換函數(shù)實(shí)現(xiàn)源圖像的直方圖均衡,得到目標(biāo)圖像。
4)保存目標(biāo)圖像。
在讀取圖像之后,實(shí)現(xiàn)直方圖灰度級(jí)統(tǒng)計(jì)的函數(shù)如下:
其中,N=h×w,表示總的像素?cái)?shù)目,lut 存放變換的結(jié)果。
測(cè)試了三種256 色灰度圖像,這三種圖像的灰度值分布都比較集中,一種灰度值較小的像素較多,如圖2 所示,一種灰度值居中的像素較多,如圖3 所示,一種灰度值較大的像素較多,如圖4所示。
圖2 灰度值偏小圖像及處理結(jié)果
圖3 灰度值居中圖像及處理結(jié)果
圖4 灰度值偏大圖像及處理結(jié)果
由圖2 直方圖可知,圖像像素值主要分布在0~100 之間,源圖像偏暗。轉(zhuǎn)換函數(shù)分為兩個(gè)部分,0~100之間部分斜率較大,對(duì)0~100級(jí)之間的灰度有很好的拉伸效果。由于拉伸以后,圖像灰度均勻分布,目標(biāo)圖像清晰很多。
由圖3 直方圖可知,圖像像素值主要分布在100~200 之間,源圖像灰蒙蒙的。轉(zhuǎn)換函數(shù)在100~200之間部分斜率較大,對(duì)100~200級(jí)之間的灰度有很好的拉伸效果。由于拉伸以后,汽車和地磚清晰很多。
由圖4 直方圖可知,圖像像素值主要分布在100~255之間,源圖像偏亮。轉(zhuǎn)換函數(shù)在100~200之間部分斜率較大,對(duì)100~255級(jí)之間的灰度有很好的拉伸效果。由于拉伸以后,陽(yáng)光下的植物清晰很多。
由于光照等環(huán)境的影響,圖像的灰度值分布可能比較集中,這就導(dǎo)致圖像對(duì)比度較小、不清晰。利用直方圖累積函數(shù)作為變換函數(shù)可以對(duì)源圖像進(jìn)行點(diǎn)運(yùn)算,對(duì)源圖像的灰度范圍進(jìn)行拉伸或壓縮,目標(biāo)圖像的灰度值將是均勻分布,這樣圖像的對(duì)比度將增強(qiáng),清晰度將提高。直方圖均衡將灰度值集中的灰度值拉伸,并不代表灰度值一定增多。