3D人臉識別預處理,3D face recognition preprocess


本文由兔崩潰公布http://blog.csdn.net/smartempire/article/details/31373817。

轉載請注明出處。howdeshui#163.com

近期在做三維人臉識別相關的東西,在已獲取三維數據的情況下進行人臉的識別分割是第一步。本文將介紹預處理內的幾個操作,終於給出分割后的三維人臉數據以及經過變換的灰度圖像。

作者之前申請了國內的三維人臉數據庫都沒申請到,FRGC v2庫也沒有回復,僅僅申請到了一個很小眾的庫。此庫重點是研究有遮擋情況下的三維人臉識別,所以不太符合后面要做表情變化研究。

1、填洞插值操作

掃描得到的數據可能會有一些洞。例如以下圖的眼睛眉毛等部分,所以須要採用cubic等方式進行插值,並且臉部會有稱為spike的凸起。這個在后面切割出人臉后會進行消除。

須要注意的是,原始數據的x,y軸上的坐標並非等間距的。所以在插值后須要進行重採樣,使得x,y軸上為等間距。


原始三維數據

2、圖像插值重採樣

之所以會有這一步,是由於三維數據經過插值重採樣之后與二維圖像的像素點已經不是一一相應的關系了,所以為了接下來的人臉區域檢測等操作須要類似的重採樣。原始圖像與插值重採樣后的圖分別例如以下:


原始RGB圖像重採樣圖像

你可能會問原始圖像是彩色的,重採樣后為毛變成灰度的了,沒辦法,RGB圖像有三個分量,插值與採樣我實在不知道該怎么在三個分量上進行。假設在每一個分量上進行得到的圖像簡直才不忍賭。

3、鼻尖點檢測

這是關鍵的一步,由於以鼻尖點為中心做80mm的圓球就能將人臉分割出來,所以這一步的准確性非常關鍵。

在一些論文里是這么做的,將三維數據做橫向的切片稱為slice,在鼻尖點處的slice基本例如以下圖。假設以每一點為圓心做圓。假設圓的半徑合適(比方30mm),那么圓心與交點會形成一個三角形並且這個三角形的高(altitude)是最大的。通過這種方式基本能夠確定鼻尖點。可是假設僅僅是這么做會發現有些衣服如衣領等會形成誤操作。所以能夠先在灰度圖像上檢測人臉區域,在這個區域取slice能夠基本消除誤測。

鼻尖點檢測示意圖鼻尖點(圖中黑點)

3、提取人臉部分

在第2步得到nose tip 后,以該點做圓球。以80mm(視情況而定)做半徑,落在圓球內的三維點即為人臉點。



4、降噪、去spike操作

Spike主要是一些毛刺。能夠定義該點到8-neighbor的距離作為推斷根據,假設距離超過某個閾值則能夠把該點抹成0然后又一次採樣,或者直接抹成8-neighbor的均值或者中值。降噪主要針對臉部凹凸不平的情況,作者測試了中值和均值濾波器,可是效果並不明顯,也許是由於前期已經重採樣的原因。下圖是得到的人臉,貌似和第三部的結果沒有差別。


5、姿態矯正

有些人臉可能會有旋轉平移的情況。這一步將對姿態進行矯粗方便興許的ICP等方法的對齊,矯正用到的方法是Hotelling transform。在之前的博文里介紹過了,不再贅述。結果例如以下圖,因為博主本來選擇的數據就是姿態不明顯的,所以矯正的結果並不明顯。


以上就是預處理的幾步。沒有涉及到復雜的算法實現,僅僅是實現起來比較瑣碎,像nose tip的檢測要推斷圓與slice的交點,要由粗到細的取slice的間隔以節省CPU時間。所以實現起來比較費時。之前上傳的人臉識別的demo即使是免費的也還是有人發牢騷。所以本文的MATLAB代碼就不再免費發布了。假設有須要能夠聯系我howdeshui#163.com。

版權聲明:本文博客原創文章,博客,未經同意,不得轉載。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM