3.1 在MATLAB環境中作測試
將資料分析完畢並且紀錄存檔後,我作了一些測試,利用那些輸出資料將NEmean轉成有表情,以AN為例。
exp = NE + mean + ∑αi*vi,其中NE表示NEmean,mean是輸出資料中的mean,vi是輸出資料中的eigenvector,αi是輸出資料中的eigenvalue開根號取其值的正負三倍之間,在程式中則是在此範圍內隨機取值。
一、NE先移動各部位的center再作每個特徵點的local move:
紅色:NEmean 藍色:利用輸出資料求得的表情
因為αi值是random產生的,所以可以發現到臉型會有所改變,可是像是AN這類表情其實臉形並不會有太大的改變,所以又作了另一個測試。
二、NE先移動各部位的center再作每個特徵點的local move但是臉型是固定的:
紅色:NEmean 藍色:利用輸出資料求得的表情
像AN這類表情,仔細觀察的話,可以發現五個主要部位的center其實並沒有做太大的位移,所以如果不考慮center的move的話,其實還是可以表現生氣的表情,所以又作了第三個測試。
三、NE作每個特徵點的local move且臉型固定:
紅色:NEmean 藍色:利用輸出資料求得的表情
以AN為例,由以上的測試結果,可以發現我們由輸入資料學到angry的表情是眉毛向中間擠、眼睛會微微的瞇起來、嘴巴抿起來並且有點下彎彎,所以我們可以知道要表示一個人angry的表情,主要把這三個部分的特徵表現出來即可。
3.2 在C++環境中作測試
在MATLAB環境中作完測試後,決定除了SU以外的表情(AN、DI、FE、HA、SA),臉型的特徵點(第0~14個特徵點)固定不動,因為只有SU的表情會有因為嘴巴張泰開而下巴向下位移的情況。另外,當外部人為決定變化率的時候,所有的αi亂數取變化率上下0.5之間,再套入公式 exp = NE + mean + ∑αi*vi 中,最後可以得到表情變化後的特徵點位置。下面是用input data:NE的特徵點,運算後輸出的六種表情特徵點位置。
Input data:NE
Output data:
AN DI FE
HA SA SU