1. 程式人生 > >人臉識別之人臉對齊(三)--AAM演算法原文: http://blog.csdn.net/colourfulcloud/article/details/9774017 AAM(Active Appear

人臉識別之人臉對齊(三)--AAM演算法原文: http://blog.csdn.net/colourfulcloud/article/details/9774017 AAM(Active Appear

原文:

http://blog.csdn.net/colourfulcloud/article/details/9774017

AAM(Active Appearance Model)主動外觀模型主要分為兩個階段,模型建立階段和模型匹配階段。其中模型建立階段包括了對訓練樣本分別建立形狀模型(Shape Model)和紋理模型(Texture Model),然後將兩個模型進行結合,形成AAM模型。模型匹配階段是指在視訊序列中將已建立好的AAM模型在當前幀影象中尋找最匹配的目標的過程。

 

1樣本選取與標定

1.1樣本採集

要建立AAM模型,就需要採集目標的樣本,建立樣本庫。一般來說,樣本越多,AAM模型的效果越好,但建立模型的時間越長;樣本的差異性越大,AAM模型所能處理的人臉的範圍越廣,但準確性會相對下降,因而需要根據經驗值選取所要採用的樣本數。

1.2樣本取點

在採集了樣本後,我們得到的只是一系列包括了我們所需要的目標資訊的影象。而我們要建立關於人臉的AAM模型,就需要把目標從樣本中提取出來而去除背景等的影響。而我們提取目標的方法就是在樣本中手動把人臉的輪廓標定出來。

1.3樣本資料處理

在手動標定了樣本中的點後,通過程式把樣本的點的位置{x,y}儲存為向量的形式m1={x1,y1,x2,y2,x3,y3,……,x68,y68}。於是從n個樣本中我們得到了m1到mn這n個向量作為輸入資料。

 

2形狀模型(Shape Model)

對輸入資料我們首先建立活動形狀模型ASM。建立ASM模型包括Procrustes變換和PCA降維兩個步驟。

2.1 Procrustes變換

要建立ASM模型,需要對樣本的人臉進行歸一化。由於每個樣本的拍攝角度,人臉角度,人臉遠近等因素,樣本中的人臉的位置,大小均不相同。Procrustes變換的主要思想是將觀測物件的中心平移到原點,然後將物件的大小伸縮到固定大小並將物件旋轉到正確位置。

每一個樣本的物件都有四個引數,重心的x座標和y座標,物件大小和物件旋轉的角度。對於每兩個樣本,首先將兩個樣本的物件的重點都移動到同一位置,然後將兩個樣本的物件通過放大縮小操作伸縮到一樣大小,最後通過兩個物件相應的特徵點的位置來計算出兩個物件的旋轉角度的差別,然後旋轉物件,使相應點的距離的平方和最小,從而使使兩個物件的角度一致。

對樣本的物件兩兩進行Procrustes變換,最終所有物件都移動到固定的初始位置,大小、角度也一致。然後對轉換後的所有樣本求平均,就得到了一個平均的形狀模型。

2.2 PCA降維

在得到平均形狀模型後,我們得到了68*2*n個引數,改變這些引數就可以在平均形狀模型上進行改變,因而這些引數代表了平均形狀模型的特徵。

但得到的這些引數是多維的,存在著大量的資料冗餘,因而需要利用PCA進行降維。

PCA(Principal component analysis)即主元分析,是一種對資料進行分析的技術,它可以有效的找出資料中最“主要”的元素和結構,去除噪音和冗餘,將原有的複雜資料降維,揭示隱藏在複雜資料背後的簡單結構。它的優點是簡單,而且無引數限制,可以方便的應用於各個場合。

從線形代數的角度來看,PCA的目標就是使用另一組基去重新描述得到的資料空間。而新的基要能儘量揭示原有的資料間的關係,而這個基即最重要的“主元”。PCA的目標就是找到這樣的“主元”,最大程度的去除冗餘和噪音的干擾。

PCA的流程如下:

(1) 採集資料形成m*n的矩陣。m為觀測資料的維數,n為觀測樣本的個數。

(2) 在每個觀測變數(矩陣行向量)上減去該觀測變數的平均值得到矩陣X。

(3) 對XXT進行特徵值分解(SVD分解),取特徵向量組成P的行向量以及對應的特徵根。

最終我們得到68*2*n個按照權值從大到小排列的特徵量,通過設定閥值選取前p(p<<68*2*n)個特徵量,也就是最能代表形狀模型的p個特徵,來作為形狀模型的引數。因而我們可以通過調整這p個特徵量方便地改變形狀模型。

 

3紋理模型(Texture Model)

紋理模型(Texture Model)描述了目標的紋理特徵。紋理模型的輸入資料和形狀模型一樣,在這裡可以看做是n張圖片,每張圖片上有一個點集。

3.1 Delaunay三角劃分

Delaunay三角劃分將空間點連線為三角形,使得所有三角形中最小的角最大的一個技術。三角劃分的要點是任何三角形的外接圓都不包括任何其他頂點,即外接圓性質。

一個實現Delaunay三角劃分的演算法如下:

(1)  新增外部三角形,並從它的一個頂點(在這裡會產生一個確定的外部起點)處開始;

(2)  加入一個內部點;在三角形的外接圓內搜尋該點,去掉包含該點的三角劃分;

(3)  重新構造三角圖,在剛剛去掉的三角形外接圓內包括新的點;

(4)  返回第二步,直到沒有新的點加入。

Delaunay三角劃分使每一張圖上的點集劃分為一系列的三角形,如上圖,為下一步進行三角對映作準備。

 

3.2三角對映

使用Delaunay三角劃分後,每一個樣本都可以劃分為一系列三角形,而不同樣本間這些三角形是對應的。要得到平均紋理模型,就需要把樣本中的目標的紋理通過分片仿射投影到同一個樣本上,而這種分片仿射就是三角對映。

我們先設定一個樣本為平均臉,既然在樣本中的點與平均臉的所有三角形都是一一對應的,我們就可以根據三角形中每一點的位置計算其對應平均臉中某一點的位置,然後把該點的畫素值複製到平均臉對應點的位置上。在這裡因為三角形的形狀不同,因而肯定需要捨棄一部分點,也要填補一部分的點,可以根據鄰近的畫素點決定判決準則。最終每一個樣本都可以轉化到平均臉上,然後把這n個臉求平均,就得到了平均紋理模型。

3.3 PCA降維

在求出平均紋理模型後,我們同樣得到了很多可以控制這個模型的引數,因而我們同樣需要對這些結果進行PCA降維,從而提取出對平均紋理模型影響最大的前q個引數。我們可以通過調整這q個引數改變紋理模型。

 

4組合模型(Combine Model)

在得到形狀模型和紋理模型後,我們就可以對這兩個模型進行加權組合,得到組合模型,也就是AAM模型。同時我們也得到了p+q個引數,這些引數就是用來改變AAM模型的特徵的。雖然前面進行過兩次PCA降維使引數維數大大降低,但兩個模型結合後,某些引數還是會受到別的引數的影響,因而我們需要再一次進行PCA降維,最終得到r個引數(r<p+q),我們可以調整這r個引數,利用AAM模型變化出形態各異的人臉。

 

5搜尋模型(Search Model)

AAM模型建立以後,我們就可以實際在視訊序列中跟蹤人臉。初始時記AAM模型的r個引數為向量 ,然後對輸入的影象,首先假設某個位置有人臉,得到人臉的實際引數c,然後我們通過不斷地調整 使c和 之間的距離最小,若這個最小值小於某個閥值,就可以認為當前位置出現人臉,我們就能夠在視訊中檢測到了人臉。

當然,若在每一幀都遍歷影象尋找目標顯然效率過低,因而在後續的幀中,演算法都只從上一幀的領域開始搜尋目標,若搜尋失敗,則再擴大搜索範圍,直至遍歷整幅影象,這種演算法可以大大提高演算法的速度。