專利名稱:運(yùn)動(dòng)捕獲數(shù)據(jù)壓縮、解壓縮方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種運(yùn)動(dòng)捕獲數(shù)據(jù)壓縮、解壓縮方法。
背景技術(shù):
運(yùn)動(dòng)捕獲數(shù)據(jù)由于具有能夠體現(xiàn)運(yùn)動(dòng)細(xì)節(jié)特征,生成高度逼真性動(dòng)畫(huà)的優(yōu)點(diǎn),而在計(jì)算機(jī)動(dòng)畫(huà)和游戲開(kāi)發(fā)等領(lǐng)域得到了廣泛應(yīng)用,使得為了便于存儲(chǔ)和傳輸,對(duì)運(yùn)動(dòng)捕獲數(shù)據(jù)的高質(zhì)量高效率的壓縮成為了保證其應(yīng)用效果的關(guān)鍵技術(shù),現(xiàn)有技術(shù)中的對(duì)運(yùn)動(dòng)捕獲數(shù)據(jù)的壓縮方法如關(guān)鍵幀提取方法等均是有損壓縮,由于當(dāng)前使用的運(yùn)動(dòng)捕獲數(shù)據(jù)已是經(jīng)過(guò)關(guān)鍵幀提取技術(shù)處理過(guò)的數(shù)據(jù),采用有損壓縮方法,將會(huì)影響視覺(jué)效果,容易造成視覺(jué)誤差;現(xiàn)有技術(shù)中的通用無(wú)損數(shù)據(jù)壓縮方法由于不是針對(duì)運(yùn)動(dòng)捕獲數(shù)據(jù)這個(gè)特定數(shù)據(jù),所以不能有效和充分利用運(yùn)動(dòng)捕獲數(shù)據(jù)的特點(diǎn),從而取得的壓縮比不高,解壓縮時(shí)間長(zhǎng)。
發(fā)明內(nèi)容
本發(fā)明針對(duì)以上問(wèn)題的提出,而研制一種高質(zhì)、高效、無(wú)損的運(yùn)動(dòng)捕獲數(shù)據(jù)壓縮、解壓縮方法。一種運(yùn)動(dòng)捕獲數(shù)據(jù)壓縮方法,包括如下步驟A :設(shè)定運(yùn)動(dòng)捕獲數(shù)據(jù)包括由PosX, PosY, PosZ三列數(shù)據(jù)構(gòu)成的位移數(shù)據(jù)和由RotX,RotY,RotZ, ω四列構(gòu)成的旋轉(zhuǎn)數(shù)據(jù);P0SX、P0SY、P0SZ分別是運(yùn)動(dòng)捕獲數(shù)據(jù)的位置參數(shù);R0tX、R0tY、R0tZ、ω分別是運(yùn)動(dòng)捕獲數(shù)據(jù)的旋轉(zhuǎn)參數(shù);每列數(shù)據(jù)中的每個(gè)數(shù)據(jù)為32位浮點(diǎn)數(shù)據(jù);B :將32位浮點(diǎn)數(shù)據(jù)轉(zhuǎn)化為16位整數(shù)數(shù)據(jù)將PosX,PosY, PosZ每列數(shù)據(jù)的相鄰數(shù)據(jù)相減獲得32位浮點(diǎn)差值數(shù)據(jù);對(duì)32位浮點(diǎn)差值數(shù)據(jù)進(jìn)行量化形成16位整數(shù)數(shù)據(jù),得到每個(gè)數(shù)據(jù)為16位整數(shù)的PosX'PosY'PosZ"三列位移數(shù)據(jù);將RotX、RotY、RotZ、ω四列數(shù)據(jù)通過(guò)正交化處理得到正交數(shù)據(jù)RotX' ,RotYi、RotZ'、ω',對(duì)RotX' ,RotYi ,RotZi每列中的32位浮點(diǎn)數(shù)據(jù)進(jìn)行量化處理形成16位整數(shù)數(shù)據(jù),得到每個(gè)數(shù)據(jù)為16位整數(shù)的RotX"、RotY"、RotZ"三列旋轉(zhuǎn)數(shù)據(jù);C :對(duì)位移數(shù)據(jù)PosX"、PosY"、PosZ"或旋轉(zhuǎn)數(shù)據(jù)RotX"、RotY"、RotZw進(jìn)行數(shù)據(jù)預(yù)測(cè)處理,得到待編碼數(shù)據(jù);數(shù)據(jù)預(yù)測(cè)處理的步驟如下Cl :開(kāi)始,之后執(zhí)彳了 C2 ;C2 :設(shè)定數(shù)據(jù)預(yù)測(cè)處理的當(dāng)前數(shù)據(jù)為truevalue[i, j],其中Ki<m, KjSn;i是運(yùn)動(dòng)捕獲數(shù)據(jù)的列數(shù),j是運(yùn)動(dòng)捕獲數(shù)據(jù)的幀數(shù);設(shè)定數(shù)據(jù)預(yù)測(cè)處理得到的待編碼數(shù)據(jù)為 predata[i, j],執(zhí)行 C3 ;C3 :令 i=l,執(zhí)行 C4 ;C4 :令 j=l,執(zhí)行 C5 ;
C5 :判斷j是否等于1,是則執(zhí)行C6,否則執(zhí)行C7 ;C6 :將truevalue[i, I]寫(xiě)入到壓縮文件,設(shè)置jump[i, I]為O ;執(zhí)行C14 ;C7:設(shè)置dist[i, j]為當(dāng)前數(shù)據(jù) truevalue[i, j]與前一個(gè)數(shù)據(jù) truevalue[i, j_l]相減所獲得的差值數(shù)據(jù),設(shè)置執(zhí)行CS ;C8 :設(shè)置jump[i, j_l]為記錄的上一次差值數(shù)據(jù)的絕對(duì)值,設(shè)置predata[i, j]為dist[i, j]的絕對(duì)值與jump[i, j-1]異或運(yùn)算所獲得的數(shù)據(jù),執(zhí)行C9 ;C9 :判斷dist[i,j]是否小于敏感度閾值,是則執(zhí)行C10,否則轉(zhuǎn)至Cll ;ClO :設(shè)置jump[i, j]為dist[i, j]的絕對(duì)值并保存到內(nèi)存,執(zhí)行C12 ;Cll :設(shè)置 jump[i, j]為 jump[i, j-1]并保存到內(nèi)存,執(zhí)行 C12 ;C12 :判斷dist[i,j]是否小于0,是則執(zhí)行C13,否則轉(zhuǎn)至C14 ;C13 :設(shè)置符號(hào)位 isneg[i, j]為 1,執(zhí)行 C15 ;C14 :設(shè)置符號(hào)位 isneg[i, j]為 0,執(zhí)行 C15 ;C15 :將符號(hào)位isneg[i, j]寫(xiě)入壓縮文件和保存待編碼數(shù)據(jù)predata[i, j]到內(nèi)存,執(zhí)行C16 ;C16 :令 j=j+l,執(zhí)行 C17 ;C17 :判斷j是否大于n,是則執(zhí)行C18,否則返回C5 ;C18 :令 i=i+l,執(zhí)行 C19 ;C19 :判斷i是否大于m,是則執(zhí)行C20,否則返回C4 ;C20 :結(jié)束; D:對(duì)待編碼數(shù)據(jù)進(jìn)行編碼編碼的步驟如下Dl :將每個(gè)待編碼數(shù)據(jù)劃分為前綴零部分和殘留值部分;D2 :統(tǒng)計(jì)每個(gè)待編碼數(shù)據(jù)的前綴零長(zhǎng)度除以2后的長(zhǎng)度值的概率分布;D3 :根據(jù)統(tǒng)計(jì)后的概率分布對(duì)每個(gè)待編碼數(shù)據(jù)的前綴零長(zhǎng)度除以2后的長(zhǎng)度值進(jìn)行哈夫曼編碼并構(gòu)建碼表;所述碼表的每一項(xiàng)包括前綴零除以2的長(zhǎng)度值和其對(duì)應(yīng)的哈夫曼編碼;(根據(jù)您這次的改動(dòng)為先構(gòu)建碼表在根據(jù)碼表進(jìn)行哈夫曼編碼,因?yàn)榇a表中要存儲(chǔ)哈夫曼編碼所以調(diào)整為上述內(nèi)容)D4 :對(duì)哈夫曼編碼相同的連續(xù)的待編碼數(shù)據(jù)進(jìn)行行程長(zhǎng)度編碼;(由于行程長(zhǎng)度編碼和哈夫曼編碼一樣,編碼方法為現(xiàn)有技術(shù),所以省略其編碼方法)D5 :對(duì)前綴零長(zhǎng)度除以2后的長(zhǎng)度值編碼后得到的哈夫曼編碼相同的多個(gè)連續(xù)的待編碼數(shù)據(jù)設(shè)置成按照標(biāo)志位、行程長(zhǎng)度編碼、哈夫曼編碼和殘留值順序的編碼值寫(xiě)入壓縮文件;對(duì)連續(xù)的待編碼數(shù)據(jù)中前綴零長(zhǎng)度除以2后的長(zhǎng)度值編碼后得到的哈夫曼編碼唯一的每個(gè)待編碼數(shù)據(jù)設(shè)置成按照標(biāo)志位、哈夫曼編碼和殘留值順序的編碼值寫(xiě)入壓縮文件;一種運(yùn)動(dòng)捕獲數(shù)據(jù)解壓縮方法,包括如下步驟SI :開(kāi)始,之后執(zhí)彳了 S2 ;S2 :讀取碼表,解析數(shù)據(jù)得到待編碼數(shù)據(jù)predata[i,j],執(zhí)行S3 ;S3 :令 i=l,執(zhí)行 S4 ;
S4 :令 j=l,執(zhí)行 S5 ;S5 :判斷j是否等于1,是則執(zhí)行S6,否則執(zhí)行S7 ;S6 :讀取壓縮文件中寫(xiě)入的truevalue [i, I],設(shè)置jump[i, I]為O ;執(zhí)行S14 ;S7 :讀取 jump[i, j-1]并將 predata[i, j]與 jump[i, j-1]進(jìn)行異或運(yùn)算,得到dist[i,j],執(zhí)行 S8 ;S8 :判斷dist[i,j]是否小于敏感度閾值,是則執(zhí)行S9,否則轉(zhuǎn)至SlO ;S9 :設(shè)置jump[i, j]為dist[i, j]并保存到內(nèi)存,執(zhí)行Sll ;SlO :設(shè)置 jump[i, j]為 jump[i, j-1]并保存到內(nèi)存,執(zhí)行 Sll ;Sll :讀取壓縮文件中的isneg[i,j],執(zhí)行S12 ;S12 :判斷isneg[i,j]是否為I,是則執(zhí)行S13,否則執(zhí)行S14 ;S13 :設(shè)置 dist[i, j]等于負(fù) dist[i, j],執(zhí)行 S14 ;S14:將 dist[i, j]與當(dāng)前數(shù)據(jù) truevalue[i, j]的前一個(gè)數(shù)據(jù) truevalue[i, j_l]求和得到當(dāng)前數(shù)據(jù)truevalue [i, j]并寫(xiě)入到解壓縮文件,執(zhí)行S15 ;S15 :令 j=j+l,執(zhí)行 S16 ;S16 :判斷j是否大于n,是則執(zhí)行S17,否則返回S5 ;S17 :令 i=i+l,執(zhí)行 S18 ;S18 :判斷i是否大于m,是則執(zhí)行S19,否則返回S4 ;S19 :結(jié)束。由于采用了上述技術(shù)方案,本發(fā)明提供的運(yùn)動(dòng)捕獲數(shù)據(jù)壓縮、解壓縮方法,針對(duì)運(yùn)動(dòng)捕獲數(shù)據(jù)并有效利用其特點(diǎn)進(jìn)行數(shù)據(jù)處理,解決了利用通用無(wú)損數(shù)據(jù)壓縮方法取得的壓縮比不高,解壓縮時(shí)間長(zhǎng)的問(wèn)題,同時(shí)采用哈夫曼編碼和行程長(zhǎng)度編碼這兩個(gè)無(wú)損編碼結(jié)合數(shù)據(jù)特點(diǎn)充分壓縮、節(jié)省空間,避免了有損壓縮方法影響視覺(jué)效果,容易造成視覺(jué)誤差的問(wèn)題。
圖I是本發(fā)明所述壓縮方法的流程圖;圖2是本發(fā)明人所述解壓縮方法的流程圖;圖3是本發(fā)明所述數(shù)據(jù)預(yù)測(cè)處理的流程圖;圖4是本發(fā)明所述對(duì)待編碼數(shù)據(jù)進(jìn)行編碼的流程圖;圖5、圖6是本發(fā)明編碼后的數(shù)據(jù)記錄在碼表中的示例圖。
具體實(shí)施例方式結(jié)合附圖對(duì)本發(fā)明作詳細(xì)說(shuō)明如圖I、圖3、圖4所示的一種運(yùn)動(dòng)捕獲數(shù)據(jù)壓縮方法,包括如下步驟A :設(shè)定運(yùn)動(dòng)捕獲數(shù)據(jù)包括由PosX, PosY, PosZ三列數(shù)據(jù)構(gòu)成的位移數(shù)據(jù)和由RotX,RotY,RotZ, ω四列構(gòu)成的旋轉(zhuǎn)數(shù)據(jù);P0SX、P0SY、P0SZ分別是運(yùn)動(dòng)捕獲數(shù)據(jù)的位置參數(shù);R0tX、R0tY、R0tZ、ω分別是運(yùn)動(dòng)捕獲數(shù)據(jù)的旋轉(zhuǎn)參數(shù);每列數(shù)據(jù)中的每個(gè)數(shù)據(jù)為32位浮點(diǎn)數(shù)據(jù);B :將32位浮點(diǎn)數(shù)據(jù)轉(zhuǎn)化為16位整數(shù)數(shù)據(jù)
將PosX,PosY, PosZ每列數(shù)據(jù)的相鄰數(shù)據(jù)相減獲得32位浮點(diǎn)差值數(shù)據(jù);對(duì)32位浮點(diǎn)差值數(shù)據(jù)進(jìn)行量化形成16位整數(shù)數(shù)據(jù),得到每個(gè)數(shù)據(jù)為16位整數(shù)的PosX'PosY'PosZ"三列位移數(shù)據(jù);將RotX、RotY、RotZ、ω四列數(shù)據(jù)通過(guò)正交化處理得到正交數(shù)據(jù)RotX' ,RotYi、RotZ'、ω,,對(duì)RotX' ,RotYi ,RotZi每列中的32位浮點(diǎn)數(shù)據(jù)進(jìn)行量化處理形成16位整數(shù)數(shù)據(jù),得到每個(gè)數(shù)據(jù)為16位整數(shù)的RotX"、RotY"、RotZ"三列旋轉(zhuǎn)數(shù)據(jù);C :對(duì)位移數(shù)據(jù)PosX"、PosY"、PosZ"或旋轉(zhuǎn)數(shù)據(jù)RotX"、RotY"、RotZ"進(jìn)行數(shù)據(jù)預(yù)測(cè)處理,得到待編碼數(shù)據(jù);
數(shù)據(jù)預(yù)測(cè)處理的步驟如下
Cl :開(kāi)始,之后執(zhí)行C2 ;
C2 :設(shè)定數(shù)據(jù)預(yù)測(cè)處理的當(dāng)前數(shù)據(jù)為truevalue [i, j],其中I彡i彡m, I彡j彡η ;i是運(yùn)動(dòng)捕獲數(shù)據(jù)的列數(shù),j是運(yùn)動(dòng)捕獲數(shù)據(jù)的幀數(shù);設(shè)定數(shù)據(jù)預(yù)測(cè)處理得到的待編碼數(shù)據(jù)為 predata[i, j],執(zhí)行 C3 ;
C3 :令 i=l,執(zhí)行 C4 ;
C4 :令 j=l,執(zhí)行 C5 ;
C5 :判斷j是否等于1,是則執(zhí)行C6,否則執(zhí)行C7 ;
C6 :將truevalue [i, I]寫(xiě)入到壓縮文件,設(shè)置jump[i, I]為O ;執(zhí)行C14 ;
C7:設(shè)置dist[i, j]為當(dāng)前數(shù)據(jù) truevalue[i, j]與前一個(gè)數(shù)據(jù) truevalue[i, j-1]相減所獲得的差值數(shù)據(jù),設(shè)置執(zhí)行CS ;
C8 :設(shè)置jump[i, j-1]為記錄的上一次差值數(shù)據(jù)的絕對(duì)值,設(shè)置predata[i, j]為dist[i, j]的絕對(duì)值與jump[i, j-1]異或運(yùn)算所獲得的數(shù)據(jù),執(zhí)行C9 ;
C9 :判斷dist[i,j]是否小于敏感度閾值,是則執(zhí)行C10,否則轉(zhuǎn)至Cll ;
ClO :設(shè)置jump[i, j]為dist[i, j]的絕對(duì)值并保存到內(nèi)存,執(zhí)行C12 ;
Cll :設(shè)置jump[i, j]為jump[i, j-1]并保存到內(nèi)存,執(zhí)行C12 ;
C12 :判斷dist[i,j]是否小于0,是則執(zhí)行C13,否則轉(zhuǎn)至C14 ;
C13 :設(shè)置符號(hào)位isneg[i,j]為1,執(zhí)行C15 ;
C14 :設(shè)置符號(hào)位isneg[i,j]為0,執(zhí)行C15 ;
C15 :將符號(hào)位isneg[i, j]寫(xiě)入壓縮文件和保存待編碼數(shù)據(jù)predata[i, j]到內(nèi)存,執(zhí)行C16 ;
C16 :令 j=j+l,執(zhí)行 C17 ;
C17 :判斷j是否大于n,是則執(zhí)行C18,否則返回C5 ;
C18 :令 i=i+l,執(zhí)行 C19 ;
C19 :判斷i是否大于m,是則執(zhí)行C20,否則返回C4 ;
C20 :結(jié)束;
D:對(duì)待編碼數(shù)據(jù)進(jìn)行編碼
編碼的步驟如下
Dl :將每個(gè)待編碼數(shù)據(jù)劃分為前綴零部分和殘留值部分;
D2 :統(tǒng)計(jì)每個(gè)待編碼數(shù)據(jù)的前綴零長(zhǎng)度除以2后的長(zhǎng)度值的概率分布;
D3 :根據(jù)統(tǒng)計(jì)后的概率分布對(duì)每個(gè)待編碼數(shù)據(jù)的前綴零長(zhǎng)度除以2后的長(zhǎng)度值進(jìn)行哈夫曼編碼并構(gòu)建碼表;所述碼表的每一項(xiàng)包括前綴零除以2的長(zhǎng)度值和其對(duì)應(yīng)的哈夫曼編碼;(根據(jù)您這次的改動(dòng)為先構(gòu)建碼表在根據(jù)碼表進(jìn)行哈夫曼編碼,因?yàn)榇a表中要存儲(chǔ)哈夫曼編碼所以調(diào)整為上述內(nèi)容)D4 :對(duì)哈夫曼編碼相同的連續(xù)的待編碼數(shù)據(jù)進(jìn)行行程長(zhǎng)度編碼;(由于行程長(zhǎng)度編碼和哈夫曼編碼一樣,編碼方法為現(xiàn)有技術(shù),所以省略其編碼方法)D5 :對(duì)前綴零長(zhǎng)度除以2后的長(zhǎng)度值編碼后得到的哈夫曼編碼相同的多個(gè)連續(xù)的待編碼數(shù)據(jù)設(shè)置成按照標(biāo)志位、行程長(zhǎng)度編碼、哈夫曼編碼和殘留值順序的編碼值寫(xiě)入壓縮文件;對(duì)連續(xù)的待編碼數(shù)據(jù)中前綴零長(zhǎng)度除以2后的長(zhǎng)度值編碼后得到的哈夫曼編碼唯一的每個(gè)待編碼數(shù)據(jù)設(shè)置成按照標(biāo)志位、哈夫曼編碼和殘留值順序的編碼值寫(xiě)入壓縮文件;如圖2所示的一種運(yùn)動(dòng)捕獲數(shù)據(jù)解壓縮方法,包括如下步驟SI :開(kāi)始,之后執(zhí)彳了 S2 ;S2 :讀取碼表,解析數(shù)據(jù)得到待編碼數(shù)據(jù)predata[i,j],執(zhí)行S3 ;S3 :令 i=l,執(zhí)行 S4 ;S4 :令 j=l,執(zhí)行 S5 ;S5 :判斷j是否等于1,是則執(zhí)行S6,否則執(zhí)行S7 ;S6 :讀取壓縮文件中寫(xiě)入的truevalue [i, I],設(shè)置jump[i, I]為O ;執(zhí)行S14 ;S7 :讀取 jump[i, j-Ι]并將 predata[i, j]與 jump[i, j_l]進(jìn)行異或運(yùn)算,得到dist[i,j],執(zhí)行 S8 ;S8 :判斷dist[i,j]是否小于敏感度閾值,是則執(zhí)行S9,否則轉(zhuǎn)至SlO ;S9 :設(shè)置jump[i, j]為dist[i, j]并保存到內(nèi)存,執(zhí)行Sll ;SlO :設(shè)置 jump[i, j]為 jump[i, j-1]并保存到內(nèi)存,執(zhí)行 Sll ;Sll :讀取壓縮文件中的isneg[i, j],執(zhí)行S12 ;S12 :判斷isneg[i,j]是否為I,是則執(zhí)行S13,否則執(zhí)行S14 ;S13 :設(shè)置 dist[i, j]等于負(fù) dist[i, j],執(zhí)行 S14 ;S14:將 dist[i, j]與當(dāng)前數(shù)據(jù) truevalue[i, j]的前一個(gè)數(shù)據(jù) truevalue[i, j_l]求和得到當(dāng)前數(shù)據(jù)truevalue [i, j]并寫(xiě)入到解壓縮文件,執(zhí)行S15 ;S15 :令 j=j+l,執(zhí)行 S16 ;S16 :判斷j是否大于n,是則執(zhí)行S17,否則返回S5 ;S17 :令 i=i+l,執(zhí)行 S18 ;S18 :判斷i是否大于m,是則執(zhí)行S19,否則返回S4 ;S19:結(jié)束。本發(fā)明對(duì)旋轉(zhuǎn)數(shù)據(jù),將1 於乂、1 於¥、1 的2、03四列數(shù)據(jù)通過(guò)正交化處理得到正交數(shù)據(jù) RotX' , RotY; , RotZ;、ω 1,具體為 Rot V =RotX/sq(RotX2+RotY2+RotZ2+ω2),其中sq表示開(kāi)根號(hào),RotY、RotZ、ω經(jīng)過(guò)同樣變換得到RotY'、RotZ' > ω ',由于RotX'、RotY'、RotZ'、ω'是正交的,且模為1,因此可省略ω ',只對(duì)變換后的RotX' ,RotYi、RotZ'作進(jìn)一步處理;本發(fā)明將經(jīng)過(guò)數(shù)據(jù)預(yù)測(cè)處理得到的每個(gè)待編碼數(shù)據(jù)劃分為前綴零部分和殘留值部分;具體劃分方法為每個(gè)待編碼數(shù)據(jù)的前綴中第一個(gè)二進(jìn)制I之前的全部二進(jìn)制O為前綴零部分,其余部分為殘留值部分,如圖5所示為對(duì)連續(xù)的待編碼數(shù)據(jù)中前綴零長(zhǎng)度除以2后的長(zhǎng)度值編碼后,所得到的哈夫曼編碼唯一的每個(gè)待編碼數(shù)據(jù)經(jīng)過(guò)編碼之后寫(xiě)入到壓縮文件中的示例圖;a表示標(biāo)志位,O標(biāo)志針對(duì)連續(xù)的待編碼數(shù)據(jù)其各自的前綴零長(zhǎng)度除以2后的長(zhǎng)度值編碼后得到的哈夫曼編碼沒(méi)有相同的,該哈夫曼編碼制只對(duì)應(yīng)一個(gè)待編碼數(shù)據(jù)山表示對(duì)前綴零長(zhǎng)度除以2后的長(zhǎng)度值的哈夫曼編碼,該編碼根據(jù)該數(shù)據(jù)前綴零長(zhǎng)度除以2后的長(zhǎng)度值從碼表中查找得到;c表示除去前綴零部分后剩余的殘留值部分的編碼,由于前綴零長(zhǎng)度是不等的,所以殘留值部分的編碼是變長(zhǎng)的;如圖6所示為對(duì)前綴零長(zhǎng)度除以2后的長(zhǎng)度值編碼后,所得到的哈夫曼編碼相同的多個(gè)連續(xù)的待編碼數(shù)據(jù)經(jīng)過(guò)編碼之后寫(xiě)入到壓縮文件中的示例圖;d表示標(biāo)志位,I標(biāo)志對(duì)前綴零長(zhǎng)度除以2后的長(zhǎng)度值編碼后得到的哈夫曼編碼是多個(gè)連續(xù)的待編碼數(shù)據(jù)共同擁有的;e表示對(duì)相同的哈夫曼編碼進(jìn)行的行程長(zhǎng)度編碼,示例圖中e取值二進(jìn)制序列0011,對(duì)應(yīng)十進(jìn)制3,則表示有5個(gè)相同的哈夫曼編碼,因?yàn)榫哂邢嗤墓蚵幋a的待編碼數(shù)據(jù)數(shù)量至少為2,所以用二進(jìn)制序列0000表示2,則推出0011表示5 4表示對(duì)前綴零長(zhǎng)度除以2后的長(zhǎng)度值的哈夫曼編碼;h、g等分別表示除前綴零部分后各待編碼數(shù)據(jù)剩余的殘留值部分的編碼;本發(fā)明解壓縮時(shí),讀取碼表和壓縮文件并解析數(shù)據(jù),如圖5所示,首先讀取到標(biāo)志位,值為O則得知對(duì)應(yīng)的編碼只對(duì)應(yīng)一個(gè)待編碼數(shù)據(jù),隨后讀取7位哈夫曼編碼,根據(jù)哈夫曼編碼計(jì)算待編碼數(shù)據(jù)的前綴零長(zhǎng)度,然后把前綴零和后面的殘留值接起來(lái)便得到待編碼數(shù)據(jù),對(duì)于圖6所示的示例則需先讀取行程長(zhǎng)度編碼,得到共有哈夫曼編碼的連續(xù)待編碼數(shù)據(jù)的個(gè)數(shù),后面的過(guò)程與圖5的示例處理方式相同;本發(fā)明提供的運(yùn)動(dòng)捕獲數(shù)據(jù)壓縮、解壓縮方法,針對(duì)運(yùn)動(dòng)捕獲數(shù)據(jù)并有效利用其特點(diǎn)進(jìn)行數(shù)據(jù)處理,解決了利用通用無(wú)損數(shù)據(jù)壓縮方法取得的壓縮比不高,解壓縮時(shí)間長(zhǎng)的問(wèn)題,同時(shí)采用哈夫曼編碼和行程長(zhǎng)度編碼這兩個(gè)無(wú)損編碼結(jié)合數(shù)據(jù)特點(diǎn)充分壓縮、節(jié)省空間,避免了有損壓縮方法影響視覺(jué)效果,容易造成視覺(jué)誤差的問(wèn)題。以上所述,僅為本發(fā)明較佳的具體實(shí)施方式
,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),根據(jù)本發(fā)明的技術(shù)方案及其發(fā)明構(gòu)思加以等同替換或改變,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種運(yùn)動(dòng)捕獲數(shù)據(jù)壓縮方法,其特征在于包括如下步驟 A :設(shè)定運(yùn)動(dòng)捕獲數(shù)據(jù)包括由PosX,PosY, PosZ三列數(shù)據(jù)構(gòu)成的位移數(shù)據(jù)和由RotX、RotY, RotZ, ω四列構(gòu)成的旋轉(zhuǎn)數(shù)據(jù);PosX、PosY, PosZ分別是運(yùn)動(dòng)捕獲數(shù)據(jù)的位置參數(shù);RotX、RotY、RotZ、ω分別是運(yùn)動(dòng)捕獲數(shù)據(jù)的旋轉(zhuǎn)參數(shù);每列數(shù)據(jù)中的每個(gè)數(shù)據(jù)為32位浮點(diǎn)數(shù)據(jù); B :將32位浮點(diǎn)數(shù)據(jù)轉(zhuǎn)化為16位整數(shù)數(shù)據(jù) 將PosX,PosY, PosZ每列數(shù)據(jù)的相鄰數(shù)據(jù)相減獲得32位浮點(diǎn)差值數(shù)據(jù); 對(duì)32位浮點(diǎn)差值數(shù)據(jù)進(jìn)行量化形成16位整數(shù)數(shù)據(jù),得到每個(gè)數(shù)據(jù)為16位整數(shù)的PosX"、PosY"、PosZ"三列位移數(shù)據(jù); 將尺0丨乂、1 0丨¥、1 0丨2、(0四列數(shù)據(jù)通過(guò)正交化處理得到正交數(shù)據(jù)RotX'、 RotY' ,RotZi、ω',對(duì)RotX' ,RotYi ,RotZi每列中的32位浮點(diǎn)數(shù)據(jù)進(jìn)行量化處理形成16位整數(shù)數(shù)據(jù),得到每個(gè)數(shù)據(jù)為16位整數(shù)的RotX"、RotY"、RotZ"三列旋轉(zhuǎn)數(shù)據(jù); C :對(duì)位移數(shù)據(jù)PosX"、PosY"、PosZ"或旋轉(zhuǎn)數(shù)據(jù)RotX"、RotY"、RotZw進(jìn)行數(shù)據(jù)預(yù)測(cè)處理,得到待編碼數(shù)據(jù); 數(shù)據(jù)預(yù)測(cè)處理的步驟如下 Cl :開(kāi)始,之后執(zhí)行C2 ; C2 :設(shè)定數(shù)據(jù)預(yù)測(cè)處理的當(dāng)前數(shù)據(jù)為truevalue[i, j],其中I彡i彡m, I彡j彡n ;i是運(yùn)動(dòng)捕獲數(shù)據(jù)的列數(shù),j是運(yùn)動(dòng)捕獲數(shù)據(jù)的幀數(shù);設(shè)定數(shù)據(jù)預(yù)測(cè)處理得到的待編碼數(shù)據(jù)為 predata[i, j],執(zhí)行 C3 ;C3 :令 i=l,執(zhí)行 C4 ;C4 :令 j=l,執(zhí)行 C5 ; C5 :判斷j是否等于1,是則執(zhí)行C6,否則執(zhí)行C7 ; C6 :將truevalue[i, I]寫(xiě)入到壓縮文件,設(shè)置jump[i, I]為O ;執(zhí)行C14 ; C7:設(shè)置 dist[i, j]為當(dāng)前數(shù)據(jù) truevalue[i, j]與前一個(gè)數(shù)據(jù) truevalue [i, j-Ι]相減所獲得的差值數(shù)據(jù),設(shè)置執(zhí)行CS ; C8 :設(shè)置jump[i, j-Ι]為記錄的上一次差值數(shù)據(jù)的絕對(duì)值,設(shè)置predata[i, j]為dist[i, j]的絕對(duì)值與jump[i,j-1]異或運(yùn)算所獲得的數(shù)據(jù),執(zhí)行C9 ; C9 :判斷dist[i,j]是否小于敏感度閾值,是則執(zhí)行C10,否則轉(zhuǎn)至Cll ; ClO :設(shè)置jump[i, j]為dist[i, j]的絕對(duì)值并保存到內(nèi)存,執(zhí)行C12 ; Cll :設(shè)置jump[i, j]為jump[i, j-1]并保存到內(nèi)存,執(zhí)行C12 ; C12 :判斷dist[i,j]是否小于0,是則執(zhí)行C13,否則轉(zhuǎn)至C14 ; C13 :設(shè)置符號(hào)位isneg[i,j]為1,執(zhí)行C15 ; C14 :設(shè)置符號(hào)位isneg[i,j]為0,執(zhí)行C15 ; C15 :將符號(hào)位isneg[i,j]寫(xiě)入壓縮文件和保存待編碼數(shù)據(jù)predata [i,j]到內(nèi)存,執(zhí)行 C16 ;C16 :令 j=j+l,執(zhí)行 C17 ; C17 :判斷j是否大于n,是則執(zhí)行C18,否則返回C5 ;C18 :令 i=i+l,執(zhí)行 C19 ; C19 :判斷i是否大于m,是則執(zhí)行C20,否則返回C4 ;C20 :結(jié)束; D:對(duì)待編碼數(shù)據(jù)進(jìn)行編碼 編碼的步驟如下 Dl :將每個(gè)待編碼數(shù)據(jù)劃分為前綴零部分和殘留值部分; D2 :統(tǒng)計(jì)每個(gè)待編碼數(shù)據(jù)的前綴零長(zhǎng)度除以2后的長(zhǎng)度值的概率分布; D3 :根據(jù)統(tǒng)計(jì)后的概率分布對(duì)每個(gè)待編碼數(shù)據(jù)的前綴零長(zhǎng)度除以2后的長(zhǎng)度值進(jìn)行哈夫曼編碼并構(gòu)建碼表;所述碼表的每一項(xiàng)包括前綴零除以2的長(zhǎng)度值和其對(duì)應(yīng)的哈夫曼編碼;(根據(jù)您這次的改動(dòng)為先構(gòu)建碼表在根據(jù)碼表進(jìn)行哈夫曼編碼,因?yàn)榇a表中要存儲(chǔ)哈夫曼編碼所以調(diào)整為上述內(nèi)容) D4 :對(duì)哈夫曼編碼相同的連續(xù)的待編碼數(shù)據(jù)進(jìn)行行程長(zhǎng)度編碼;(由于行程長(zhǎng)度編碼和哈夫曼編碼一樣,編碼方法為現(xiàn)有技術(shù),所以省略其編碼方法) D5 :對(duì)前綴零長(zhǎng)度除以2后的長(zhǎng)度值編碼后得到的哈夫曼編碼相同的多個(gè)連續(xù)的待編碼數(shù)據(jù)設(shè)置成按照標(biāo)志位、行程長(zhǎng)度編碼、哈夫曼編碼和殘留值順序的編碼值寫(xiě)入壓縮文件; 對(duì)連續(xù)的待編碼數(shù)據(jù)中前綴零長(zhǎng)度除以2后的長(zhǎng)度值編碼后得到的哈夫曼編碼唯一的每個(gè)待編碼數(shù)據(jù)設(shè)置成按照標(biāo)志位、哈夫曼編碼和殘留值順序的編碼值寫(xiě)入壓縮文件。
2.一種運(yùn)動(dòng)捕獲數(shù)據(jù)解壓縮方法,其特征在于包括如下步驟 51:開(kāi)始,之后執(zhí)行S2 ; 52:讀取碼表,解析數(shù)據(jù)得到待編碼數(shù)據(jù)predata[i,j],執(zhí)行S3 ;53:令 i=l,執(zhí)行 S4 ;54:令 j=l,執(zhí)行 S5 ; 55:判斷j是否等于1,是則執(zhí)行S6,否則執(zhí)行S7 ; 56:讀取壓縮文件中寫(xiě)入的truevalue [i, I],設(shè)置jump[i, I]為O ;執(zhí)行S14 ; 57:讀取jump[i, j-1]并將predata[i, j]與jump[i, j-1]進(jìn)行異或運(yùn)算,得到dist[i,j],執(zhí)行 S8 ; 58:判斷dist[i, j]是否小于敏感度閾值,是則執(zhí)行S9,否則轉(zhuǎn)至SlO ; 59:設(shè)置jump[i,j]為dist[i,j]并保存到內(nèi)存,執(zhí)行Sll ; 510:設(shè)置jump[i, j]為jump[i, j-1]并保存到內(nèi)存,執(zhí)行Sll ; 511:讀取壓縮文件中的isneg[i,j],執(zhí)行S12 ; 512:判斷isneg[i,j]是否為I,是則執(zhí)行S13,否則執(zhí)行S14 ; 513:設(shè)置 dist[i, j]等于負(fù) dist[i, j],執(zhí)行 S14 ; S14:將 dist[i, j]與當(dāng)前數(shù)據(jù) truevalue [i, j]的前一個(gè)數(shù)據(jù) truevalue [i, j-1]求和得到當(dāng)前數(shù)據(jù)truevalue [i, j]并寫(xiě)入到解壓縮文件,執(zhí)行S15 ;515:令 j=j+l,執(zhí)行 S16 ; 516:判斷j是否大于n,是則執(zhí)行S17,否則返回S5 ;517:令 i=i+l,執(zhí)行 S18 ; 518:判斷i是否大于m,是則執(zhí)行S19,否則返回S4 ; 519:結(jié)束。
全文摘要
本發(fā)明公開(kāi)了一種運(yùn)動(dòng)捕獲數(shù)據(jù)壓縮、解壓縮方法,所述壓縮方法包括如下步驟設(shè)定運(yùn)動(dòng)捕獲數(shù)據(jù)包括由PosX,PosY,PosZ三列數(shù)據(jù)構(gòu)成的位移數(shù)據(jù)和由RotX、RotY、RotZ、ω四列構(gòu)成的旋轉(zhuǎn)數(shù)據(jù),每列數(shù)據(jù)中的每個(gè)數(shù)據(jù)為32位浮點(diǎn)數(shù)據(jù);將32位浮點(diǎn)數(shù)據(jù)轉(zhuǎn)化為16位整數(shù)數(shù)據(jù),得到PosX〞、PosY〞、PosZ〞三列位移數(shù)據(jù)和RotX〞、RotY〞、RotZ〞三列旋轉(zhuǎn)數(shù)據(jù);對(duì)位移數(shù)據(jù)PosX〞、PosY〞、PosZ〞或旋轉(zhuǎn)數(shù)據(jù)RotX〞、RotY〞、RotZ〞進(jìn)行數(shù)據(jù)預(yù)測(cè)處理,得到待編碼數(shù)據(jù);對(duì)待編碼數(shù)據(jù)進(jìn)行編碼;本發(fā)明針對(duì)運(yùn)動(dòng)捕獲數(shù)據(jù)進(jìn)行數(shù)據(jù)處理,壓縮無(wú)損高效、節(jié)省空間。
文檔編號(hào)H03M7/30GK102932001SQ20121044570
公開(kāi)日2013年2月13日 申請(qǐng)日期2012年11月8日 優(yōu)先權(quán)日2012年11月8日
發(fā)明者王鵬杰, 周濟(jì)民, 宋海玉, 宋天毅 申請(qǐng)人:大連民族學(xué)院