基于OpenCV的人臉識別設計方案
3.2 圖像預處理
由于大部分的臉部檢測算法對光照,臉部大小,位置表情等非常敏感, 當檢測到臉部后需利用cvCvtcolor()轉化為灰度圖像,利用cvEqualizeHist()進(jìn)行直方圖歸一化處理。
3.3 臉部檢測方法
OpenCV采用一種叫做Haar cascade classifier 的人臉檢測器,他利用保存在XML 文件中的數據來(lái)確定每一個(gè)局部搜索圖像的位置,先用cvLoad()從文件中加載CvHaarClassifierCascade 變量, 然后利用cvHaarDetectObjects()來(lái)進(jìn)行檢測,函數使用針對某目標物體訓練的級聯(lián)分類(lèi)器在圖像中找到包含目標物體的矩形區域,并且將這些區域作為一序列的矩形框返回,最終檢測結果保存在cvRect 變量中。
3.4 臉部識別方法
識別步驟及所需函數如圖2 所示。
圖2 識別步驟(visio)
PCA 方法(即特征臉?lè )椒ǎ┦荕.Turk 和A.Pentland在文獻中提出的,該方法的基本思想是將圖像向量經(jīng)過(guò)K-L 變換后由高維向量轉換為低維向量,并形成低維線(xiàn)性向量空間,即特征子空間,然后將人臉投影到該低維空間,用所得到的投影系數作為識別的特征向量。識別人臉時(shí),只需將待識別樣本的投影系數與數據庫中目標樣本集的投影系數進(jìn)行比對,以確定與哪一類(lèi)最近。
PCA 算法分為兩步:核心臉數據庫生成階段,即訓練階段以及識別階段。
3.4.1 訓練階段
主要需要經(jīng)過(guò)如下的幾步:
(1) 需要一個(gè)訓練人臉照片集。
(2) 在訓練人臉照片集上計算特征臉,即計算特征值,保存最大特征值所對應的的M 張圖片。這M 張圖片定義了“特征臉空間”(原空間的一個(gè)子空間)。當有新的人臉添加進(jìn)來(lái)時(shí),這個(gè)特征臉可以進(jìn)行更新和重新計算得到。
(3) 在“特征臉空間”上,將要識別的各個(gè)個(gè)體圖片投影到各個(gè)軸(特征臉)上,計算得到一個(gè)M 維的權重向量。簡(jiǎn)單而言,就是計算得到各個(gè)個(gè)體所對應于M 維權重空間的坐標值。
OpenCV 實(shí)現為:先用cvLoadImage()載入圖片并利用cvCvtcolor()轉換為灰度圖片,建立自定義的迭代標準CvTermCriteria,調用cvCalcEigenObjects()進(jìn)行PCA 操作,計算出的Eigenface 都存放在向量組成的數組中,利用cvEigenDecomposite()將每一個(gè)訓練圖片投影在PCA 子空間(eigenspace)上,結果保存在矩陣數組中,用cvWrite《datatype》()將訓練結果保存至XML文件中。下面圖3 為訓練得到的部分特征臉圖像。
圖3 特征臉圖像
c++相關(guān)文章:c++教程
cvt相關(guān)文章:cvt原理
全息投影相關(guān)文章:全息投影原理
評論