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

圖1 三維網(wǎng)格模型示意圖
這種通用的三維網(wǎng)格模型(3D Mesh)的形式能被絕大多數(shù)三維軟件所識(shí)別和讀取,因此通用性和易讀性非常好??梢员挥?jì)算機(jī)方便的用來儲(chǔ)存和作多種處理。
三維人體模型在三維坐標(biāo)系中擺放的位置如圖2所示:

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

(a) (b)
圖3a 將網(wǎng)格上的一網(wǎng)格點(diǎn)設(shè)置成傳染源
圖3b 傳染源將鄰近的網(wǎng)格點(diǎn)傳染

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

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

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

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

(a) (b)

(c) (d)

(a) (b)
(c) (d)
圖8 缺損比較嚴(yán)重模型對(duì)象,該網(wǎng)格模型共有13845個(gè)網(wǎng)格點(diǎn),其中2113個(gè)網(wǎng)格點(diǎn)在手臂部分

(a) (b)

(c) (d)
從圖中可以看到3個(gè)網(wǎng)格模型的手臂部分均被自動(dòng)找到,且找到的位置也正確。
本文提出了以傳播算法尋找識(shí)別身體上特征點(diǎn)的方法,并付諸了實(shí)踐。通過近一萬個(gè)人體網(wǎng)格模型的驗(yàn)證,該方法能處理殘缺的或者重疊的以及部分特殊的網(wǎng)格模型。且實(shí)現(xiàn)的方法相對(duì)簡單,準(zhǔn)確、效率也高。
本方法除了應(yīng)用解決以上舉例的三維人體網(wǎng)格模型的測量和建模過程中的問題外,也能夠應(yīng)用于其他方面,例如一些掃描所得的機(jī)器零部件的三維網(wǎng)格模型中的缺損、重疊等問題的解決。
[1] 余詠文,三維身體測量及合身裁剪服裝[J].紡織學(xué)報(bào),1999,20(3):156-159.
[2] 李勇,付小莉,尚會(huì)超. 三維人體測量方法的研究[J],紡織學(xué)報(bào), 2001,22(4): 261-263.
[3] 甘應(yīng)進(jìn),陳東生,孟爽,白越.《非接觸式三維人體計(jì)測現(xiàn)狀》[J].紡織學(xué)報(bào),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;
章編號(hào):1007-757X(2016)04-0071-03
TP311
A
(2015.09.07)
陳 郁(1977-),男,香港TPC(HK)三維軟件開發(fā)公司,技術(shù)總監(jiān),法國里爾科技大學(xué)博士,研究方向:圖像識(shí)別與處理,上海,200030