陳郁
?
基于傳播算法的三維人體模型識別方法
陳郁
在三維人體網格模型的測量和建模過程中,人體部位(如手臂,軀干)的識別是非常基礎且重要的。利用網格模型特點而設計的傳播算法能夠快速地對人體的一些部位進行自動的識別。該方法不僅代碼簡單易用,而且對于殘缺粗糙模型的識別率也很高。
傳播算法;人體部位識別;三維人體網格模型;
當前,在產業的改造升級中,尤其是在服務行業的改造升級中,高端化、精細化、個性化和私人定制的需求不斷涌現,成為創新產業、新興產業中的重要一支。因此,在計算機上創建更接近實體、更精準、更具特點的三維人體模型[1],配合人體工學解決廣泛的與人體相關的問題,也越來越受到行業的重視。其三維人體模型的測量、建模和運用中的問題也常常成為熱點。
盡管有許多方法可用來采集三維人體的數據[2][3],但是目前主流的方法是利用三維掃描儀采集數據,建立三維人體網格模型。由于人體是一個復雜的三維曲面,而且腋窩褲襠等部位比較難以被掃描儀掃描到,因此會產生很多殘缺的粗糙的模型。對于這些殘缺粗糙的模型,一些基于人體比例和特征點的識別方法很難處理好。
為此我們利用三維網格模型網格點線間可傳播信息的特點而設計的三維人體模型傳播算法識別法,經近一萬次的運用證明,可以較好的解決這類問題。本文謹以此種方法的原理和實踐為基礎作以下論述。
三維網格模型通常是利用三維掃描儀掃描和采集人體或物體的數據,并將采集的數據以點云的形式儲存[4],然后將其轉換成為一個整體的三維網格模型[5][6]。這些三維網格模型的表面上有著網格點(Vertex),網格點之間相互有網格線(Edge)相連,以網格點、線組成的面為網格面(Facet),如圖1所示:

圖1 三維網格模型示意圖
這種通用的三維網格模型(3D Mesh)的形式能被絕大多數三維軟件所識別和讀取,因此通用性和易讀性非常好??梢员挥嬎銠C方便的用來儲存和作多種處理。
三維人體模型在三維坐標系中擺放的位置如圖2所示:

圖2 三維人體模型所在的坐標系
在三維坐標系的中間。X軸表示人體自右至左的方向,Y軸表示人體自下至上的方向,Z軸表示人體自后向前的方向。
在圖1中我們可以看到網格點之間是由網格線進行連接的,每個網格點可以通過網格線找到她最鄰近的幾個網格點,即相鄰網格點,而這幾個相鄰網格點又有它們各自的相鄰網格點。如果我們把一個網格中的任意一網格點打上已經被感染的標記(或稱感染點,如傳染病的感染源),它就會把該標記通過網格線傳播給它的相鄰網格點,而被感染的相鄰網格點也會被打上已經被感染的標記又會成為新的傳播源,把標記傳播給它所有的相鄰網格點。整個過程就像傳染病的擴散過程,直到碰到設置的隔離板(通常是一個平面,無網格,在三維直角坐標系中的方程為AX + BY + CZ + D = 0 [7]),或者把整個網格上所有的網格點都傳染后才會停止。整個傳播過程的示意圖如圖3所示:

(a) (b)
圖3a 將網格上的一網格點設置成傳染源
圖3b 傳染源將鄰近的網格點傳染

(c) (d)
圖3c 因為有了隔離板網格點M沒有被感染
圖3d 黃色三角形內網格點因為隔離板而未被感染
圖3 網點傳播示意圖
圖3a:被標注為黑色圓點的網格點是設置的傳染源。圖3b:傳染源的相鄰網格點因被傳染也變成黑色圓點,這些變成黑色圓點的網格點又變成為新的傳染源。圖3c:傳染源繼續傳染,但是網格點M因為在隔離板之上而免于被傳染。圖3d:傳染過程因為隔離板的作用而未能繼續向上進行。
利用網格模型的這一特點,我們設計了能夠快速對人體的一些部位進行自動識別的傳播算法。它是通過設置傳染源點和隔離板,讓傳染源在隔離板以下區域內傳播,調整隔離板,并對由此產生的傳染和未被傳染的網格點的傳播形態進行比較計算,以求證、識別網格模型中一些部位的算法,定名為傳播算法。
圖3系列示意圖片給出了傳播的過程和隔離板的作用(黑色圓點為感染點)。
要準確的找到手臂部分的范圍和尺寸,首先要定位出人體腋窩的位置,但是人體腋窩處的位置通常三維掃描儀很難掃描清楚,因而腋窩部分的網格經常會出現殘缺或者重疊,而一般的人體部位識別辦法很難進行識別。下面用手臂為案例,具體介紹傳播算法的應用。
3.1傳播算法的具體操作
腋窩褲襠等部位正是人體上兩個獨立肢體的連接部位。這些部位有讓兩個獨立肢體連通,并會引發感染網格點數目突變的網格線、點。通過傳播算法尋找識別身體上這樣的特征點,我們可以找出手臂的范圍、位置和尺寸。基本方法是:通過設置隔離區將三維人體網格模型分成手臂和身體兩個部分。不斷地擴大隔離區的范圍直到手臂和身體這兩個部分的連接處,即兩個獨立肢體上網格線的連通處。這樣就找到了腋窩的高度,從而找出手臂的范圍。我們先看一下該方法的偽代碼:
CList
CList
CPlane bndPlane; //設置隔離板
CPosition armholePos; //被傳染的網格點的邊界位置
GetSeed(vArm) 得到傳播源
Init(bndPlane) // 初始化隔離板
do
{
//應用傳播算法找到隔離板內所有能被傳染的網格點
Propagate(vArms);
// 檢查每一個被傳染的點,將在隔離板以外的網格點刪除
For (each vertex in vArms)
{
If (vertex OVER bndPlane)
vArms.Delete(vertex)
}
//記住被傳染的網格點的邊界位置
SetArmPosition(armholePos);
//隔離板內所有的點
VerticesInBoundaryPlane(vBnds);
bndPlane.Step(); //向上提升隔離板
}
While(vArms.Num / vBnds.Num < threshold)
下面我們根據圖示再來看一下具體的步驟。
3.2 基本步驟和計算
3.2.1尋找確定傳播源
在網格模型上尋找手臂上的任何一網格點或者特征網格點,即X值最大(左手臂)或者最小的網格點(右手臂),將其定為源傳播點,如圖4a所示:

(a) (b)
3.1.2 設置隔離區
按照人體的通常比例,將隔離板的起始高度設置在手肘的高度。這個時候我們可以看到隔離板將網格模型分割成了兩個獨立的部分,手臂部分和身體部分。如圖4a,圖4b中的藍色線條(隔離板方程 Y + hElbow = 0,hElbow, height of elbow手肘的高度)。
3.1.3 應用傳播算法
應用傳播算法,統計被傳染的網格點的數目nDiff(圖4B中被打上粗斜線傳染區內的網格點的數目),并記住被傳染的網格點的范圍。計算nDiff和隔離區內網格模型上所有網格點的數目nMesh的比例diffRatio =nDiff / nMesh * 100%。
如果該比例diffRatio遠小于100%,說明手臂部分和身體部位還未連通,則將隔離區的高度上移一步后如圖5所示:

(a) (b)
再計算nDiff和隔離區內模型上所有網格點的數目nMesh的比例diffRatio ,如此重復該步驟,直到diffRatio接近并等于100%。這說明隔離區內的手臂部分和身體部分有網格邊線(edge)相連接,或者說這兩部分相互連通了。
兩部分相互連通的網格邊線即是我們要找的腋窩部分如圖6所示:

(a)第N-1次 (b)第N次
該次循環中3.1.2內設置的隔離板的高度就是腋窩部分的高度,腋窩的X位置則是上次循環中手臂部分的最小X值(左手)、或最大X值(右手)。這樣腋窩部分就可以被定位了,有了腋窩的位置我們就能夠比較容易的找到整個手臂部分。
該種方法已經應用于專業的三維人體測量建模軟件中。該軟件已經處理了近一萬個三維人體網格模型,均能自動、準確、快速地找出手臂、腋窩、褲襠等部位的范圍和尺寸。
下面以手臂為例,我們選取了3個較為典型的三維人體網格模型作為案例對象:
完整的網格模型
腋窩處缺損比較嚴重的網格模型
腋窩處有重疊部分的網格模型
應用傳播算法尋找手臂部分后的結果,灰黑色的部分就是該方法自動找到的手臂的結果,如圖7~圖9所示:

(a) (b)

(c) (d)

(a) (b)
(c) (d)
圖8 缺損比較嚴重模型對象,該網格模型共有13845個網格點,其中2113個網格點在手臂部分

(a) (b)

(c) (d)
從圖中可以看到3個網格模型的手臂部分均被自動找到,且找到的位置也正確。
本文提出了以傳播算法尋找識別身體上特征點的方法,并付諸了實踐。通過近一萬個人體網格模型的驗證,該方法能處理殘缺的或者重疊的以及部分特殊的網格模型。且實現的方法相對簡單,準確、效率也高。
本方法除了應用解決以上舉例的三維人體網格模型的測量和建模過程中的問題外,也能夠應用于其他方面,例如一些掃描所得的機器零部件的三維網格模型中的缺損、重疊等問題的解決。
[1] 余詠文,三維身體測量及合身裁剪服裝[J].紡織學報,1999,20(3):156-159.
[2] 李勇,付小莉,尚會超. 三維人體測量方法的研究[J],紡織學報, 2001,22(4): 261-263.
[3] 甘應進,陳東生,孟爽,白越.《非接觸式三維人體計測現狀》[J].紡織學報,2005年6月,第26卷第3期: 145-146
[4] Rusinkiewicz, S. and Levoy, M. 2000. QSplat: a multiresolution point rendering system for large meshes. In Siggraph 2000[C]. ACM , New York, NY, 343–352
[5] Colin Smith,On Vertex-Vertex Meshes and Their Use in Geometric and Biological Modeling,http://algorithmicbotany.org/papers/smithco.dis2006.pdf
[6] Tobler & Maierhofer, A Mesh Data Structure for Rendering and Subdivision. WSCG '2006: Short Papers Proceedings: The 14-th International Conference in Central Europe on Computer Graphics, Visualization and Computer Vision 2006: University of West Bohemia, Plzen, Czech Republic, January 31 - February 2, 2006, p. 157-162.
[7] http://mathworld.wolfram.com/Plane.html
Body Part Recognition Method of 3D Human Polygon Meshes Based on Diffusion Algorithm
Chen Yu
(TPC (HK) Limited Technical Fashion Consultancy, Hongkong 999077, China)
Body parts recognition is very basic and important in the process of measuring and modeling 3D human polygon meshes. A Diffusion algorithm can distinguish body parts quickly and automatically. This method is not only simply to use but also can process raw polygon meshes.
Diffusion Algorithm; Body Parts Recognition; 3D Human Polygon Mesh;
章編號:1007-757X(2016)04-0071-03
TP311
A
(2015.09.07)
陳 郁(1977-),男,香港TPC(HK)三維軟件開發公司,技術總監,法國里爾科技大學博士,研究方向:圖像識別與處理,上海,200030