(1.湖南科技學院 計算機與信息科學系, 湖南 永州 425006; 2. 廣東工業大學 信息工程學院 數字圖像研究所, 廣州 510006)
摘 要:
針對夜間照片常會產生紅眼現象,提出一種自動紅眼檢測與消除算法。首先利用AdaBoost算法檢測出人臉,減少紅眼搜索區域;然后根據CIELAB顏色空間的特性提取可能紅眼區域;最后對可能紅眼區域進行約束過濾獲得最終的紅眼位置。對定位后的紅眼像素進行修正,并在邊界處運用平滑濾波,消除紅眼后的人眼更自然。實驗證明該方法能自動地消除紅眼,并對典型紅眼及偏黃紅眼、偏暗紅眼均有很好的魯棒性。
關鍵詞:CIELAB顏色空間; 紅眼定位; 紅眼消除
中圖分類號:TP391.4 文獻標志碼:A
文章編號:1001-3695(2009)02-0763-03
Automatic red-eye detection and correction algorithm
ZHAO Quan-you1,2, PAN Bao-chang2, ZHENG Sheng-lin2, CHEN Xiao-feng2
(1. Dept. of Computer Information Science, Hunan University of Science Engineering, Yongzhou Hunan 425006, China; 2. Institute of Digital Image Technology, Faculty of Information Engineering, Guangdong University of Technology, Guangzhou 510006, China)
Abstract:According to the artifact known as red-eye of photographs taken at night, an automatic red-eye detection and correction method was presented.Firstly used AdaBoost algorithm to detect faces,could reduce the red-eyes’ searching area. Then found the possible red-eye regions by the property of CIELAB color space, obtained ultimate red-eye location to filter the possible red-eye regions by constraints. The human eyes seem more natural after correcting the pixels of the ture red-eye regions and smoothing the pixels on the boundary. Experimental results show
the proposed algorithm can detect and correct the red-eyes automatically,and it is very robust to typical red-eyes and red-eyes which are yellow or dark.
Key words:CIELAB color space; red-eye detection; red-eye correction
紅眼是指用閃光燈拍攝人物照片時,由被拍攝者眼底血管的反光而導致的人眼瞳孔中央形成的紅點現象,它是由閃光燈的光線被眼睛反射回鏡頭形成的。在圖1中,如果β<α,就會產生紅眼。隨著數字照相機機身日益緊湊,閃光燈和鏡頭的距離d不斷減小,紅眼現象也更為嚴重,因此消除紅眼已成為照相機技術改良的一個重要問題。
紅眼和一般人們所認知的眼睛顏色差別很大,降低了照片的質量,因此有必要消除紅眼現象。一種方法是可以采用硬件預防紅眼產生,在拍攝時利用相機的閃光燈預閃一次,使被拍者的瞳孔縮小(即減少圖1中的p值),然后再正式閃光拍照。但是這樣只能減輕紅眼的產生,并不能確保消除紅眼現象,而且要求被拍攝對象在預閃時直視相機。另一種方法是采用圖像編輯類軟件(如Photoshop、Acdsee、Fireworks)手動或半自動地對拍攝后的紅眼照片進行編輯消除紅眼。該方法需要用戶手工圈出紅眼或選取紅眼區域,甚至設定參數,使用不夠簡便。文獻[1~4]中提出了一些自動紅眼消除算法,并取得一定效果,但這些方法多直接基于RGB顏色空間的,對非典型的偏黃或者偏暗紅眼適應性不強。
本文提出一種基于CIELAB顏色空間的自動紅眼消除算法,實驗證明該方法能全自動地消除紅眼,并有很好的魯棒性。
1 人臉檢測
Viola等人[5]提出了AdaBoost方法進行人臉檢測,其優點在于使實時檢測成為可能,且其魯棒性、準確性均能滿足實用要求。它通過對弱分類器的線性組合得到一個強分類器,用強分類器的級連減少誤檢率。對弱分類器的組合在訓練大量樣本的基礎上實現。本文訓練時使用Lienhart等人[6,7]提出的擴展Haar特征,即兩種中心特征、八種線特征和四種邊界特征。
首先,準備大量的正類樣本(人臉樣本)和負類樣本(非人臉樣本) ,標注正類為+1,負類為-1。單層強分類器的訓練如下:
a) 輸入。N個標記過的訓練樣本集{(1,c(1)),…,(N,c(N))} ;訓練樣本的分布P;弱分類器學習算法;循環迭代次數的整數T;初始化權重向量: w1i=P(i),i=1,2,…,N。
b) while(t≤T或強分類器尚不滿足應有正、誤檢率)
(a)令權重歸一化:
pt=wt/∑Ni=1wti
(b)在分布pt條件下調用弱分類器學習算法, 得到一個具有最小錯誤率的弱分類器ht;計算ht的加權錯誤:
εt=∑Ni=1pti|ht(i)-c(i)|;βt=εt/(1-εt)
(c)更新權重:
wt+1i=wtiβ1-|ht(i)-c(i)|t
c) 輸出強分類器為
hfinal(i)=1 ∑Tt=1(ln1/βt)ht(i)≥1/2∑Tt=1(ln1/βt)
0 otherwise
若負類樣本被截止到該層的級連強分類器正確判斷,則舍棄該樣本;反之,進入下一層的訓練,直到所有的強分類器級連后達到訓練要求。利用訓練好的AdaBoost人臉檢測器去進行人臉檢測并定位出人臉區域。
2 紅眼定位
在檢測出的人臉區域定位紅眼,最重要的信息是色彩。帶有紅眼的照片之所以容易區別,就是因為瞳孔處的紅色斑點與平時對人眼色彩的認知差別很大。典型紅眼一般呈現紅色,但有時也會偏黃(綠色分量值較大)或偏暗(色飽和度較小),如圖2所示。但一般而言,紅眼處像素的紅色色調比起其他色彩的色調能量要更大一些。本文利用CIELAB顏色空間a*分量能有效突出紅色色調信息的特點,二值化后初步確定紅眼候選區域;然后利用紅色瞳孔區別于臉部背景的特征進行紅眼確認,得到最終的紅眼區域。
2. 1 CIELAB顏色空間
CIE(Commission Internationale de l’Eclairage)是國際照明協會的簡稱,制定測量顏色的國際標準,對色值進行測定。CIE 1976 LAB顏色空間是比較常用的一種,這種顏色空間是國際照明委員會在1976年推出的,也簡稱為CIELAB。其中:L*代表著明度,從明亮(此時L*=100)到黑暗(此時L*=0)之間變化;a*值表示顏色從綠色(-a*)到紅色(+a*)之間變化,而b*值表示顏色從藍色(-b*)到黃色(+b*)之間變化,如圖3所示。
從RGB空間到CIELAB空間的變換公式如下:
L*=
116×(Y/Yn)1/3-16, Y/Yn>0.008 856
903.3×(Y/Yn), Y/Y≤0.008 856
a*=500×[f(X/Xn)-f(Y/Yn)]
b*=200×[f(Y/Yn)-f(Z/Zn)]
其中:f(t)=t1/3t>0.008 856
7.787t+16/116, t≤0.008 856
在上面的公式中:Xn、Yn和Zn是CIE標準白光的三刺激值;X、Y和Z則是CIEXYZ空間中的坐標值。在2°視場和D65標準白光源下:
Xn=95.05Yn=100.00Zn=108.90 XYZ=0.430 6 0.341 6 0.17830.222 0 0.706 7 0.071 30.020 2 0.129 6 0.939 2RGB
2. 2 紅眼候選區域
如何提取紅眼的紅色區域,學者們提出了各自的方法。其中,Gaubatz等人在文獻[1]中提出如下公式計算紅色度:
redness=R2/(G2+B2+K)
而Schettini等人在文獻[3]中提出紅色度計算公式如下:
redness=(4×R-(G+B)-min(G,B)-max(G,B))/R
redness=redness2×(redness>0)
本文根據CIELAB空間a*值表示顏色從綠色(-a*)到紅色(+a*)之間變化,其能準確地表示紅色色調的能量值大小,提出紅色度表示式如下:
redness=[log(a*-min(a*)+1)]2
表1給出了三種提取紅色度方法對比,正常紅眼三種方法均能較好提取,對于偏黃紅眼Gaubatz方法失效;對于偏暗紅眼Schettini方法失效;而本文方法能對三種紅眼的紅色度均能很好地提取。
表1 三種提取紅色度方法對比
采用本文方法提取紅色度后,為了進一步分析紅眼位置,需要對redness進行二值化。根據對圖像的分析,確定閾值為
threshold=mean(redness)+0.1×[max(redness)-min(redness)]
用threshold對紅色度redness進行二值化,得到二值化的紅眼候選區mask。
mask=1 redness>threshold
0 otherwise
2. 3 紅眼區域確認
對于處在人臉區域的紅眼,應處于人臉的上半部分;每個紅眼區域的面積(像素數)占所在人臉區域的比例在一定范圍內;紅眼區域形狀類似于一個圓。設紅眼候選區所在人臉區域寬為FW,高為FH,每個紅眼候選塊外接矩形區寬高分別為RW、RH,每個紅眼候選塊像素數為N。紅眼應滿足以下三條規則:
a)紅眼候選區的重心在垂直方向上應大于人臉高度的一半,因數字圖像以左上角為坐標起點,故
重心Y坐標:center Y=1/N∑Ni=1yi<0.5×FH
b)每個紅眼區域所占的面積(像素數)所占人臉總面積的比例在一定范圍內,即
面積比:FRA=Areaeye/Areaface=N/(FW×FH)
實驗中取0.1% c)紅眼區域形狀近似于一個圓,運用圓度近似計算和長寬比測量圓形度。 圓度:O=4π×Areaeye/ρ2eye≈4π×Areaeye/ [(π×RW)(π×RH)]=(4×Areaeye)/(π×RW×RH) 長寬比:WHR=min(RW,RH)/max(RW,RH) 如果測試候選塊為圓形,則O和WHR均接近1。實驗中取0.85 運用以上三條規則過濾紅眼候選區,得到最終的紅眼區域maskfinal。 3 紅眼消除 確定了最終的紅眼區域后,消除紅眼的工作目標是調整紅眼像素的色彩值,使其恢復正常的顏色。修正最主要的是要解決瞳孔色彩偏紅的問題,在 RGB空間中,紅色用R通道的值來表示,對于紅眼修正而言在RGB空間中應當減少R通道的值。但僅對R通道進行調整往往是不夠的,在一些情況下,G通道值和R通道值相差較大,僅降低R通道值會使修正后的紅眼顯得偏綠或偏藍。考慮到正常拍攝下眼睛瞳孔通常呈黑色或者灰色,符合一般人們所認知的眼睛顏色。因此,在對 R通道進行減色處理的同時,還需要對 G通道和 B通道作出適當調整。調整公式如下: Rcorrected=R×(1-maskfinal)+maxkfinal×Rchange Gcorrected=G×(1-maskjinal)+maskfinal×Rchange Bcorrected=B×(1-maskfinal)+maskfinal×Rchange 其中:Rchange=(G+B)/2。 按照以上公式對紅眼像素進行修正后,被修正區域的邊界會與周圍的像素有明顯差別,紅眼邊界過渡不自然。為了使修復后的眼睛看起來更真實,直接在二值圖maskfinal上提取出邊緣圖,并對紅眼糾正后圖像的每個通道(即Rcorrected、Gcorrected、Bcorrected)進行平滑濾波。該方法比文獻[8]提出的采用高斯濾波后的人眼更平滑,過渡更自然。采用的平滑濾波器形式如下: 1/91 1 11 1 11 1 1 4 實驗結果 為了測試本文算法,從互聯網和個人相冊中提取紅眼照片共計157張。其中紅眼379個。正確定位并消除紅眼344個,正確率90.8%;未定位出的紅眼中大部分由于人臉偏轉等原因造成人臉定位失效;將非紅眼定位為紅眼7個,導致修正錯誤,虛警率為1.8%。圖4給出了一幅典型紅眼圖上述算法的步驟結果,可以看出本文算法能有效定位并消除紅眼,而且修復后紅眼處看起來自然、無突兀感,視覺效果好。 表2(a)給出了偏黃紅眼消除效果,表2(b)給出了偏暗紅眼消除效果,表2(c)給出了多人紅眼消除效果。實驗表明本文算法不僅對典型紅眼能準確定位,而且對非典型的偏黃紅眼和偏暗紅眼也能很好地定位并消除;同時本文算法對多人多紅眼也能很好處理。 表2 非典型紅眼和多人紅眼消除 5 結束語 本文提出一種基于CIELAB顏色空間的自動紅眼消除算法。首先利用AdaBoost算法檢測出人臉,減少紅眼搜索區域。利用CIELAB顏色空間a*分量能有效突出紅色色調信息的特點提取可能紅眼區域,最后對可能紅眼區域進行約束過濾獲得最終的紅眼位置。對定位的紅眼處的像素在RGB三通道均進行修正,并在邊界處運用平滑濾波,消除紅眼后的人眼更自然。實驗證明該方法不僅能對典型紅眼有效定位并消除,而且對非典型的偏黃紅眼和偏暗紅眼也能很好地定位并消除,測試數據表明該自動消除紅眼算法有很好的魯棒性。 參考文獻: [1]GAUBATZ M, ULICHNEY R. Automatic red-eye detection and correction [C]//Proc of the 9th IEEE International Conference on Image Processing. New York:IEEE Press, 2002: 804-807. [2]SMOLKA B, CZUBIN K, HARDEBERG J Y, et al. Towards automatic redeye effect removal [J]. Pattern Recognition Letters, 2003,24(11):1767-1785. [3]SCHETTINI R, GASPARINI F, CHAZLI F. A modular procedure for automatic red-eye correction in digital photos[J]. Proc of SPIE, 2003,5293:139-147. [4]路明,趙群飛,施鵬飛.一種自動紅眼消除方法[J].電路與系統學報,2006,11(6):124-128. [5]VIOLA P,JONES M.Robust real-time object detection[C]//Proc of IEEE ICCV Workshop on Statistical and Computational Theories of Vision. Vancouver: [s.n ], 2001:74-747. [6]LIENHART R, MAYDT J. An extended set of Haar-like features for rapid object detection[C]//Proc of the 9th IEEE International Conference on Image Processing. New York: IEEE Press, 2002:900-903. [7]LIENHART R, LIANG L,KURANOV A. A detector tree of boosted classifiers for real-time object detection and tracking[C]//Proc of IEEE International Conference on Multimedia Expo (ICME2003) . New York: IEEE Press, 2003:277-280. [8]王藝莼,佳俊.紅眼照片自動檢測和修復方法[J].計算機工程,2003,29(11):93-94.