張洪偉,李捍東
(貴州大學(xué) 電氣工程學(xué)院,貴陽(yáng) 550025)
三維人體測(cè)量,是通過(guò)對(duì)人體各部位的尺寸和人體體型進(jìn)行測(cè)量,進(jìn)而研究人體形態(tài)特征技術(shù)的方法。近年來(lái)國(guó)內(nèi)外相關(guān)研究機(jī)構(gòu)已經(jīng)推出多種不同類別和型號(hào)的三維人體測(cè)量系統(tǒng)。
突出的前沿研究有:云從科技公司提出的基于單幀圖像3D人體重建技術(shù),在Human3.6M、Surreal和UP-3D三個(gè)數(shù)據(jù)集上,將原有最低誤差降低30%,提高了后期三維測(cè)量的精確性。德國(guó)的VITUS SmartXXL掃描儀,基于激光光學(xué)三角測(cè)量,是目前較為精確的無(wú)接觸人體測(cè)量方式。R.Nakamura[1]開發(fā)了一種新的VFR,利用兩種Kinects進(jìn)行身體測(cè)量和尺寸估計(jì),可以獲得更準(zhǔn)確的測(cè)量結(jié)果。萬(wàn)燕[2]提出一種利用Kinect實(shí)現(xiàn)掃描,三維重建技術(shù)建立一個(gè)新的人體成分分析系統(tǒng)。但此種方法存在環(huán)境的干擾,影響重建信息提取的問(wèn)題,進(jìn)而會(huì)影響人體成分分析的精確性。Tomi B、Sunar MS[3]提出基于角度算法和橢圓周長(zhǎng)方程處理及VFR技術(shù),實(shí)現(xiàn)動(dòng)態(tài)測(cè)量各種人體尺寸。但此方法存在計(jì)算量大,測(cè)量速度慢的特點(diǎn)。Dan song[4]提出了語(yǔ)義參數(shù)化模型實(shí)現(xiàn)重構(gòu),通過(guò)比較PCA權(quán)重反映和三角形變形映射的x/y/z三個(gè)方向上的誤差,得出了參數(shù)化的重構(gòu)有更高的精度。但提出學(xué)習(xí)的機(jī)制不夠完善,對(duì)身體參數(shù)重構(gòu)有一定影響。Grant M.Tinsley[5]對(duì)比分析了四個(gè)商用三維光學(xué)掃描儀(FIT3D、NakedLabs、SizeStream和Styku)來(lái)確定人體成分估計(jì)的精度,并參考4分量(雙能X射線吸收儀、空氣體積、體積描記法、生物阻抗譜)模型,相比評(píng)估其有效性。得出結(jié)論是:所有掃描儀均存在不同幅度比例的偏差。Tan Xiaohui[6]通過(guò)深度相機(jī)來(lái)獲取3D人體模型,然后通過(guò)測(cè)地距離的隨機(jī)森林回歸分析,自動(dòng)提取3D人體焦點(diǎn)特征的方法,用于提取預(yù)定義的特征點(diǎn)和線,最后根據(jù)這些特征點(diǎn)和線計(jì)算出人體個(gè)體的大小。但此種方法在計(jì)算圍度上精確度不夠高。
目前,對(duì)人體尺寸測(cè)量的系統(tǒng)和方法可分為以下幾個(gè)方面:
(1)根據(jù)用戶輸入的數(shù)據(jù),建議所選服裝的最佳合身尺寸或生成人體的3維模型,部分電商平臺(tái)已經(jīng)在使用這種方法[7]。
(2)通過(guò)深度運(yùn)動(dòng)傳感器[8-9](例如Kinect),該傳感器允許系統(tǒng)檢測(cè)用戶的身體。在虛擬環(huán)境中生成的3D模型,跟隨用戶運(yùn)動(dòng),從而獲得身臨其境的體驗(yàn)。
(3)使用網(wǎng)絡(luò)攝像頭技術(shù)捕獲用戶的圖像。用戶選擇衣服的圖像將被覆蓋在捕獲用戶圖像的頂部,當(dāng)覆蓋衣服圖像的尺寸和用戶的圖像相同時(shí),可以確定最佳適合尺寸。
(4)通過(guò)激光雷達(dá)進(jìn)行人體掃描,獲取點(diǎn)云數(shù)據(jù)[10-12]。用深度學(xué)習(xí)對(duì)原始獲取的點(diǎn)云進(jìn)行處理,利用多層感知網(wǎng)絡(luò)(MLPS)和最大池化操作獲取點(diǎn)云的特征,根據(jù)點(diǎn)云進(jìn)行尺寸計(jì)算。
本文基于以上研究,提出一種基于Python下,對(duì)完善的點(diǎn)云模型用PCL庫(kù)拾取大量三維點(diǎn)坐標(biāo),采用改進(jìn)的積分法計(jì)算尺寸。結(jié)果表明,所提方法測(cè)量三維尺寸的精確性較高。
測(cè)量方法具體結(jié)構(gòu)如圖1所示。對(duì)輸入的圖像進(jìn)行仿射度量校正,校準(zhǔn)若有偏差,需重新進(jìn)行仿射校正,然后通過(guò)透視幾何反推,實(shí)現(xiàn)點(diǎn)云重建[13]。重建模型輸入到Geomagic Studio軟件中進(jìn)行降噪處理,處理后的模型基于PCL拾取三維點(diǎn)云坐標(biāo),對(duì)點(diǎn)云坐標(biāo)進(jìn)行轉(zhuǎn)換和計(jì)算,求解出各部分的尺寸。
圖1 Python下三維尺寸測(cè)量的系統(tǒng)框架Fig.1 System framework of 3D size measurement under Python
獲取圖像的硬件設(shè)備為手機(jī)自帶的6 400萬(wàn)超感光攝像頭。相比于一些專業(yè)的深度相機(jī)結(jié)構(gòu)光(Structured-light)具有成本低、適用性更強(qiáng)的優(yōu)點(diǎn)。獲取的圖像如圖2所示。
圖2 圖像與棋盤格校準(zhǔn)Fig.2 Image and checkerboard calibration
獲取的圖像手持棋盤格,棋盤格處于垂直地面的狀態(tài),肩部放松自由向下,這有利于測(cè)量校準(zhǔn)相機(jī)圖像世界坐標(biāo)系,以及后期肩部長(zhǎng)度距離的測(cè)量。
對(duì)獲取的圖像經(jīng)過(guò)處理后,得到完善的點(diǎn)云模型,如圖3所示。該研究對(duì)特征點(diǎn)的選擇采用基于代數(shù)的特征提取方法,將人體主要分割為3個(gè)部分:手臂、主要軀干、雙腿,如圖4所示。由得到的點(diǎn)云數(shù)據(jù)映射特征部位的最高點(diǎn)和最低點(diǎn)或投影點(diǎn),直接利用代數(shù)的關(guān)系來(lái)確定部位的長(zhǎng)度,此種方法更適合于對(duì)長(zhǎng)度的測(cè)量。如人體身高的測(cè)量就可以按照建立的三維坐標(biāo)系,以z坐標(biāo)軸將點(diǎn)云數(shù)據(jù)從大到小進(jìn)行排序,最大值即為頭部PH(xH,yH,zmax),最小值為足底PF(xF,yF,zmin),則身高為:
圖3 三維點(diǎn)云模型Fig.3 3D point cloud model
圖4 特征部位分割Fig.4 Feature segmentation
將上述完善好的點(diǎn)云模型輸入到基于PCL實(shí)驗(yàn)平臺(tái)上,得到大量的空間點(diǎn)云坐標(biāo)。以z軸為參考軸,同一等高面上的點(diǎn),按照平行于xo y面篩選排序的方法,把面上的所有點(diǎn)插入到一個(gè)鏈表中。當(dāng)選取的特征點(diǎn)在某一高度上時(shí),從鏈表中提取出所有z坐標(biāo)值相同的點(diǎn),組成一個(gè)點(diǎn)集,以平行于xo y面圓形模板法包裹點(diǎn)云面,最終可以確定圍度的截面圖,運(yùn)用改進(jìn)的積分法和特征頂點(diǎn)式,分別計(jì)算尺寸。
點(diǎn)云數(shù)據(jù)的量化方法[2]如下所述:
(1)獲取視角值。相機(jī)的水平視角α和垂直視角β分別為57°和43°,如圖5、圖6所示。
圖5 水平視角Fig.5 Horizontal perspective
圖6 垂直視角Fig.6 Vertical viewing angle
(2)求取實(shí)際值x和y:
其中,xi和yi分別為實(shí)際物理空間里點(diǎn)在x軸方向和y方向上的坐標(biāo)值;xi0和yi0分別為深度圖像空間里的坐標(biāo)值;nx和ny分別為攝像頭的分辨率系數(shù)。
轉(zhuǎn)換后的點(diǎn)云基于PCL進(jìn)行處理,獲得點(diǎn)云數(shù)據(jù)點(diǎn)的坐標(biāo)值。研究調(diào)查中,如果只獲取關(guān)節(jié)處的三維坐標(biāo)值用來(lái)實(shí)現(xiàn)人體尺寸的精確測(cè)量是遠(yuǎn)遠(yuǎn)不夠的。該研究結(jié)合關(guān)節(jié)點(diǎn)和選取的特征點(diǎn)進(jìn)行數(shù)據(jù)的融合和篩選,分別計(jì)算圍度和長(zhǎng)度。
長(zhǎng)度的計(jì)算相對(duì)較為簡(jiǎn)單。獲取關(guān)節(jié)處的空間點(diǎn)云信息后,表示出關(guān)節(jié)點(diǎn)的空間位置,兩關(guān)節(jié)點(diǎn)之間的距離為長(zhǎng)度。同時(shí)據(jù)上述特征點(diǎn)的選擇方法,兩特征點(diǎn)之間的距離計(jì)算長(zhǎng)度,結(jié)合兩方法多次計(jì)算的值求解協(xié)方差,最穩(wěn)定的值為確定的尺寸。
對(duì)尺寸的測(cè)量采用了GB/T 5703-2010人體測(cè)量的基礎(chǔ)項(xiàng)目測(cè)量術(shù)語(yǔ)作參考[14]。如本文重點(diǎn)測(cè)量的項(xiàng)目有肩寬:兩肘部外側(cè)面間的最大水平距離;胸圍:在乳頭水平位置測(cè)量的胸部圍長(zhǎng);腰圍:在最下肋骨和上髂嵴中間處的軀干水平圍長(zhǎng)。根據(jù)建立的坐標(biāo)軸,左右手肘突出兩點(diǎn)關(guān)節(jié)處坐標(biāo)為p1(x1,y1,z1),p2(x2,y2,z2)故肩最大寬:
對(duì)人體周長(zhǎng)的測(cè)量,依據(jù)[15-17]提到的算法進(jìn)行改進(jìn)。特征點(diǎn)所在的水平面與人體的交點(diǎn)集合為P={pi=(xi,yi,zi),i=1,2,…,n},由幾何特征點(diǎn)確定水平截面,故特征面上的交點(diǎn)集z的坐標(biāo)視為相等,其特征點(diǎn)集面如圖7所示。特征截面與空間坐標(biāo)系中xoy面平行,以腰圍截面的幾何中心為坐標(biāo)原點(diǎn)建立坐標(biāo)系,在坐標(biāo)系中確定各個(gè)點(diǎn)的坐標(biāo)為M={mi(xi,yi),i=1,2,…,n},那么點(diǎn)1與點(diǎn)2之間的長(zhǎng)度計(jì)算可以采用改進(jìn)的積分法。用類似的方法計(jì)算3與4之間長(zhǎng)度,依此方法把每一次計(jì)算的結(jié)果實(shí)現(xiàn)累加。
圖7 腰圍截面點(diǎn)集Fig.7 Waist section point set
改進(jìn)算法如下:
(1)從鏈表中篩選出位于腰圍所在特征截面上的坐標(biāo)點(diǎn),以外圍最遠(yuǎn)的點(diǎn)用圓面模板包裹,構(gòu)成腰圍點(diǎn)集面,確定相鄰兩點(diǎn)之間的坐標(biāo)值。如獲取點(diǎn)1與點(diǎn)2的坐標(biāo),在x軸上分別對(duì)應(yīng)a、b;若當(dāng)選擇的1、2點(diǎn)處存在密集的點(diǎn)云時(shí),采用線性回歸方程y-=b x+a計(jì)算,選擇最貼近直線的點(diǎn)計(jì)算。
(2)通過(guò)1、2之間無(wú)數(shù)的點(diǎn)擬合,確定曲線的函數(shù)f(x)。
(3)將區(qū)間[a,b]分割成n個(gè)子區(qū)間,每個(gè)子區(qū)間的弧長(zhǎng)可以用公式(5)計(jì)算:
其中,xi為第i個(gè)區(qū)間內(nèi)的任意一點(diǎn),i=1,2,…,n。
(4)總長(zhǎng)度等于各個(gè)子區(qū)間的和:
(5)當(dāng)分割的區(qū)間n為很大時(shí),點(diǎn)1與點(diǎn)2之間的距離為:
(6)依次計(jì)算點(diǎn)3,4…距離,得出測(cè)量結(jié)果。
此次實(shí)驗(yàn)在Ubuntu 16.04上進(jìn)行,開發(fā)語(yǔ)言為Python2,OpenCV的版本為2.4.13.6,集成開發(fā)環(huán)境為PyCharm;硬件環(huán)境為CPU intel Core i5四核,主頻2.40 GHz。
用XYB-1 88號(hào)人臺(tái),驗(yàn)證提出算法的有效性。分別測(cè)量胸圍、腰圍、總肩寬,操作過(guò)程如下:
(1)將實(shí)驗(yàn)的人臺(tái)固定在操作臺(tái)上,人臺(tái)處于垂直于地面的水平面上,便于距離的校準(zhǔn)。
(2)用相機(jī)獲取人臺(tái)的圖像。對(duì)圖片處理后輸入到Geomagic Studio進(jìn)行降噪處理,結(jié)果如圖8所示。
圖8 去噪處理后模型Fig.8 Model after denoising
(3)國(guó)標(biāo)88號(hào)人臺(tái)尺寸數(shù)據(jù)見表1。
表1 88號(hào)人臺(tái)上半身立載標(biāo)準(zhǔn)尺碼表Tab.1 The standard size chart for the upper body of the 88th person cm
(4)所提方法對(duì)人臺(tái)進(jìn)行測(cè)量后,得到數(shù)據(jù)見表2。
表2 本文方法測(cè)量的數(shù)據(jù)Tab.2 Data measured by this method cm
對(duì)88號(hào)人臺(tái)模型進(jìn)行多次試驗(yàn)測(cè)量,測(cè)出的數(shù)據(jù)和標(biāo)準(zhǔn)人臺(tái)的尺碼表進(jìn)行對(duì)比,得出誤差最大的是腰圍1.28,誤差最小的是肩寬0.16。顯然所提方法精確性比較高,測(cè)量速度較快,可以適用于實(shí)際的測(cè)量。
基于人臺(tái)模型測(cè)量的適用性,對(duì)15名男女進(jìn)行了尺寸的實(shí)際測(cè)量。在Ubuntu系統(tǒng)下基于Python實(shí)現(xiàn)了上述算法,根據(jù)計(jì)算速度和人體尺寸精度考慮,每?jī)牲c(diǎn)云坐標(biāo)之間分割為20個(gè)子區(qū)間去計(jì)算。選取總共15名男女進(jìn)行了三維尺寸的反復(fù)試驗(yàn)測(cè)量。同時(shí)利用基于Kinect測(cè)量技術(shù),對(duì)15名男女進(jìn)行三維尺寸的掃描測(cè)量,結(jié)果對(duì)比分析,兩方法的測(cè)量值見表3~5。
表3 本文算法測(cè)量結(jié)果Tab.3 The measurement results of the algorithm in this paper cm
表4 Kinect掃描測(cè)量結(jié)果Tab.4 Kinect scan measurement results cm
表5 測(cè)量誤差對(duì)比Tab.5 Measurement deviation comparison cm
經(jīng)對(duì)比結(jié)果可以看出,最大偏差是腰圍2.16 cm,最小偏差為臂長(zhǎng)0.04 cm,平均的偏差為0.70 cm。綜合來(lái)看,本文提出的方法測(cè)量三維尺寸效果較好。出現(xiàn)腰圍誤差比較大的原因是,根據(jù)特征點(diǎn)選擇確定的腰圍特征截面不準(zhǔn)確、對(duì)兩點(diǎn)云坐標(biāo)之間的分割太少,以及人體表面結(jié)構(gòu)的不規(guī)則,均會(huì)對(duì)測(cè)量的結(jié)果帶來(lái)一定影響。
本文提出了一種基于Python下,對(duì)相機(jī)獲取的圖像經(jīng)過(guò)一系列處理后,結(jié)合PCL和改進(jìn)的積分法、特征頂點(diǎn)式,對(duì)人體三維尺寸的圍度和長(zhǎng)度測(cè)量計(jì)算。最后通過(guò)實(shí)驗(yàn)與Kinect掃描測(cè)量結(jié)果進(jìn)行對(duì)比分析。結(jié)果表明,本文的方法有更好的適用性。進(jìn)一步的研究將在尺寸測(cè)量算法的改進(jìn)和選取合適特征點(diǎn)確定特征截面的方法進(jìn)行。