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