摘要
在當今社會,隨者視訊裝置的普及,人臉辨識的研究以及應用越來越顯得重要,有關 face recognition 的研究論文更不斷推陳出新。我們一直對 2D 影像的臉部辨識有著極大的興趣,
於是閱讀了大量有關臉部辨識的 paper,以及許多圖形的處理原理,如 feature extraction、
edge detection 等等,在對 face recognition 有充分的了解之後,便著手進行流程設計與實 作。
本 project 主要分為三大部分,(1)從照片中圈選臉部區域並做篩選。(2)處理圈選臉部區 域並將臉部分為眉毛、眼睛、鼻子、嘴巴四個部分。(3)根據不同部位的特性設計不同的篩選 方法,將主要的人臉特徵點標示出來。
以一張露出額頭的正面大頭照來說,我們參考點的標示非常準確,而在一班生活照中的人 臉,我們亦獲得很高的標示正確度。有了人臉特徵點的資訊,未來我們將可以發展成一套完整 的人臉辨識系統,可以快速且精確的做人臉辨識工作。
實作流程
input
image 臉部偵測
特徵點擷取
合併結果 輸出
1. 圖像輸入:
使用 40 位不同人物的正面照片作為本 project 的 test data。
2. 臉部偵測:
我們選擇 OpenCV 為主要的開發工具,其擁有完善的影像處理函式庫,其中 OpenCV 提 供了臉部偵測的演算法以及資料庫,其使用 Viola 在 2001 提出的一種機器學習的臉部偵 測方法(Robust Real-Time Face Detection),其兼具極高的準確率與偵測速度,其主要分 為 Integral Image、Ada boost 以及 Cascade classifier 三個步驟,透過不斷的篩選將非 人臉區域去除,最後圈選出正確的人臉區。
首先我們使用 openCV 先對輸入的影像作一次臉部偵測,但有時仍然會發生誤判的情形,
於是我們對所找到的臉部區域做一次膚色篩選,在這裡我們先將臉部區域由 RGB 轉為 HSV 色彩空間,因為 HSV 將色相、飽和度、明度分離開來,在 HSV 空間中,人臉受到光線明 暗的影響比較小,因此較適合膚色偵測。
經過試驗,我們發現 HSV 值在下列範圍有最佳的膚色偵測效果:{ 0 < H < 0.13 0.15 < V < 0.68
0.35 < V < 1
計算黑色區域佔整體方框的比例,若是人臉則黑色部分比例會很高,若非人臉則黑色部分 比例就會較低。
若經由膚色判斷判斷為人臉,則以紅框標示,繼續往下做偵測,若不是人臉,則以黑框標 示並跳出。
HSV 色彩空間
原圖 HSV 膚色二值化
黑框為 OpenCV 偵測錯誤之區域
3. 特徵點擷取:
將臉部區域定位之後,我們將臉部分為眉毛、眼睛、鼻子、嘴巴四塊,分別進行特徵點偵 測。
A. 眼睛定位:
為了凸顯眼睛與周圍皮膚的差異性,我們提取眼睛區域的飽和度與明度,並以 0.6 與 0.4 的比例混合,之後再套用 3*3 的 median filter(中值濾波器)使圖片模糊化。
從第四張圖我們可以看出眼睛分其他地方有明顯的邊界,一些皺紋、不平整的地方經 由 median filter 變得比較均勻。
接下來我們使用 sobel operater 對第四張圖片進行 edge detect。
我們可以看到眼睛輪廓被很明顯的標示出來,接下來我們即可以搜索眼睛的上下左右 邊界。
最後從邊界進行搜尋,標示眼睛的上下左右邊界點,即完成眼睛特徵點的標示。
B. 眉毛定位:
一開始與眼睛相同,做眉毛區域的模糊化。
由於眉毛的邊界沒有眼睛明顯,所以我們使用二值化的方式,調整閥值,使灰度大於 閥值的畫素設為白色。
由於眉毛沒有一個明顯的邊界範圍,因此我們使用比例的方式,估計眉毛邊界點的位 置。分別從眉毛兩側開始往內搜尋白色畫素,當計算的範圍超過白色區域的
5%-10%(不斷調整使其更加準確)時,將剛才搜尋到的白色畫素座標相加平均取重心,
當作眉毛邊界點。
上圖中綠色標示點為紅色區域的平均座標,即是所找到的眉毛邊界座標。