張洪偉,李捍東
(貴州大學 電氣工程學院,貴陽 550025)
三維人體測量,是通過對人體各部位的尺寸和人體體型進行測量,進而研究人體形態特征技術的方法。近年來國內外相關研究機構已經推出多種不同類別和型號的三維人體測量系統。
突出的前沿研究有:云從科技公司提出的基于單幀圖像3D人體重建技術,在Human3.6M、Surreal和UP-3D三個數據集上,將原有最低誤差降低30%,提高了后期三維測量的精確性。德國的VITUS SmartXXL掃描儀,基于激光光學三角測量,是目前較為精確的無接觸人體測量方式。R.Nakamura[1]開發了一種新的VFR,利用兩種Kinects進行身體測量和尺寸估計,可以獲得更準確的測量結果。萬燕[2]提出一種利用Kinect實現掃描,三維重建技術建立一個新的人體成分分析系統。但此種方法存在環境的干擾,影響重建信息提取的問題,進而會影響人體成分分析的精確性。Tomi B、Sunar MS[3]提出基于角度算法和橢圓周長方程處理及VFR技術,實現動態測量各種人體尺寸。但此方法存在計算量大,測量速度慢的特點。Dan song[4]提出了語義參數化模型實現重構,通過比較PCA權重反映和三角形變形映射的x/y/z三個方向上的誤差,得出了參數化的重構有更高的精度。但提出學習的機制不夠完善,對身體參數重構有一定影響。Grant M.Tinsley[5]對比分析了四個商用三維光學掃描儀(FIT3D、NakedLabs、SizeStream和Styku)來確定人體成分估計的精度,并參考4分量(雙能X射線吸收儀、空氣體積、體積描記法、生物阻抗譜)模型,相比評估其有效性。得出結論是:所有掃描儀均存在不同幅度比例的偏差。Tan Xiaohui[6]通過深度相機來獲取3D人體模型,然后通過測地距離的隨機森林回歸分析,自動提取3D人體焦點特征的方法,用于提取預定義的特征點和線,最后根據這些特征點和線計算出人體個體的大小。但此種方法在計算圍度上精確度不夠高。
目前,對人體尺寸測量的系統和方法可分為以下幾個方面:
(1)根據用戶輸入的數據,建議所選服裝的最佳合身尺寸或生成人體的3維模型,部分電商平臺已經在使用這種方法[7]。
(2)通過深度運動傳感器[8-9](例如Kinect),該傳感器允許系統檢測用戶的身體。在虛擬環境中生成的3D模型,跟隨用戶運動,從而獲得身臨其境的體驗。
(3)使用網絡攝像頭技術捕獲用戶的圖像。用戶選擇衣服的圖像將被覆蓋在捕獲用戶圖像的頂部,當覆蓋衣服圖像的尺寸和用戶的圖像相同時,可以確定最佳適合尺寸。
(4)通過激光雷達進行人體掃描,獲取點云數據[10-12]。用深度學習對原始獲取的點云進行處理,利用多層感知網絡(MLPS)和最大池化操作獲取點云的特征,根據點云進行尺寸計算。
本文基于以上研究,提出一種基于Python下,對完善的點云模型用PCL庫拾取大量三維點坐標,采用改進的積分法計算尺寸。結果表明,所提方法測量三維尺寸的精確性較高。
測量方法具體結構如圖1所示。對輸入的圖像進行仿射度量校正,校準若有偏差,需重新進行仿射校正,然后通過透視幾何反推,實現點云重建[13]。重建模型輸入到Geomagic Studio軟件中進行降噪處理,處理后的模型基于PCL拾取三維點云坐標,對點云坐標進行轉換和計算,求解出各部分的尺寸。

圖1 Python下三維尺寸測量的系統框架Fig.1 System framework of 3D size measurement under Python
獲取圖像的硬件設備為手機自帶的6 400萬超感光攝像頭。相比于一些專業的深度相機結構光(Structured-light)具有成本低、適用性更強的優點。獲取的圖像如圖2所示。

圖2 圖像與棋盤格校準Fig.2 Image and checkerboard calibration
獲取的圖像手持棋盤格,棋盤格處于垂直地面的狀態,肩部放松自由向下,這有利于測量校準相機圖像世界坐標系,以及后期肩部長度距離的測量。
對獲取的圖像經過處理后,得到完善的點云模型,如圖3所示。該研究對特征點的選擇采用基于代數的特征提取方法,將人體主要分割為3個部分:手臂、主要軀干、雙腿,如圖4所示。由得到的點云數據映射特征部位的最高點和最低點或投影點,直接利用代數的關系來確定部位的長度,此種方法更適合于對長度的測量。如人體身高的測量就可以按照建立的三維坐標系,以z坐標軸將點云數據從大到小進行排序,最大值即為頭部PH(xH,yH,zmax),最小值為足底PF(xF,yF,zmin),則身高為:


圖3 三維點云模型Fig.3 3D point cloud model

圖4 特征部位分割Fig.4 Feature segmentation
將上述完善好的點云模型輸入到基于PCL實驗平臺上,得到大量的空間點云坐標。以z軸為參考軸,同一等高面上的點,按照平行于xo y面篩選排序的方法,把面上的所有點插入到一個鏈表中。當選取的特征點在某一高度上時,從鏈表中提取出所有z坐標值相同的點,組成一個點集,以平行于xo y面圓形模板法包裹點云面,最終可以確定圍度的截面圖,運用改進的積分法和特征頂點式,分別計算尺寸。
點云數據的量化方法[2]如下所述:
(1)獲取視角值。相機的水平視角α和垂直視角β分別為57°和43°,如圖5、圖6所示。

圖5 水平視角Fig.5 Horizontal perspective

圖6 垂直視角Fig.6 Vertical viewing angle
(2)求取實際值x和y:

其中,xi和yi分別為實際物理空間里點在x軸方向和y方向上的坐標值;xi0和yi0分別為深度圖像空間里的坐標值;nx和ny分別為攝像頭的分辨率系數。
轉換后的點云基于PCL進行處理,獲得點云數據點的坐標值。研究調查中,如果只獲取關節處的三維坐標值用來實現人體尺寸的精確測量是遠遠不夠的。該研究結合關節點和選取的特征點進行數據的融合和篩選,分別計算圍度和長度。
長度的計算相對較為簡單。獲取關節處的空間點云信息后,表示出關節點的空間位置,兩關節點之間的距離為長度。同時據上述特征點的選擇方法,兩特征點之間的距離計算長度,結合兩方法多次計算的值求解協方差,最穩定的值為確定的尺寸。
對尺寸的測量采用了GB/T 5703-2010人體測量的基礎項目測量術語作參考[14]。如本文重點測量的項目有肩寬:兩肘部外側面間的最大水平距離;胸圍:在乳頭水平位置測量的胸部圍長;腰圍:在最下肋骨和上髂嵴中間處的軀干水平圍長。根據建立的坐標軸,左右手肘突出兩點關節處坐標為p1(x1,y1,z1),p2(x2,y2,z2)故肩最大寬:

對人體周長的測量,依據[15-17]提到的算法進行改進。特征點所在的水平面與人體的交點集合為P={pi=(xi,yi,zi),i=1,2,…,n},由幾何特征點確定水平截面,故特征面上的交點集z的坐標視為相等,其特征點集面如圖7所示。特征截面與空間坐標系中xoy面平行,以腰圍截面的幾何中心為坐標原點建立坐標系,在坐標系中確定各個點的坐標為M={mi(xi,yi),i=1,2,…,n},那么點1與點2之間的長度計算可以采用改進的積分法。用類似的方法計算3與4之間長度,依此方法把每一次計算的結果實現累加。

圖7 腰圍截面點集Fig.7 Waist section point set
改進算法如下:
(1)從鏈表中篩選出位于腰圍所在特征截面上的坐標點,以外圍最遠的點用圓面模板包裹,構成腰圍點集面,確定相鄰兩點之間的坐標值。如獲取點1與點2的坐標,在x軸上分別對應a、b;若當選擇的1、2點處存在密集的點云時,采用線性回歸方程y-=b x+a計算,選擇最貼近直線的點計算。
(2)通過1、2之間無數的點擬合,確定曲線的函數f(x)。
(3)將區間[a,b]分割成n個子區間,每個子區間的弧長可以用公式(5)計算:

其中,xi為第i個區間內的任意一點,i=1,2,…,n。
(4)總長度等于各個子區間的和:

(5)當分割的區間n為很大時,點1與點2之間的距離為:

(6)依次計算點3,4…距離,得出測量結果。
此次實驗在Ubuntu 16.04上進行,開發語言為Python2,OpenCV的版本為2.4.13.6,集成開發環境為PyCharm;硬件環境為CPU intel Core i5四核,主頻2.40 GHz。
用XYB-1 88號人臺,驗證提出算法的有效性。分別測量胸圍、腰圍、總肩寬,操作過程如下:
(1)將實驗的人臺固定在操作臺上,人臺處于垂直于地面的水平面上,便于距離的校準。
(2)用相機獲取人臺的圖像。對圖片處理后輸入到Geomagic Studio進行降噪處理,結果如圖8所示。

圖8 去噪處理后模型Fig.8 Model after denoising
(3)國標88號人臺尺寸數據見表1。

表1 88號人臺上半身立載標準尺碼表Tab.1 The standard size chart for the upper body of the 88th person cm
(4)所提方法對人臺進行測量后,得到數據見表2。

表2 本文方法測量的數據Tab.2 Data measured by this method cm
對88號人臺模型進行多次試驗測量,測出的數據和標準人臺的尺碼表進行對比,得出誤差最大的是腰圍1.28,誤差最小的是肩寬0.16。顯然所提方法精確性比較高,測量速度較快,可以適用于實際的測量。
基于人臺模型測量的適用性,對15名男女進行了尺寸的實際測量。在Ubuntu系統下基于Python實現了上述算法,根據計算速度和人體尺寸精度考慮,每兩點云坐標之間分割為20個子區間去計算。選取總共15名男女進行了三維尺寸的反復試驗測量。同時利用基于Kinect測量技術,對15名男女進行三維尺寸的掃描測量,結果對比分析,兩方法的測量值見表3~5。

表3 本文算法測量結果Tab.3 The measurement results of the algorithm in this paper cm

表4 Kinect掃描測量結果Tab.4 Kinect scan measurement results cm

表5 測量誤差對比Tab.5 Measurement deviation comparison cm
經對比結果可以看出,最大偏差是腰圍2.16 cm,最小偏差為臂長0.04 cm,平均的偏差為0.70 cm。綜合來看,本文提出的方法測量三維尺寸效果較好。出現腰圍誤差比較大的原因是,根據特征點選擇確定的腰圍特征截面不準確、對兩點云坐標之間的分割太少,以及人體表面結構的不規則,均會對測量的結果帶來一定影響。
本文提出了一種基于Python下,對相機獲取的圖像經過一系列處理后,結合PCL和改進的積分法、特征頂點式,對人體三維尺寸的圍度和長度測量計算。最后通過實驗與Kinect掃描測量結果進行對比分析。結果表明,本文的方法有更好的適用性。進一步的研究將在尺寸測量算法的改進和選取合適特征點確定特征截面的方法進行。