數碼圖像中自動祛除紅眼方法探討

數碼圖像中祛除紅眼已經不是問題,對於我們來說,紅眼自動祛除纔是真正的關鍵,作者也是模式識別方面的初學者,本文意在拋磚引玉,希望各位高手能夠不吝賜教,提出更好的方法。

在闡述紅眼的自動祛除前,我先花少量篇幅說一點我所知的關於的紅眼知識。

紅眼現在普遍認爲是由於有生命物體被閃光燈照射後瞳孔突然收縮反光所造成的,而且需要注意的是,紅眼現象的產生和個體本身有關。因此,現在的數碼相機普遍採用預閃的方式,能夠較有效的杜絕紅眼現象的產生。

紅眼現象一旦產生後,現在普遍採用的方法是用顏色替代紅色,這樣的效果非常明顯,而且可以避免由於紅眼反光所造成的眼睛中間亮,兩邊黑的不正常現象。

可是,這樣祛除紅眼的方法顯然是有缺陷的,很大一部分原因就是這樣的祛除方法沒有和周圍掛鉤,所以看起來不太自然。這裏,我採用的方法和普通方法有所不同,利用灰度運算的一個變形來近似求得紅色通道:(G * 59 + B * 11) div 70。這樣的運算基本上能夠求得正確的紅色通道。但是,這樣的運算完全忽略了那個錯誤的紅色通道的作用,顯然還不夠完美,於是,我加入了紅色通道的作用:R + (R - Max(G, B)) / 112 * ((G * 59 + B * 11) div 70 - R)。這樣的運算使用了常數112591170,但是作用是非常明顯的,使用了紅色通道後使得誤差降到了最低。

以上是關於紅眼的一些基礎知識。下面,我們將進入正題,如何自動祛除紅眼。

下面是一幅紅眼圖片,我們將以這幅紅眼圖片做爲講解的例圖。

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

通過分析例圖,很容易得知:紅眼是紅的,因此,可以首先提取紅色區域來大致獲得紅眼區域而避免討論其他部分造成的額外開銷,當然,這樣的選擇也有意外,那就是對紅眼很不明顯的圖片會忽略不計。

如何提取紅色區域呢?有幾種方法,一種是取灰度和紅色的差,一種是取紅色和其他兩種顏色中的最小值的差,而我使用的是通過取紅色和其他兩種顏色中最大值的差來實現的,這樣提取出來的輪廓很不明顯,所以,可以乘一個常數來提高紅色的亮度。這樣,例圖就可以轉換爲下面的紅色蒙版區域。

在紅色蒙版區域中提取眼睛就容易多了。

現在,我們分析眼睛的特徵。可以發現,眼睛的一個重要特徵就是眼睛中間有黑眼珠、旁邊有白眼仁。現在,就利用這個特徵來進行眼睛的第一步篩選。對每個顏色偏紅的點左右進行循環搜索(插敘:眼睛根據常識可知道上、下、左、右都有白眼仁,爲了判斷正確,只要左右任意一方有白眼仁即可)。判斷是否泛白我採用的方法是首先判斷灰度是否大於128,然後判斷其他顏色和這個灰度的差值是否在一個常數以內,如果在的話就是白眼仁了。這樣進行判斷後可以大致確定是眼睛了,然後進入下一步,確定眼睛邊界。因爲紅眼一般只出現在黑眼珠的中間部分,所以這裏的確定眼睛邊界其實是確定要祛除紅眼的邊界。這個確定方法就簡單了,仍然循環搜索左右有沒有顏色不太紅的點,這個點就是邊緣了。

下一步比較關鍵了,確定這一點是否是紅眼。前面的過程再繁瑣也不過只是進行下篩選,將有可能 是紅眼的點篩選出來。嘗試過用圓形度來進行判斷,因爲眼睛的非常非常重要的特徵就是黑眼珠是圓的。不過很遺憾的是,我嘗試這樣方法的效果並不好,於是改用原始的辦法,進行模式對比。簡單言只,在這個以剛剛搜索的眼睛邊界爲邊緣的矩形空間內和圖片紅眼進行匹配運算,看是否匹配,這樣說來很抽象,看下圖就清楚多了。

如果統計差值在一定的常數範圍內的話,我們就近似的將這個圖像看成是圓形的,這樣判斷的方法比圓形度在此高效的原因是很大一部分的眼睛圓部在紅色蒙版區域上是和其他部位相連的,這樣就容易被判斷不圓,而採用這樣的方法的話就完全沒有這樣的顧慮。

判斷出了紅眼的區域,就可以很方便的使用上面介紹的R + (R - Max(G, B)) / 112 * ((G * 59 + B * 11) div 70 - R)公式進行去紅眼操作。

爲了能夠提高識別率,原則上應該對圖片進行預處理。分析可以發現,有部分紅眼圖片的紅眼中部不呈紅色,這樣對後期處理產生了一定的麻煩,解決方法是通過一個卷積模糊變形實現的,這個卷積公式是:
[1,2,1]
[2,0,2]
[1,2,1]

這個公式忽略了卷積的中部一點,能夠有效的避免上面所說的問題。

另外,還可以用飽和度調整的方法,來提供紅色區域和其他區域的差別。

更有甚者,我曾經嘗試過利用圖像色彩均衡後的圖像來進行紅眼識別,也一定程度上提高了識別率。自動圖像色彩平衡的辦法有興趣的讀者可以自行探究。

事實上,以上的方法可以達到識別率80%以上,下面是一些對比圖片,很能夠說明問題。

->

->

事實說明,上面介紹的方法在一定程度上還是有用的,當然,也希望大家能夠研究出更完善的自動祛除紅眼方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章