第226期 / August 5, 2016

分享到臉書!分享到維特!分享到噗浪!分享到Google+!分享到微博!轉寄友人友善列印

人體輪廓偵測研究

作者/陳秀勇

[發表日期:2016/8/5]

摘要
  
由於現在資訊發達,網路行銷、電子商務的興起,越來越多的商品人們已經不太需要親自出門去取得商品,但對於穿著衣物,由於因為人們因為健身、飲食不均衡、缺乏運動、成長等等因素導致身形改變,常常發生訂購衣物後與體型不合需要更換或退貨的事件發生,導致大部分在購買衣物通常都是親自逛街或親自去店家訂製,如果能利用數位方式能取得身體各部位的資訊,則能減少在網路上訂製衣物時不合身的問題,甚至訂製西裝也能夠在網購實現.
  
然而數位測量技術事實上已經有不少商品出現,如體脂測量、脈搏檢測等等,但要用數位的方式取得人體數據是非常困難的,較準確的方式一般來說是利用數位攝影,並搭配眾多測量儀器才能精準的測出詳細的人體數據,如果有能讓一般民眾能利用手邊有的工具能取得身體的數據,就能大大減少網路購買後須更換或退貨的情況發生,本篇文章的目的,希望能根據人體實際上各部位的數據,計算得出人體輪廓的數學函數,達到在從照片上(手機照相機等)畫出人體輪廓以及標示出頭頂、肩膀、腰部、腳部、手部、前後胸的位置,並能應用在測量上面

reference

一、線性&非線性回歸

線性回歸和非線性回歸是一種線性(一次)或非線性(N次方,指數)函數對一個因變量自變量之間關係進行建模的一種回歸分析,若只有一個自變量的情況稱為簡單回歸,大於一個自變量的情況稱為多元回歸。
  
在線性或非線性回歸,我們可以利用線性或非線性預測函數進行建模,本篇文章需求為計算人形輪廓數學函數,把人體輪廓拆分為幾種不同部位(頭頂、肩膀、腰部、腳部、手部、前後胸),針對這些部位分別預測不同的線性或非線性函數擬和,理論上,若存在預測函數,假設給定隨機樣本,,可列出XY關係式為:,考慮到誤差(誤差越小擬和度越高)可得到XY關係式為:為誤差項。

二、最小平方法(Carolus Fridericus Gauss)

最小平方法是一種數學優化技術。它通過最小化誤差的平方和尋找數據的最佳函數匹配。用最小平方法可以簡便地求得未知的數據,並使得這些求得的數據與實際數據之間誤差的平方和為小。最小平方法還可用於曲線擬合。一些優化問題也可通過最小化能量或最大化熵用最小平方法來表達。

假設某一變量 或多個變量構成一個函數q個獨立變量或p個係數去擬合。

通常人們將一個可能的、對不相關變量t的構成都無困難的函數類型稱作函數模型(如拋物線函數或指數函數)。參數b是為了使所選擇的函數模型同觀測值y相匹配。(如在測量彈簧形變時,必須將所用的力與彈簧的膨脹係數聯繫起來)。其目標是合適地選擇參數,使函數模型最好的擬合觀測值。一般情況下,觀測值遠多於所選擇的參數。

其次的問題是怎樣判斷不同擬合的質量。假設測量誤差的平均值為0。令每一個測量誤差對應一個變量並與其它測量誤差不相關(隨機無關)。人們假設,在測量誤差中絕對不含系統誤差,它們應該是純偶然誤差(有固定的變異數),圍繞真值波動。除此之外,測量誤差符合常態分布,這保證了偏差值在最後的結果y上忽略不計。

確定擬合的標準應該被重視,並小心選擇,較大誤差的測量值應被賦予較小的權。並建立如下規則:被選擇的參數,應該使算出的函數曲線與觀測值之差的平方和最小。用函數表示為:


三、邊緣偵測(John F. Canny 1986)

目前較準確的邊緣偵測法為肯尼邊界偵測(John F. Canny 1986),邊緣偵測因為根據當下環境亮度變化、視差等等問題導致在邊界提取時提取到眾多不該提取的邊界,或沒有偵測到該有的邊界,若要友好的邊界則必須先處理好圖片使盡力去除噪音(noise),大致上的方法如以下步驟:

1.對原始數據與高斯模糊係數做卷積(convolution),使圖像模糊化,做此目的是因為可能細微的紋理或斑點所產生的噪音經過模糊化使在邊界提取時不讓這些噪音影響提取結果,



2.尋找亮度梯度:預防產生因光線變化造成顏色變化導致提出不該提出的邊界,canny算法會偵測每個邊緣生成的方向,得到原始圖的亮度梯度(光影變化和邊緣有關)。

3.在圖像中跟蹤邊緣:產生亮度梯度的的方有可能是邊緣,但是又不確定多大的亮度梯度才算是邊緣(有可能只是光影變化),在這裡canny使用了兩個閾值-高閾值和低閾值,假設圖像中的重要邊緣都是連續的曲線,這樣我們就可以跟蹤給定曲線中模糊的部分,並且避免將沒有組成曲線的雜訊(noise)像素當成邊緣。所以我們從一個較大的閾值開始,這將標識出我們比較確信的真實邊緣,使用前面導出的方向信息,我們從這些真正的邊緣開始在圖像中跟蹤整個的邊緣。在跟蹤的時候,我們使用一個較小的閾值,這樣就可以跟蹤曲線的模糊部分直到我們回到起點,最後我們可以得到二值圖(黑白)得到圖像中的邊緣輪廓。

四、線性相關分析

線性相關分析是一種觀察變數與變數的相關度的方法,計算相關係數r判別兩個變數之間的相關程度。假設Y因變量,X是自變量,計算相關係數公式如下:


若r=0,則說明兩者不相關;
r=1,則說明兩者完全相關;
r>0,則說明兩者正相關;
r<0,則說明兩者負相關。
至於相關程度定義如下:
|r|0.95 則說明兩者顯著性相關;
0.95>|r|0.8 高度相關;
0.5|r|<0.8 則說明兩者中度相關;
0.3|r|<0.5 則說明兩者低度相關;
|r|<0.3 則說明兩者關係極弱,可視為不相關

人體輪廓

人體輪廓我們考慮到每個計算的部位(頭頂、肩膀、腰部、腳部、手部、前後胸)都有不同的曲線,對於這些關鍵部為在這篇中分開計算各個部位的曲線方程式,然而非線性擬和方程式計算過於複雜,且計算後的方程式不一定為最佳解,為了降低複雜度在這篇文章把各部位的座標取得後猜測擬和度較高的曲線再去計算方程式。做法如下:

根據70筆資料我們建立出各部位接近資料平均數值的3D模型(假設沒有特殊體型,如截肢、朱儒症等),提取外圍輪廓並轉換成平面座標系後,各部位輪廓的座標如下圖:


《圖一》人體正面輪廓以及個測量部為標示


一、正面

1.頭頂:


《圖二》頭部輪廓

  
利用程式求趨勢線,觀察得出2次函數最符合:,頭頂為此拋物線之頂點,計算後得出頭頂座標約為:(70,-19)。

2.腳部:


《圖三》腳步輪廓


底部的頂點因為站立姿勢中,頭部頂點與腳後跟的位置才會呈現直線與地面垂直(若腳趾的位置,到頭頂的直線並不會與地面呈垂直),因此我們選擇腳後跟部分的座標並做出趨勢線,,然而腳底座標與頭頂座標的向量應該垂直於地面,因此帶入頭頂的X座標後計算出腳底座標為(70,72)。

3.肩膀:


《圖四》肩膀輪廓


利用程式求趨勢線,觀察得出5次函數最符合:,肩膀的位置會在最外側的反曲點,通過二次為分計算,並選取最外側的反曲點,得出肩膀座標約為(77,-54),同理也可得到左肩的座標。

4.腰部:


《圖五》腰部輪廓


利用程式求趨勢線,觀察得出2次函數最符合:,經一次微分解出X的最小值約為-34.5 得到此點的座標為(70,-34),另一側同樣的方法取得座標,這是為了取得腰寬(水平距離)的最大值。

5.手部:


《圖六》手部輪廓


手部的部分,在理想的情況下(假設手指伸直,手臂張開45度角),X座標的極大極小座標即為手部端點座標,但對於衣著上,我們希望袖長的部分長度約到手腕部為加上1~2吋長度的緩衝值,求得上緣的趨勢線後從端點沿著趨勢線移動約身高的1/10(人體比例約手掌長度)作為人體輪廓手腕的座標。

6.臀部:


《圖七》臀部輪廓


利用程式求趨勢線,觀察得出2次函數最符合:,一次微分後取X的最小值得出座標,同理可得出另一側臀部座標(37,-58),這是為了取得臀寬(水平距離)最大值。

7.左右胸:


《圖八》胸部輪廓


左右胸的偵測位置,在腋下略下方的位置,因此在抓取腋下周圍的輪廓後,偵測出腋下的位置略下方的邊緣即可,利用程式得到趨勢線,觀察出2次方程式最符合:,一次微分後得到頂點座標約為 (88,-42),同理可得另一側胸的座標。

二、側面


《圖九》人體側面輪廓以及個測量部為標示


在正面照中,我們已經取得頭頂的座標,對應到3D模型的三圍座標後,為了讓側面照的共同部位的座標一致(三維座標相同:頭頂、腳底,Y座標相同(高度):胸圍、腰圍、臀圍),選定對應到頭頂的三維座標的y軸選轉,得到側面照圖形。

1.頭部,腳部

因為這兩點座標在旋轉軸上,因此經過旋轉後座標不變,因此與正面照相同,頭頂座標:(70,-19),腳底座標:(70,72)

2.前後胸


《圖十》前胸輪廓


在正面照中我們已經取得左右胸的座標,由於是y軸旋轉(Y座標不變,代表高度不變),因此對照正面照的左右胸Y座標後(y=-42)可得到前胸座標約為(48,-42),同樣的方法可以得到後胸的座標。

3.前後腰(肚,背)


《圖十一》腰部(肚)輪廓


同前,對照正面照的腰部y座標後(y = -34),可得到側面照前腰的座標約為(39,-34),同理可得後腰的座標。

4.前後臀


《圖十二》前擋輪廓


同前,對照正面照的臀部y座標後(y = -58),可得到側面照前腰的座標約為(46,-58),同理可得後臀部的座標。

投影

從拍攝的照片中,利用邊緣偵測(Canny Edge Detector),提取邊界後,將不必要的邊界以及雜點(斑紋、內部點等等)去除後,把人體輪廓上要測量的部位座標(三)內部投影至最近的點,再比對實際上的頭頂和腳部的座標並調整x座標,即可找出實際上的人體上實際的測量部為座標。

計算各部位數據

人體各部位的曲線圖以及為了得到較精確的數據,必須要求用戶提供的照片須滿足以下的條件:

1.用戶拍攝照片是符合要求的。(正照:拍攝雙手張開45度,人和相機角度與地面垂直,人和相機所在的地面高度相同,整個人體要在照片中;測照:人和相機角度與地面垂直,人和相機所在的地面高度相同)

2.照片裡人所穿著的衣物是貼緊人體

3.照片的背景與人體的膚色衣物顏色不相似

4.照片裡的用戶人體輪廓必須盡力在預設人體輪廓內部

5.用戶必須提供身高數據

6.用戶必須卸下身上的所有飾品(如手錶、項鍊等等)

在上述的前提下,計算的方式為:

1.取得測量部為的座標(根據pixel取得座標)

2.計算頭頂與腳部座標的距離,並根據用戶提供的身高計算出實際數值與照片身高的比例,計算實際的值(非實際值)

3.根據蒐集的數據,建立得到實際個部位衣服所需要的計算公式,換算出各部位的實際值,在這篇文中客戶提供樣本數目共79筆,下列為樣本中前20筆數據:


一、肩寬

通過上述方式,我?求解的肩寬為直線寬度,實際上衣服所需的肩寬,必須考慮到肩膀的彎曲度(並非肩膀高度,是指肩膀繞至背後至另一肩膀之間並非直線),令肩膀直線肩寬定義為JK,服裝訂製時的肩寬定義為DJK。

我們假設肩膀曲度相關指標為身高,體重,BMI,以及照片測出來的肩寬(根據實際身高和照片中的身高求出比例,根據比例把照片中的兩肩膀的水平距離轉換為實際直線距離)。

利用excel相關分析性分析,得到下列表格數據:



通過表格發現,服裝訂製肩寬DJK和JK,TZ,BMI,SG指標正相關,其中DJK和JK,TZ,BMI有很高的相關度,因此可以通過對JK,TZ,BMI這三個指標做回歸計算DJK,對樣本數據回歸得到公式為:DJK=JK*0.719+TZ*0.074+BMI*0.184+6.674



測量出後與實際誤差都在1公分內,小於肩寬的0.25%。

二、衣長

衣長我們假設與身高,體重,BMI相關(因衣長考慮到客戶的胸圍,肩膀,腰圍的弧度,因此會產生誤差,若再考慮使用偵測出的肩膀位置和臀部位置(有誤差),會使誤差更大,因此決定若非遇到特殊體型,參照人體工學利用身高與上半身有著一定比例,因此直接利用身高去回歸得出公式),利用excel相關分析性分析,得到下列表格數據:



通過表格發現,衣長YC和SG,TZ,BMI指標正相關,其中YC和SG有很高的相關度,TZ有中度相關,因此可以通過對SG,TZ這兩個指標做回歸計算YC,對樣本數據回歸得到公式為:YC=SG*0.2807-TZ*0.1411+18.1935



測量出後與實際誤差都在1公分內,小於衣長的0.15%。

三、袖長

袖長由於偵測點為手指與肩膀,我們希望袖長的長度約在肩膀到手掌的一半位置,參照人體工學(手指和手腕距離比手腕至肩膀比約為1:2.5)計算猜測手腕大略位置,為了讓袖長長度足夠使袖口至手掌處,在換算後的長度約增加兩吋,得到袖長。



測量出後與實際誤差都在1公分內,小於袖長的0.15%。

四、胸圍

我們假設胸圍相關指標為照片測出來的胸寬(根據實際身高和照片中的身高求出比例,根據比例把正面照片中的左右胸間的水平距離轉換為實際直線距離)和胸厚(根據實際身高和照片中的身高求出比例,根據比例把側面照片中的前後胸間的水平距離轉換為實際直線距離)。

過對XK,XH這兩個指標做回歸計算TXW,對樣本數據回歸得到公式為:TXW=XK*1.975+XH*1.499-3.554



測量出後與實際誤差都在1.5公分內,小於胸圍的0.15%。

總結


在我們的方法中,程式計算出來的數據是否真的與實際上的數據相近,最關鍵在於兩處:

1.用戶所提供的照片規格是否理想(如手臂是否張開足夠的角度方便辨識、照相機的角度和高低差、用戶站立的角度等等)

2.偵測出的各部位座標正確

第一點若差異太多,因為計算公式的前提是照片是理想的,因此若客戶拍攝的方法不夠理想,算出來的數據會有所偏差,至於第二點雖然已經讓客戶在拍攝時必須被包含於人形框架增加偵測的限制,但若客戶的衣著膚色若與背景太相似不利於邊界偵測時,程式偵測出來的各部位座標誤差也會更大,對於這些情況若假設用戶非特殊體型,只能通過人體工學計算人體比例的方式偵測數據是否合理,若不合理則要求客戶重新提供照片。

希望能改進的方案針對對於第一點的情況:這些狀況根據測試每次提供照片發生的機率約50%,代表能夠一次滿足我們的需求其實是不容易的,日後希望能做更多的測試,解決若用戶所提供的照片有高低差,站姿沒有完全正面對相機時能有判別方式(如高低差可利用照片上人體的比例判別),以及能有數據測試並能補這些誤差。