国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

人體運(yùn)動(dòng)捕捉數(shù)據(jù)格式的研究*

2018-02-12 00:46強(qiáng)
關(guān)鍵詞:數(shù)據(jù)格式骨骼人體

陳 燕 王 強(qiáng)

(安徽新華學(xué)院 安徽合肥 230088)

運(yùn)動(dòng)捕捉技術(shù)(motion capture)在計(jì)算機(jī)動(dòng)畫、影視、游戲等領(lǐng)域已得到廣泛的應(yīng)用,其實(shí)質(zhì)是通過(guò)在人體關(guān)鍵部位安裝運(yùn)動(dòng)捕捉裝置,實(shí)時(shí)捕捉真實(shí)人體運(yùn)動(dòng)狀態(tài),并記錄人體在運(yùn)動(dòng)過(guò)程中各個(gè)關(guān)節(jié)旋轉(zhuǎn)數(shù)據(jù)和約束信息,然后以一定的格式存儲(chǔ)在計(jì)算機(jī)中[1]。由于捕捉設(shè)備的原理不同,捕捉的數(shù)據(jù)存儲(chǔ)格式也不相同,主要有:ASF&AMC(acclaim skeleton file,acclaim motion capture data ), HTR (hierarchical translation rotation),BVH,C3D等。

由于捕捉的人體運(yùn)動(dòng)數(shù)據(jù)格式較多,造成數(shù)據(jù)段通用性不好,使得人體運(yùn)動(dòng)捕捉數(shù)據(jù)的成本還較高。唐琛實(shí)現(xiàn)了OGRE描述的運(yùn)動(dòng)數(shù)據(jù)文件到BVH定義的動(dòng)畫文件的格式轉(zhuǎn)換[2]。文章在人體運(yùn)動(dòng)捕捉數(shù)據(jù)格式轉(zhuǎn)換方面做了新的探索,設(shè)計(jì)實(shí)現(xiàn)了一個(gè)工具HTA(HTR to acclaim),HTA可以將輸入的HTR文件轉(zhuǎn)換為ASF&AMC文件。

1 結(jié)構(gòu)體定義

為實(shí)現(xiàn)人體運(yùn)動(dòng)捕捉數(shù)據(jù)格式的轉(zhuǎn)換,先定義緩存區(qū)域,以便保存所有輸入輸出的數(shù)據(jù)。本文設(shè)計(jì)結(jié)構(gòu)體:htrFormat和acclaimFormat,對(duì)應(yīng)HTR數(shù)據(jù)文件和ASF&AMC數(shù)據(jù)文件。

1.1 結(jié)構(gòu)體htrFormat

HTR文件是Motion Analysis公司定義的文件格式,被劃分為4個(gè)部分:文件頭、骨骼層次的聲明、基礎(chǔ)位置和數(shù)據(jù)流[3]。

HTR文件的緩存結(jié)構(gòu)體設(shè)計(jì)如下:

struct htrFormat {

char *fileTyPe; /*文件類型 */

char *datatype; /*數(shù)據(jù)類型 */

int fileVersion; /*文件版本*/

int numSegments; /*骨骼數(shù)*/

int numFrames; /*總幀數(shù)*/

int dataFrameRate; /*幀采樣速率 */

char *eulerRotationOrder; /*旋轉(zhuǎn)順序*/

char *calibrationUnits; /*平移的數(shù)據(jù)單位*/

char *rotationUnits; /*旋轉(zhuǎn)的數(shù)據(jù)單位*/

char *globalAxisofGravity; /*全局垂直方向*/

char *boneLengthAxis; /*沿骨骼的軸*/

float scaleFactor; /*縮放因子*/

struct htrSegmentHierarchy *childParent; /*層次*/

struct htrBasePosition *basePosition; /*基礎(chǔ)位置*/

struct htrSegmentData *segmentData; /*骨骼段數(shù)據(jù)*/

結(jié)構(gòu)體前12個(gè)成員變量對(duì)應(yīng)HTR文件頭部分,后3個(gè)成員變量為結(jié)構(gòu)體類型,負(fù)責(zé)記錄HTR文件中的骨骼層次的聲明、基礎(chǔ)位置和數(shù)據(jù)段信息。

1.2 結(jié)構(gòu)體acclaimFormat

ASF&AMC是Acclaim公司定義的數(shù)據(jù)格式,共包含兩個(gè)文件: 骨骼文件ASF和運(yùn)動(dòng)文件AMC[4]。ASF文件是層次模型文件,主要儲(chǔ)存人體骨架結(jié)構(gòu)數(shù)據(jù),共31個(gè)關(guān)節(jié)點(diǎn),其中根節(jié)點(diǎn)是其他節(jié)點(diǎn)的父節(jié)點(diǎn)。AMC文件用于儲(chǔ)存每一幀的運(yùn)動(dòng)數(shù)據(jù)。該運(yùn)動(dòng)數(shù)據(jù)按照一定的頻率進(jìn)行采樣得到若干運(yùn)動(dòng)幀數(shù)據(jù),每幀數(shù)據(jù)包含若干行,由所有關(guān)節(jié)的運(yùn)動(dòng)信息組成,其中根關(guān)節(jié)包括平移和旋轉(zhuǎn)信息,其它關(guān)節(jié)只包括旋轉(zhuǎn)信息,以一種分層的方式來(lái)存儲(chǔ)[5]。

acclaimFormat記錄ASF、AMC文件中的數(shù)據(jù),具體設(shè)計(jì)如下:

struct acclaimFormat {

char *version; /*文件版本*/

char *name; /*設(shè)備名稱 */

float unitsMass; /*質(zhì)量系數(shù)*/

float unitsLength; /*長(zhǎng)度系數(shù)*/

char unitsAngle[5]; /*角度*/

char * documentation; /*注釋 */

char rootOrder; /*根節(jié)點(diǎn)的變換順序*/

char rootAxis[5]; /*初始旋轉(zhuǎn)順序*/

double rootPosition[3]; /*初始位置*/

double rootOrientation[3]; /*初始旋轉(zhuǎn)值*/

struct acclaimBoneData * boneData; /*骨骼段數(shù)據(jù)*/

struct acclaimHierarchy *hierarchy; /*層次數(shù)據(jù)*/

struct acclaimFrameData *frameData; /*幀數(shù)據(jù)*/

};

acclaimFormat后3個(gè)成員變量為結(jié)構(gòu)體類型,分別記錄骨骼信息、骨骼層次關(guān)系和AMC文件中的數(shù)據(jù)。

2 HTR文件解析

結(jié)構(gòu)體定義后,數(shù)據(jù)格式的轉(zhuǎn)換首先要把已有的HTR數(shù)據(jù)文件寫到數(shù)據(jù)緩存中。定義結(jié)構(gòu)體htrFormat的變量htrFile和存放解析的標(biāo)記的指針數(shù)組token。

具體過(guò)程如下:

(1)打開(kāi)HTR文件;

(2)根據(jù)關(guān)鍵字[Header]找到文件頭部分。依次解析文件頭的12部分信息,保存到htrFile的相應(yīng)成員變量中,如FileTyPe的處理如下:

htrFile->fileType=(char *)malloc((strlen(token[1])+1)*sizeof(char)); /*分配內(nèi)存*/

strcpy(htrFile->fileType, token[1]); /*保存類型*/

(3)根據(jù)關(guān)鍵字[SegmentNames&Hierarchy]找到骨骼層次部分。首先根據(jù)骨骼段數(shù)分配所需的內(nèi)存,然后根據(jù)骨骼數(shù)目循環(huán)解析每一骨骼的層次信息并保存到htrFile的成員變量childParent中。childParent也是結(jié)構(gòu)體類型,由child和parent兩個(gè)成員變量來(lái)表明當(dāng)前骨骼和其父骨骼。

(4)根據(jù)關(guān)鍵字[BasePosition]找到基礎(chǔ)位置部分。根據(jù)骨骼數(shù)目循環(huán)解析每一骨骼的8種信息并保存到htrFile的成員變量basePosition中。basePosition也是結(jié)構(gòu)體類型,由name、boneLength、位置信息(tx、ty、tz)和旋轉(zhuǎn)信息(rx、ry、rz)。

(5)最后一部分為數(shù)據(jù)信息。根據(jù)骨骼段名稱依次解析每段骨骼的幀數(shù)據(jù),保存在htrFile的成員變量segmentData中。segmentData也是結(jié)構(gòu)體類型,由segmentName、frame組成,其中frame為結(jié)構(gòu)體類型變量,成員變量為幀號(hào)frameNo、平移信息(tx、ty、tz)、旋轉(zhuǎn)信息(rx、ry、rz)和縮放系數(shù)SF。

3 htrFormat到acclaimFormat

當(dāng)HTR文件中的數(shù)據(jù)寫入到內(nèi)存后,就可以移入acclaimFormat類型的結(jié)構(gòu)體變量acclaimFile中。過(guò)程如下:

(1)acclaimFormat的成員中是簡(jiǎn)單信息的可直接寫入,如:strcpy(acclaimFile->version,“1.10”)。

(2)根據(jù)htrFile->eulerRotationOrder決定的旋轉(zhuǎn)順序,在平移順序不變的情況下寫入acclaimFile->rootOrder和acclaimFile->rootAxis的值。將HTR文件的父節(jié)點(diǎn)作為根節(jié)點(diǎn)的孩子節(jié)點(diǎn),所以acclaimFile->rootPosition和acclaimFile-> rootOrientation均為0。

(3)對(duì)于boneData部分,其name、length、axis、dof可根據(jù)htrFile->basePosition的name、bonelength和旋轉(zhuǎn)旋轉(zhuǎn)信息(rx、ry、rz)寫入,direction由globalAxisofGravity決定,dofNumber、limits、bodyMass、cofMass根據(jù)情況直接賦值。

(4)對(duì)于層次部分,ASF是先列出父骨骼,再是所有的子骨骼,與HTR文件差別很大。所以,需要先求出有多少骨骼帶有子骨骼。先處理父節(jié)點(diǎn)為GLOBAL的節(jié)點(diǎn),添加其所有子節(jié)點(diǎn),然后再依次處理其他帶子節(jié)點(diǎn)的節(jié)點(diǎn)。

(5)對(duì)于運(yùn)動(dòng)數(shù)據(jù)部分,循環(huán)處理每一幀,幀數(shù)為htrFile->numFrames的值。先處理每幀的根節(jié)點(diǎn),其數(shù)據(jù)信息均為0。再處理其他骨骼數(shù)據(jù)(平移和旋轉(zhuǎn)),如:

acclaimFile->frameData.motionData.tx = htrFile-> segmentData.frame.tx;

4 ASF&AMC文件填充

文件轉(zhuǎn)換的最后一步就是把緩存中的數(shù)據(jù)填充到ASF&AMC文件中。

(1)根據(jù)ASF文件的結(jié)構(gòu)逐步將acclaimFile中的數(shù)據(jù)寫入其中,如:

fprintf(asfFileHandle,”:version %s n”, acclaimFile->version);

fprintf(asfFileHandle,”:root n”);

fprintf(asfFileHandle,” order %s n”, acclaimFile->rootOrder);

fprintf(asfFileHandle,”: bonedata n”).

(2)根據(jù)AMC文件的結(jié)構(gòu)逐步將acclaimFile中的運(yùn)動(dòng)數(shù)據(jù)寫入其中。依次處理各幀數(shù)據(jù):先寫入幀號(hào);再寫入根節(jié)點(diǎn)數(shù)據(jù);寫入本幀的骨骼數(shù)據(jù),包括骨骼名稱和根據(jù)自由度寫入的各個(gè)具體數(shù)據(jù)。

5 結(jié)論與展望

文章設(shè)計(jì)的人體運(yùn)動(dòng)捕捉數(shù)據(jù)格式工具HTA,能很好將HTR文件轉(zhuǎn)換為ASF&AMC文件。不過(guò)轉(zhuǎn)換只涉及到兩種格式,后期還需要對(duì)緩存結(jié)構(gòu)進(jìn)行改善,以設(shè)計(jì)一種能應(yīng)用在多種人體運(yùn)動(dòng)捕捉數(shù)據(jù)格式之間轉(zhuǎn)換的更泛化的緩存結(jié)構(gòu)。

參考文獻(xiàn):

[1]孫麗雅.基于運(yùn)動(dòng)捕捉數(shù)據(jù)的人體運(yùn)動(dòng)分割和標(biāo)注技術(shù)[D].北京:北京交通大學(xué),2015.

[2]Tan CH,Hou J,Chau LP. Human motion capture data recovery using trajectory-based matrix completion[J]. IET Electronic Letter,2013,49(12): 752.

[3]王德成,陳燕.基于HTR文件的人體動(dòng)畫的實(shí)現(xiàn)[J]. 西安文理學(xué)院學(xué)報(bào)(自然科學(xué)版),2014,17(3):63.

[4]于曉敏.數(shù)據(jù)驅(qū)動(dòng)的虛擬人運(yùn)動(dòng)分析與合成技術(shù)研究[D].北京:北京交通大學(xué),2017.

[5]杜戰(zhàn)戰(zhàn). 人體運(yùn)動(dòng)捕獲數(shù)據(jù)的分析方法研究[D].南京:南京理工大學(xué),2015.

猜你喜歡
數(shù)據(jù)格式骨骼人體
人體“修補(bǔ)匠”
人體冷知識(shí)(一)
做家務(wù)的女性骨骼更強(qiáng)壯
三減三健全民行動(dòng)——健康骨骼
人體可笑堂
奇妙的人體止咳點(diǎn)
益寶打造骨骼健康產(chǎn)業(yè)
MIT—BIH心率失常數(shù)據(jù)庫(kù)的識(shí)讀
基于RFID的戶外廣告監(jiān)管系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
一種融合多業(yè)務(wù)的信息化系統(tǒng)框架研究