2.1 Transformation
在分析資料的過程中,為了使之後學到的資料能夠有準確的代表性,要被學的資料要有一致性,所以在學資料以前,我們必須作一些alignment的動作,在這個動作中,我們會將資料作transformation。
Transformation大致上可以分成三種類型:translation、scaling和rotation,在步驟中作alignment的時候,我只用到前面兩個translation和scaling。
所謂的translation就是指將資料作平移,每一個特徵點的座標以某點為基準,作相同的位移量作位移,使某一個部位(例如鼻尖)的座標能夠在相同的座標上。而scaling是指將資料作放大縮小,把基準點設在原點,利用translation將資料作平移,再將每一個特徵點的座標同時乘上一個值,即可做到等比例縮放的效果。
利用以上這兩個方法,我們可以將要分析的資料盡量做到一致性的效果。
2.2 步驟
一、求出NEmean(不同人間,無表情的平均座標值)
求出100筆NE資料68個特徵點的平均值,並且存檔成NE0000.log。
二、對所有NE作align
每一個model的NE大小皆不同,為了要讓之後分析的資料能有一致性,所以首先要先將每個model的NE對NEmean作align,使所有NE的大小都能差不多。
(1) 利用第38~44個特徵點求(鼻子周圍)出鼻尖。
(2) 平移所有特徵點使NE的鼻尖座標能重疊NEmean的鼻尖座標。
(3) 以鼻尖為原點,將所有的特徵點平移。
(4) 求出一個最佳縮放值best_sol,使得當68個特徵點同時乘以best_sol能得到與NEmean的最小誤差。
(5)將所有特徵點座標皆乘以best_sol。
(6)以鼻尖為基準,恢復平移前的座標。
(7)紀錄且存檔,檔名為原始命名前加上a,ex:aNE0001.log。
三、對所有AN、DI、FE、HA、SA、SU作global
alignment
每筆資料的大小皆不同,為了使之後的分析能有一致性,所以首先要將每個表情對自己的參考NE作global align,其中參考NE為已作過align後的NE。因為當一個人在作這六種表情的時候,鼻尖和兩眼的center並不會有很大的位移,所以在作align的時候,是以這三個點作為基準參考。
(1)首先分別對model自己的參考NE的鼻尖座標作對齊。
(2)再以鼻尖為原點作位移。
(3)利用第27~30個特徵點(左眼周圍)求出左眼的center、第32~35個特徵點(右眼周圍)求出右眼的center。
(4)利用鼻尖、左眼center和右眼center求出一個最佳縮放值best_sol,使align後這三個座標相對於參考NE的誤差值能最小。
(5)將所有的特徵點座標皆乘以best_sol。
(6)以鼻尖為基準,恢復平移前的座標。
(7)紀錄並且存檔,檔名為原始命名前面加上g,ex:gAN0004.log。
四、求出local shape
deformation
當一個人在作這六種表情的時候,其表情變化可以分成兩步驟,首先是各部位對自己的center作相同的位移,之後每個特徵點在作各別得位移(local shape
deformation)。所以一共分成兩種local shape deformation:center的local shape deformation和所有特徵點的local shape deformation。
(1)center的local shape
deformation
a.利用第15~20個特徵點(右眉周圍)求右眉center、第21~26個特徵點(左眉周圍)求左眉center、第27~30個特徵點(左眼周圍)求左眼center、第32~35個特徵點(右眼周圍)求右眼center、第60~65個特徵點(嘴巴內側周圍)求嘴巴center。
b.算出這五個center對於參考NE中的center的位移值。
c.紀錄並且存檔,檔名為原始命名前面加上c,ex:cAN0004.log。
(2)所有特徵點的local
shape deformation
a.這五個部位的特徵點分別對於自己的center作相同的位移,使得各個部位的center座標能夠對齊參考NE的center座標。
b.算出所有特徵點對於參考NE的位移值(local move)。
c.紀錄並且存檔,檔名為原始命名前面加上m,ex:mAN0004.log。
2.3 分析與驗證
在將多維資料以較少維資料來表示前,我們要先來檢查前四個步驟的想法與作法是否有錯。我所採取的方法是比較align前後對於參考NE的誤差的平均值和標準差,因為作align的目的就是為了讓model和參考NE的誤差能變小,所以如果用曲線來表示的話,align前的藍色曲線應該在align後的紅色曲線上面。
根據以上的分析,以下是我去實作的結果,都是以NE為例,其中又分成兩種驗證,一個是68個特徵點在相同表情下的誤差(一共有136個值),另一個是一個人在一筆資料下的誤差(一共有100個人)。
一、68個特徵點
X:68個特徵點x、y Y:誤差pixel
藍色曲線:未作align前 紅色曲線:作了align後
《mean of NE》
《std of NE》
二、100個人
X:100個人的編號 Y:68個特徵點加總誤差
藍色曲線:未作align前 紅色曲線:作了align後
《mean of NE》
《std of NE》
由以上的實驗數據顯示紅色曲線幾乎都會在藍色曲線的下面,所以我們可以知道驗證方法與實作的正確性。
2.4 PCA
全名為Principal
Component Analysis。PCA的概念是將一個多維的資料可以用較低維的方式表示,利用PCA的方式存取資料的話,可以減少存資料的量,如此我們可以將資料作壓縮。
X = μ
+ ∑αi*vi
,其中X是個多維的資料,μ為資料的平均值,vi是eigenvector,每一個vi都是一個可以代表這個多維資料的參考基準,αi是投影到vi上的值,其中i小於等於X的維度,表示我們可以不必使用全部的資料,可以利用小於等於原始資料的資料量來代全部的資料,另外eigenvector所對應的eigenvalue是表示資料在這個代表性參考基準上的分布範圍。
pdm_core.m的程式是PCA的運算,利用這個程式,我們可以將六種表情的local move轉成用mean、eigenvalue和eigenvector來表示(資料量較少)。
2.5
輸出資料
經過pdm_core.m程式的PCA運算,我們可以得到12個輸出資料,每筆資料中含有eig_num、mean、eig_val和eig_vec這四種資訊。其中eig_num表示eigenvalue的個數,mean表示資料的平均值,eig_val表示資料的變化量,eigen_vec表示資料的eigenvector。
一、5個center的位移資料
AN_center_pdm.mat、DI_center_pdm.mat、FE_center_pdm.mat、
HA_center_pdm.mat、SA_center_pdm.mat、SU_center_pdm.mat。
二、68個特徵點的位移資料