本發(fā)明涉及計(jì)算機(jī)圖形學(xué)和三維網(wǎng)格編輯領(lǐng)域,尤其是指一種關(guān)節(jié)運(yùn)動(dòng)感知的稀疏局部分解及重構(gòu)算法。
背景技術(shù):
動(dòng)態(tài)幾何或者動(dòng)畫(huà)網(wǎng)格序列是具有相同連接關(guān)系的三角形網(wǎng)格,通常這些三角形網(wǎng)格記錄了一個(gè)對(duì)象在一個(gè)時(shí)間序列上的不同姿態(tài)。這種幾何體在動(dòng)畫(huà)和3D游戲中都是非常普遍的。得到一個(gè)對(duì)這種三角形網(wǎng)格序列的簡(jiǎn)潔表示方式,并且支持對(duì)幾何體的編輯在動(dòng)態(tài)幾何處理中是一個(gè)非常重要的課題。
傳統(tǒng)的方式通常采用諸如骨架或者籠子(Cage)這樣的簡(jiǎn)潔結(jié)構(gòu)來(lái)捕捉給定三角形網(wǎng)格序列的運(yùn)行信息,并通過(guò)使用蒙皮技術(shù)或者廣義質(zhì)地坐標(biāo)來(lái)進(jìn)行三角形網(wǎng)格重構(gòu)。盡管這些方法都可以很好地壓縮三角形網(wǎng)格序列,但是要想通過(guò)操作這些骨架或者籠子來(lái)構(gòu)建具有新姿態(tài)的三角形網(wǎng)格卻非常困難。
稀疏局部形狀基方法將三角形網(wǎng)格序列的每個(gè)幀視為平均形狀三角形網(wǎng)格的變形,并且提取出一組可以捕獲姿態(tài)變形的局部形狀基。通過(guò)編輯控制這組形狀基的參數(shù)值來(lái)構(gòu)成不同形狀基組合,從而重構(gòu)出具有不同姿態(tài)的三角形網(wǎng)格模型。這種方法在抬高眉毛,提高嘴角等面部表示方面表現(xiàn)了強(qiáng)大的能力。然而,由于這組形狀基利用的是非局域性坐標(biāo)變化,這種方法在重構(gòu)大范圍旋轉(zhuǎn)運(yùn)行時(shí),容易差生偽影。Huang等人試圖通過(guò)在三角形網(wǎng)格面片的變形梯度(DG)空間上進(jìn)行稀疏局部分解來(lái)填充局部線(xiàn)性表示和關(guān)節(jié)運(yùn)動(dòng)的非線(xiàn)性特性的缺口。盡管這種方式可以在一定程度上表示旋轉(zhuǎn)運(yùn)動(dòng),但是由于DG變化的非局部性,它的編輯能力受到了很大的限制。DG的變化具有非局部性,因?yàn)楫?dāng)三角形網(wǎng)格的剛性部分繞著關(guān)節(jié)旋轉(zhuǎn)時(shí),剛性部分上所有的DG都會(huì)有相類(lèi)似的變化。此外,作為非本質(zhì)特征,DG的變換依賴(lài)于全局旋轉(zhuǎn)變換。因此,這個(gè)方法不能處理具有全局旋轉(zhuǎn)的動(dòng)畫(huà)序列。最后,每個(gè)變形梯度都由9個(gè)參數(shù)來(lái)定義,當(dāng)一個(gè)三角形網(wǎng)格有NF個(gè)面時(shí)就需要9NF個(gè)參數(shù)來(lái)表示一個(gè)姿態(tài)。這就極大地增加了局部稀疏分解的處理時(shí)間。
以上這些方法主要缺點(diǎn)有:(1)可以比較簡(jiǎn)潔的方式來(lái)表示運(yùn)動(dòng)序列三角形網(wǎng)格模型,但是卻無(wú)法提供比較簡(jiǎn)潔的方式來(lái)編輯三角形網(wǎng)格的姿態(tài);(2)可以進(jìn)行編輯,但是無(wú)法處理旋轉(zhuǎn)范圍比較大的運(yùn)動(dòng)姿態(tài);(3)表示網(wǎng)格序列的數(shù)據(jù)量大,計(jì)算復(fù)雜。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于克服現(xiàn)有技術(shù)的缺點(diǎn)與不足,提供了一種關(guān)節(jié)運(yùn)動(dòng)感知的稀疏局部分解及重構(gòu)算法,可以準(zhǔn)確地捕捉到發(fā)生旋轉(zhuǎn)運(yùn)動(dòng)的部位并重構(gòu)出具有大范圍旋轉(zhuǎn)運(yùn)動(dòng)的三角形網(wǎng)格姿態(tài)模型,可以方便地進(jìn)行姿態(tài)編輯且具有更好的效果以及計(jì)算效率。
為實(shí)現(xiàn)上述目的,本發(fā)明所提供的技術(shù)方案為:一種關(guān)節(jié)運(yùn)動(dòng)感知的稀疏局部分解及重構(gòu)算法,包括以下步驟:
1)計(jì)算三角網(wǎng)格中邊的長(zhǎng)度和邊對(duì)應(yīng)的二面角大小
給定一系列具有不同姿態(tài)的動(dòng)態(tài)三角形網(wǎng)格序列這些模型都具有相同的拓?fù)浣Y(jié)構(gòu),先分別計(jì)算各個(gè)三角網(wǎng)格模型上各條邊的長(zhǎng)度以及邊所對(duì)應(yīng)的二面角大小(這兩個(gè)值記為L(zhǎng)A);
2)計(jì)算各個(gè)三角網(wǎng)格模型LA向量的殘差
對(duì)步驟1)中得到的一個(gè)三角網(wǎng)格模型上各條邊對(duì)應(yīng)的LA按照邊的順序排列構(gòu)成一個(gè)LA向量,計(jì)算出各個(gè)三角網(wǎng)格模型的LA向量,分別與參考三角網(wǎng)格模型的LA向量做差,等到對(duì)應(yīng)的LA向量殘差;
3)提取LA基
對(duì)步驟2)中得到的各個(gè)模型的LA向量殘差進(jìn)行稀疏局部分解,得到一組可以捕捉到關(guān)節(jié)局部運(yùn)動(dòng)的LA基,每一個(gè)LA基控制著著三角網(wǎng)格模型上的一塊區(qū)域形狀;
4)線(xiàn)性混合LA基獲得新的LA向量
對(duì)步驟3)中得到的可以捕捉到關(guān)節(jié)局部運(yùn)動(dòng)的LA基,編輯對(duì)應(yīng)的參數(shù),獲得新的LA向量殘差,再與參考三角網(wǎng)格模型的LA向量作和計(jì)算,獲得新的LA向量;
5)恢復(fù)連接映射
對(duì)步驟4)中得到的新的LA向量進(jìn)行各個(gè)三角面片上頂點(diǎn)的局部坐標(biāo)值計(jì)算,獲得局部坐標(biāo)系下面片上各個(gè)頂點(diǎn)的局部坐標(biāo)值,進(jìn)而恢復(fù)三角網(wǎng)格模型上各個(gè)三角面片的連接映射;
6)估計(jì)局部正交標(biāo)價(jià)
對(duì)步驟5)中得到的三角形面片的連接映射關(guān)系,再利用最小化標(biāo)價(jià)重構(gòu)函數(shù)來(lái)估算出三角網(wǎng)格模型的局部正交標(biāo)架;
7)重構(gòu)三角網(wǎng)格
對(duì)步驟6)中得到的局正交標(biāo)價(jià),利用最小化重構(gòu)函數(shù)來(lái)估計(jì)三角網(wǎng)格模型中各個(gè)頂點(diǎn)的位置,會(huì)后獲得具有新的姿態(tài)的三角網(wǎng)格模型。
在步驟1)中,所述的計(jì)算三角網(wǎng)格中邊的長(zhǎng)度和邊對(duì)應(yīng)的二面角大小(這兩個(gè)值記為L(zhǎng)A),具體如下:
假設(shè)為給定的具有不同姿態(tài)的三角網(wǎng)格模型數(shù)據(jù)集,NP表示數(shù)據(jù)集中三角網(wǎng)格模型的個(gè)數(shù),表示第k個(gè)三角網(wǎng)格模型。每個(gè)三角網(wǎng)格模型表面都是由緊密相連的三角形構(gòu)成。E和F分別表示三角網(wǎng)格模型中的邊集合和三角面片集合,并且邊的個(gè)數(shù)為NE,三角面片的個(gè)數(shù)為NF。這些三角網(wǎng)格模型具有相同的連接關(guān)系,即所有的三角網(wǎng)格模型具有相同的邊集合和三角面片集合。在遍歷三角面片上的頂點(diǎn)時(shí),我們是以逆時(shí)針的方向進(jìn)行。
假設(shè)上的一條邊e=(i,j)∈E,共用這條邊的三角面片為τ=(j,h,i)和υ=(g,j,i),括號(hào)內(nèi)的字母為構(gòu)成這個(gè)三角面片頂點(diǎn)標(biāo)號(hào),順序?yàn)槟鏁r(shí)針順序。當(dāng)從這條公共邊的頂點(diǎn)vi走到vj時(shí),三角形面片τ位于左手邊,三角面片υ位于右手邊,所以τ和υ分別稱(chēng)為邊(i,j)的左三角面片和右三角面片。計(jì)算e的長(zhǎng)度時(shí),使用的是兩個(gè)頂點(diǎn)間的歐幾里德距離,即lij=||vj-vi||2。θ表示三角面片τ和υ向外方向的法線(xiàn)的夾角,即θ=acos(nτ·nυ),其中nτ和nυ分別為三角面片τ和υ上方向向外方向的法線(xiàn),則公共邊對(duì)應(yīng)的二面角定義為
以上獲得了一個(gè)LA值(lij,φij)。
對(duì)于數(shù)據(jù)集上所有的三角網(wǎng)格模型計(jì)算其各個(gè)條邊上的LA值,并按照邊的編號(hào)順序排列可以構(gòu)成一個(gè)2NE列的向量即LA向量。
在步驟2)中,所述的計(jì)算各個(gè)三角網(wǎng)格模型的LA向量殘差,具體方法為:在步驟1)中獲得了各個(gè)三角網(wǎng)格模型的LA向量后,分別與第一個(gè)網(wǎng)格模型的LA向量作差,得出LA向量的殘差,即{Dk=Xk-X1,k=1,2,...,Np}。
在步驟3)中,所述的提取LA基,具體方式如下:
利用步驟2)中得到的LA向量殘差,構(gòu)建出一個(gè)2NE×Np的矩陣D=(D1,...,DNp)。將矩陣D分解成D=C×W。其中矩陣C是一個(gè)2NE×K的LA基矩陣,矩陣中的每一列都表示一個(gè)LA基,即矩陣中的每一列都控制著三角網(wǎng)格模型中的一個(gè)區(qū)域的形狀。這里的K表示LA基的個(gè)數(shù),可以根據(jù)需要設(shè)定大小,設(shè)定K值即是將三角網(wǎng)格模型大致分成K個(gè)區(qū)域。而矩陣W是一個(gè)K×NP的權(quán)重矩陣,矩陣中的每一行表示一個(gè)混合權(quán)重序列。為了便于對(duì)三角網(wǎng)格的姿態(tài)進(jìn)行編輯,需要盡可能地保持LA基的局部性,即各個(gè)LA基控制的區(qū)域之間混合部分盡可能地少,并且需要?dú)w一化混合權(quán)重來(lái)消除由于縮放對(duì)姿態(tài)的影響。這里通過(guò)最小化函數(shù)(1)來(lái)進(jìn)行矩陣分解。
其中第一個(gè)能量項(xiàng)用來(lái)約束矩陣分解的誤差,而第二個(gè)能量項(xiàng)用于調(diào)整矩陣C中LA基的局部性,即各個(gè)LA基控制的區(qū)域的大小范圍。
第二個(gè)能量項(xiàng)具體如下:
其中Λik表示三角網(wǎng)格模型上的第i條邊與第k條作為形狀基中的邊中點(diǎn)間的測(cè)地線(xiàn)距離,具體定義如下:
其具體過(guò)程為:首先在三角網(wǎng)格模型上選擇K條邊作為K個(gè)形狀基的中心,稱(chēng)為中心邊,這里用Edge表示,edgek表示第k條中心邊。用ei表示三角網(wǎng)格模型上的編號(hào)為i的邊,則上式中的dik表示ei和edgek中點(diǎn)的測(cè)地線(xiàn)距離歸一化之后的結(jié)果,這里的歸一化實(shí)際上就是計(jì)算三角網(wǎng)格上邊的中點(diǎn)與各個(gè)中心邊中點(diǎn)的測(cè)地線(xiàn)距離,取出其中的最大值記為dmax,然后將三角網(wǎng)格模型上的邊計(jì)算出來(lái)的測(cè)地線(xiàn)距離處于這個(gè)最大值最后得到的值作為歸一化之后的測(cè)地線(xiàn)距離。因此有dik≤1。rmin和rmax為支持的半徑取值范圍為[0,1),其具體值根據(jù)需求設(shè)定。
在整個(gè)分解過(guò)程中,ci,k表示矩陣C第i行第k列的數(shù)據(jù),wkj表示矩陣W第k行第j列的值;且有max{wk,j,k=1,...,K;j=1,...,NP}=1,即矩陣W中的所有元素,最大值為1。在實(shí)驗(yàn)中,η的值設(shè)為200。
在步驟4)中,所述的線(xiàn)性混合LA基獲取新的LA向量,其具體方法為:在步驟3)中獲取的LA基矩陣之后,修改W矩陣中任意一列的數(shù)值,得到向量wk,然后矩陣C再與wk相乘,得到一個(gè)新的LA向量殘差,最后與第一個(gè)三角網(wǎng)格模型(即參考三角網(wǎng)格模型)的LA向量相加即可獲得具有新的姿態(tài)的三角網(wǎng)格模型的LA向量。即通過(guò)計(jì)算即可獲取新的LA向量。
在步驟5)中,所述的恢復(fù)連接映射,其過(guò)程主要包括建立一個(gè)新的局部坐標(biāo)系,通過(guò)邊的LA值計(jì)算得到一這條邊為公共邊的兩個(gè)三角面片各個(gè)頂點(diǎn)的坐標(biāo),然后再計(jì)算各個(gè)面片的在新的局部坐標(biāo)系下的局部正交標(biāo)價(jià),最后通過(guò)兩個(gè)面片的局部正交標(biāo)架恢復(fù)其連接映射關(guān)系具體過(guò)程如下所述:
在從步驟4)中獲取LA向量之后,我們可以對(duì)每一條邊恢復(fù)其連接關(guān)系。假設(shè)邊e=(i,j)是左三角面片τ和右三角面片υ的公共邊,且h,g分別為左右三角面片的第三個(gè)頂點(diǎn),即公共邊e=(i,j)的左右三角面片分別為τ=(j,h,i),υ=(g,j,i)。首先創(chuàng)建一個(gè)坐標(biāo)系(r,s,t),然后計(jì)算出兩個(gè)三角面片各個(gè)頂點(diǎn)在這個(gè)坐標(biāo)系下的坐標(biāo)值。坐標(biāo)系以頂點(diǎn)vi作為坐標(biāo)原點(diǎn)且頂點(diǎn)vj的坐標(biāo)值為(lij,0,0),坐標(biāo)系的t軸與三角面片υ向外方向的法線(xiàn)同向。由于三角面片υ為公共邊e=(i,j)的右三角面片,所以頂點(diǎn)vg的r坐標(biāo)必定小于0。所以可以計(jì)算vg的坐標(biāo)分別為:
為了計(jì)算頂點(diǎn)vh的坐標(biāo)值,我們首先假設(shè)頂點(diǎn)vh繞著公共邊旋轉(zhuǎn)展平后跟三角面片υ共面的頂點(diǎn)vh',則類(lèi)似的可以計(jì)算頂點(diǎn)vh'的坐標(biāo)值為:
將頂點(diǎn)vh'繞著r坐標(biāo)軸旋轉(zhuǎn)φij-π后即可獲得頂點(diǎn)vh的坐標(biāo)軸。
在獲得兩個(gè)三角面片各個(gè)頂點(diǎn)的坐標(biāo)軸之后,計(jì)算在上述過(guò)程中新建的局部坐標(biāo)系下的局部正交標(biāo)價(jià)。局部正交標(biāo)價(jià)的具體過(guò)程如下:
以三角面片τ為例,我們定義這個(gè)三角面片上的局部正交標(biāo)價(jià)為ζτ=(uτ,vτ,nτ)其中表示三角面片τ上從第一個(gè)頂點(diǎn)vi指向第二個(gè)頂點(diǎn)vj的單位向量;nτ為三角面片向外的單位法線(xiàn);vτ=nτ×uτ。以上三個(gè)單位向量就構(gòu)成了ζτ3×3的矩陣結(jié)構(gòu)。
同理可以求出三角面片υ上的局部正交標(biāo)價(jià)ζυ。那么即為將其他坐標(biāo)系下其他坐標(biāo)系下的坐標(biāo)值轉(zhuǎn)變成υ局部坐標(biāo)系下表示的轉(zhuǎn)換矩陣。
在計(jì)算出以邊e=(i,j)為公共邊的兩個(gè)三角面片的局部正交標(biāo)價(jià)之后就可以計(jì)算這公共邊的連接映射Qij。Qij的定義如下:
至此,計(jì)算出了邊e=(i,j)的連接映射,用類(lèi)似的方式就可恢復(fù)所有邊的連接映射。
因?yàn)樵谶M(jìn)行LA基的編輯時(shí),直接改變的是LA值,即直接改變了三角網(wǎng)格中的邊長(zhǎng)度和邊對(duì)應(yīng)的三角形的二面角大小。這就有可能導(dǎo)致修改后的邊長(zhǎng)不滿(mǎn)足三角形邊長(zhǎng)不等式,即修改后的邊有可能沒(méi)辦法構(gòu)成三角面片。面對(duì)這些情況需要進(jìn)行特殊處理:當(dāng)lgj≥lji+lig時(shí),我們統(tǒng)一將邊的長(zhǎng)度lji和lig放大lgj/(lji+lig)倍,這樣就有l(wèi)gj=lji+lig,這時(shí)候因?yàn)檫?i,j)的方向跟邊(g,j)的方向一致,所以邊(g,j)的方向?yàn)?1,0,0);同理,當(dāng)lji≥lgj+lig時(shí),邊(g,j)的方向?yàn)?1,0,0),當(dāng)lig≥lgj+lji時(shí),邊(g,j)的方向?yàn)?-1,0,0)。
在步驟6)中,所述的估計(jì)局部正交標(biāo)價(jià),其主要方法如下:
假設(shè)為三角形網(wǎng)格中的邊的集合,通過(guò)如下最小化函數(shù)(2)來(lái)估計(jì)出每個(gè)三角面片的局部正交標(biāo)架:
其中左邊項(xiàng)為:
表示連接映射能量。
而函數(shù)(2)中的ζ1和分別表示需要估計(jì)的第一個(gè)三角面片的正交標(biāo)價(jià)和給定的第一個(gè)三角面片的正交標(biāo)價(jià),為了保證重構(gòu)出來(lái)的剛性變換的三角網(wǎng)格具有唯一性,我們需要給定第一個(gè)三角面片的局部正交標(biāo)價(jià);下標(biāo)‘F’表示Frobenius范數(shù);Qij為步驟5)中恢復(fù)的鏈接映射。
步驟7)中,所述的重構(gòu)三角網(wǎng)格主要就是計(jì)算新的三角網(wǎng)格模型各個(gè)頂點(diǎn)的位置,具體過(guò)程如下:
在步驟6)中獲取到局部正交標(biāo)價(jià)之后,通過(guò)優(yōu)化函數(shù)(3)來(lái)計(jì)算出三角網(wǎng)格中各個(gè)頂點(diǎn)的位置。
εER({vi,i∈I})=εEV({vi,i∈I})+εVC({vi,i∈I}) (3)
其中右邊的項(xiàng)用于約束給定的固定點(diǎn)的位置,其具體為:
其中I*為給定固定的頂點(diǎn)的編號(hào),為給定的固定頂點(diǎn)的位置。為了保證重構(gòu)出來(lái)的剛性變換的三角網(wǎng)格模型具有唯一性,我們需要固定一些點(diǎn)的位置不變,固定點(diǎn)的數(shù)量根據(jù)需要進(jìn)行調(diào)整。
函數(shù)(3)中的第一個(gè)想用于約束估計(jì)的頂點(diǎn)位置跟步驟6)中得到的局部正交標(biāo)價(jià)里面向量的偏差,具體為:
其中egj=-lgju,eji=lji(cosβu-sinβv),eig=lig(cosαu+sinαv),α為三角面片上邊(g,j)和邊(i,g)的夾角,而β為邊(g,j)和邊(j,i)的夾角;式中的u,v表示由步驟6)估計(jì)的對(duì)應(yīng)三角面片上的局部正交標(biāo)價(jià)ζ=(u,v,n)上對(duì)應(yīng)的向量。
優(yōu)化函數(shù)(3)之后就可以獲得三角網(wǎng)格模型的所有點(diǎn)的位置,即重構(gòu)出編輯過(guò)后具有新的姿態(tài)的三角網(wǎng)格模型。
本發(fā)明與現(xiàn)有技術(shù)相比,具有如下優(yōu)點(diǎn)與有益效果:
1、更好的局部性,這主要體現(xiàn)在對(duì)三角網(wǎng)格剛性變形區(qū)域的定位。相對(duì)于Huang等人提出的在變形梯度空間上進(jìn)行稀疏局部分解來(lái)獲取形狀基的方法(這里稱(chēng)為DG方法),本發(fā)明在處理發(fā)生旋轉(zhuǎn)運(yùn)動(dòng)區(qū)域的定位上具有更好的局部性。當(dāng)網(wǎng)格模型繞著一個(gè)關(guān)節(jié)點(diǎn)進(jìn)行剛性旋轉(zhuǎn)運(yùn)動(dòng)時(shí),由于臨近關(guān)節(jié)區(qū)域的邊對(duì)應(yīng)的LA值才會(huì)發(fā)生大的變化,而其他不在關(guān)節(jié)點(diǎn)附近區(qū)域的邊的LA值變化不大,所以本發(fā)明很很好地捕捉到這個(gè)變化的區(qū)域,這也可以更好的生成對(duì)應(yīng)的LA基,從而使通過(guò)編輯生成的新的三角網(wǎng)格模型更準(zhǔn)確,更能應(yīng)對(duì)繞著關(guān)節(jié)運(yùn)動(dòng)的變形。而這一點(diǎn)DG方法卻不能很好地處理。
2、適用于大范圍旋轉(zhuǎn)運(yùn)動(dòng)變形。由于變形梯度的計(jì)算是相互獨(dú)立的,而且變形梯度所所適應(yīng)的旋轉(zhuǎn)運(yùn)動(dòng)的角度只能是在[0,π)之間,所以當(dāng)運(yùn)動(dòng)三角網(wǎng)格模型中的三角面片繞著關(guān)節(jié)點(diǎn)旋轉(zhuǎn)運(yùn)動(dòng),旋轉(zhuǎn)的角度大于π時(shí),DG方法將無(wú)法進(jìn)行具有較大旋轉(zhuǎn)角度變形中形狀基的提取。而本發(fā)明中是用的LA值表示的是相鄰三角形間的相對(duì)旋轉(zhuǎn)角度,而這個(gè)旋轉(zhuǎn)角度總是小于2π,因此,本發(fā)明可以很好地從具有大范圍旋轉(zhuǎn)運(yùn)動(dòng)的三角網(wǎng)格序列中捕捉到發(fā)生運(yùn)動(dòng)的區(qū)域(即提取LA基)。
3、適用于全局旋轉(zhuǎn)。雖然全局旋轉(zhuǎn)運(yùn)動(dòng)跟姿態(tài)變形不是很相關(guān),但是,一個(gè)稀疏局部分解也應(yīng)該可以處理這種情況。由于本發(fā)明中是對(duì)LA值殘差的稀疏局部分解,而LA具有局部性,因此,當(dāng)三角網(wǎng)格模型發(fā)生全局旋轉(zhuǎn)運(yùn)動(dòng)時(shí),例如,馬的整個(gè)網(wǎng)格模型繞著一條軸做全局旋轉(zhuǎn)運(yùn)動(dòng)而非自身姿態(tài)發(fā)生變形時(shí),馬的三角網(wǎng)格模型在姿態(tài)上基本不會(huì)發(fā)生變化,而三角網(wǎng)格模型中所對(duì)應(yīng)的LA向量也不會(huì)發(fā)生太大變化,因此可以重構(gòu)出合理的模型。而其他方法,比如DG方法,由于變形梯度(DG)依賴(lài)于全局旋轉(zhuǎn)變化,因此在模型發(fā)生全局旋轉(zhuǎn)變化時(shí),DG的變化非常大,這將導(dǎo)致不合理的變形。
4、具有很好的魯棒性。這主要包括三角網(wǎng)格模型中個(gè)頂點(diǎn)的連接關(guān)系具有魯邦性和對(duì)LA基對(duì)應(yīng)的區(qū)域大小的選擇具有魯棒性。本發(fā)明在處理三角面片中頂點(diǎn)的連接關(guān)系時(shí),設(shè)計(jì)了一個(gè)連接映射算法,這個(gè)算法可以很好地保持頂點(diǎn)間的連接關(guān)系。因此,在重構(gòu)經(jīng)過(guò)大范圍編輯后的三角網(wǎng)格模型姿態(tài)時(shí),在頂點(diǎn)的連接關(guān)系上具有很好的魯棒性。在本發(fā)明的實(shí)驗(yàn)結(jié)果中,對(duì)LA基對(duì)應(yīng)的區(qū)域大小的選擇都能很好地定位到變形的區(qū)域,且具有很好的局部性。
附圖說(shuō)明
圖1為本發(fā)明的算法流程圖。
圖2為本發(fā)明中三角網(wǎng)格模型里三角面片的結(jié)構(gòu),其中的局部正交標(biāo)價(jià)以及二面角。
圖3為本發(fā)明對(duì)做局部旋轉(zhuǎn)運(yùn)動(dòng)三角網(wǎng)格模型進(jìn)行LA基提取后,LA基所控制的區(qū)域可視化示意圖。其中的圖(a)是對(duì)進(jìn)行彎曲變形的鐵桿模型提取LA基的結(jié)果,提取的LA基很好的定位到了彎曲的部位,而其他為變形的剛性部位則不需要進(jìn)行額外的處理;圖(b)在對(duì)尾部發(fā)生旋轉(zhuǎn)變形的馬的三角網(wǎng)格模型提取LA基的結(jié)果,提取的LA基定位到了尾巴根部發(fā)生旋轉(zhuǎn)的區(qū)域;圖(c) 是對(duì)運(yùn)動(dòng)的機(jī)器人進(jìn)行LA基提取的結(jié)果,提取的結(jié)果定位到了發(fā)生旋轉(zhuǎn)運(yùn)動(dòng)的手邊的肘部;圖(d)是對(duì)面部表情發(fā)生變化的臉部模型進(jìn)行LA基提取的結(jié)果,提取的結(jié)果也能很好地定位到發(fā)生變形的部位。
圖4為本發(fā)明在進(jìn)行連接關(guān)系的恢復(fù)過(guò)程中的結(jié)構(gòu)示意圖,圖(a)建立的局部坐標(biāo)系以及三角面片上各個(gè)頂點(diǎn)的分布情況示意圖,圖(b)、(c)、(d)是LA值經(jīng)過(guò)編輯之后,三邊長(zhǎng)度不符合三角形不等式的情況示意圖,其中圖(b)表示lgj≥lji+lig的情況,圖(c)表示lji≥lgj+lig的情況,圖(d)表示lig≥lgj+lji的情況。
圖5為本發(fā)明在估算三角面片的頂點(diǎn)坐標(biāo)時(shí)的示例。
圖6為本發(fā)明對(duì)運(yùn)動(dòng)序列LA基提取的結(jié)果以及對(duì)姿態(tài)的編輯結(jié)果。
圖7為本發(fā)明對(duì)臉部三角網(wǎng)格模型LA基的提取結(jié)果以及表情的編輯結(jié)果
圖8位本發(fā)明對(duì)全局旋轉(zhuǎn)運(yùn)動(dòng)的處理結(jié)果以及DG方法的處理結(jié)果。其中右邊的兩行中,每一列表示的是對(duì)大約相似的區(qū)域形狀基的處理結(jié)果,第一個(gè)行為DG方法的結(jié)果,第二行為本發(fā)明結(jié)果。
具體實(shí)施方式
下面結(jié)合具體實(shí)施例對(duì)本發(fā)明作進(jìn)一步說(shuō)明。
如圖1所示,本實(shí)施例所述的關(guān)節(jié)運(yùn)動(dòng)感知的稀疏局部分解及重構(gòu)算法,包括以下步驟:
1)計(jì)算三角網(wǎng)格中邊的長(zhǎng)度和邊對(duì)應(yīng)的二面角大小(這兩個(gè)值記為L(zhǎng)A)
給定一系列具有不同姿態(tài)的動(dòng)態(tài)三角形網(wǎng)格序列這些模型都具有相同的拓?fù)浣Y(jié)構(gòu),先分別計(jì)算各個(gè)三角網(wǎng)格模型上各條邊的長(zhǎng)度以及邊所對(duì)應(yīng)的二面角大??;
2)計(jì)算各個(gè)三角網(wǎng)格模型LA向量的殘差
對(duì)步驟1)中得到的一個(gè)三角網(wǎng)格模型上各條邊對(duì)應(yīng)的LA按照邊的順序排列構(gòu)成一個(gè)LA向量,計(jì)算出各個(gè)三角網(wǎng)格模型的LA向量,分別與參考三角網(wǎng)格模型的LA向量做差,等到對(duì)應(yīng)的LA向量殘差;
3)提取LA基
對(duì)步驟2)中得到的各個(gè)模型的LA向量殘差進(jìn)行稀疏局部分解,得到一組可以捕捉到關(guān)節(jié)局部運(yùn)動(dòng)的LA基,每一個(gè)LA基控制著著三角網(wǎng)格模型上的一塊區(qū)域形狀;
4)線(xiàn)性混合LA基獲得新的LA向量
對(duì)步驟3)中得到的可以捕捉到關(guān)節(jié)局部運(yùn)動(dòng)的LA基,編輯對(duì)應(yīng)的參數(shù),獲得新的LA向量殘差,再與參考三角網(wǎng)格模型的LA向量作和計(jì)算,獲得新的LA向量;
5)恢復(fù)連接映射
對(duì)步驟4)中得到的新的LA向量進(jìn)行各個(gè)三角面片上頂點(diǎn)的局部坐標(biāo)值計(jì)算,獲得局部坐標(biāo)系下面片上各個(gè)頂點(diǎn)的局部坐標(biāo)值,進(jìn)而恢復(fù)三角網(wǎng)格模型上各個(gè)三角面片的連接映射;
6)估計(jì)局部正交標(biāo)價(jià)
對(duì)步驟5)中得到的三角形面片的連接映射關(guān)系,再利用最小化標(biāo)價(jià)重構(gòu)函數(shù)來(lái)估算出三角網(wǎng)格模型的局部正交標(biāo)架;
7)重構(gòu)三角網(wǎng)格
對(duì)步驟6)中得到的局正交標(biāo)價(jià),利用最小化重構(gòu)函數(shù)來(lái)估計(jì)三角網(wǎng)格模型中各個(gè)頂點(diǎn)的位置,會(huì)后獲得具有新的姿態(tài)的三角網(wǎng)格模型。
在步驟1)中,所述的計(jì)算三角網(wǎng)格中邊的長(zhǎng)度和邊對(duì)應(yīng)的二面角大小(這兩個(gè)值記為L(zhǎng)A),具體如下:假設(shè)為給定的具有不同姿態(tài)的三角網(wǎng)格模型數(shù)據(jù)集,NP表示數(shù)據(jù)集中三角網(wǎng)格模型的個(gè)數(shù),表示第k個(gè)三角網(wǎng)格模型。每個(gè)三角網(wǎng)格模型表面都是由緊密相連的三角形構(gòu)成。E和F分別表示三角網(wǎng)格模型中的邊集合和三角面片集合,并且邊的個(gè)數(shù)為NE,三角面片的個(gè)數(shù)為NF。這些三角網(wǎng)格模型具有相同的連接關(guān)系,即所有的三角網(wǎng)格模型具有相同的邊集合和三角面片集合。在遍歷三角面片上的頂點(diǎn)時(shí),我們是以逆時(shí)針的方向進(jìn)行。
假設(shè)上的一條邊e=(i,j)∈E,共用這條邊的三角面片為τ=(j,h,i)和υ=(g,j,i),括號(hào)內(nèi)的字母為構(gòu)成這個(gè)三角面片頂點(diǎn)標(biāo)號(hào),順序?yàn)槟鏁r(shí)針順序,如圖2所示。當(dāng)從這條公共邊的頂點(diǎn)vi走到vj時(shí),三角形面片τ位于左手邊,三角面片υ位于右手邊,所以τ和υ分別稱(chēng)為邊(i,j)的左三角面片和右三角面片。計(jì)算e的長(zhǎng)度時(shí),使用的是兩個(gè)頂點(diǎn)間的歐幾里德距離,即lij=||vj-vi||2。θ表示三角面片τ和υ向外方向的法線(xiàn)的夾角,即θ=acos(nτ·nυ),其中nτ和nυ分別為三角面片τ和υ上方向向外方向的法線(xiàn),則公共邊對(duì)應(yīng)的二面角定義為
以上獲得了一個(gè)LA值(lij,φij)。
對(duì)于數(shù)據(jù)集上所有的三角網(wǎng)格模型計(jì)算其各個(gè)條邊上的LA值,并按照邊的編號(hào)順序排列可以構(gòu)成一個(gè)2NE列的向量即LA向量。
在步驟2)中,所述的計(jì)算各個(gè)三角網(wǎng)格模型的LA向量值殘差,具體方法為:在步驟1)中獲得了各個(gè)三角網(wǎng)格模型的LA向量值構(gòu)成的向量后,分別與第一個(gè)網(wǎng)格模型的LA值向量作做差,得出LA向量值的殘差向量,即。
在步驟3)中,所述的提取LA基,具體方式如下:
利用步驟2)中得到的LA向量殘差,構(gòu)建出一個(gè)2NE×Np的矩陣D=(D1,...,DNp)。將矩陣D分解成D=C×W。其中矩陣C是一個(gè)2NE×K的LA基矩陣,矩陣中的每一列都表示LA形狀基,即矩陣中的每一列條都控制著三角網(wǎng)格模型中的一個(gè)區(qū)域的形狀。這里的K表示LA形狀基的個(gè)數(shù),可以根據(jù)需要設(shè)定大小,設(shè)定K值即是將三角網(wǎng)格模型大致分成K個(gè)區(qū)域。而矩陣是一個(gè)的權(quán)重矩陣,矩陣中的每一行表示一個(gè)混合權(quán)重序列。為了便于對(duì)三角網(wǎng)格的姿態(tài)進(jìn)行編輯,需要盡可能地保持LA形狀基的局部性,即各個(gè)LA形狀基控制的區(qū)域之間混合部分盡可能地少,并且需要?dú)w一化混合權(quán)重來(lái)消除由于縮放對(duì)姿態(tài)的影響。這里通過(guò)最小化函數(shù)(1)來(lái)進(jìn)行矩陣分解。
其中第一個(gè)能量項(xiàng)用來(lái)約束矩陣分解的誤差,而第二個(gè)能量項(xiàng)用于調(diào)整矩陣C中形狀基的局部性,即各個(gè)形狀基的大小范圍。第二個(gè)能量項(xiàng)具體如下:
其中Λik表示三角網(wǎng)格模型上的第i條邊與第k條作為形狀基中的邊中點(diǎn)間的測(cè)地線(xiàn)距離,具體定義如下:
其具體過(guò)程為:首先在三角網(wǎng)格模型上選擇K條邊作為K個(gè)形狀基的中心,稱(chēng)為中心邊,這里用Edge表示,edgek表示第k條中心邊。用ei表示三角網(wǎng)格模型上的編號(hào)為i的邊,則上式中的dik表示ei和edgek中點(diǎn)的測(cè)地線(xiàn)距離歸一化之后的結(jié)果,這里的歸一化實(shí)際上就是計(jì)算三角網(wǎng)格上邊的中點(diǎn)與各個(gè)中心邊中點(diǎn)的測(cè)地線(xiàn)距離,取出其中的最大值記為dmax,然后將三角網(wǎng)格模型上的邊計(jì)算出來(lái)的測(cè)地線(xiàn)距離處于這個(gè)最大值最后得到的值作為歸一化之后的測(cè)地線(xiàn)距離。因此有dik≤1。rmin和rmax為支持的半徑取值范圍為[0,1),其具體值根據(jù)需求設(shè)定。
在整個(gè)分解過(guò)程中,ci,k表示矩陣C第i行第k列的數(shù)據(jù),wkj表示矩陣W第k行第j列的值;且有max{wk,j,k=1,...,K;j=1,...,NP}=1,即矩陣W中的所有元素,最大值為1。在實(shí)驗(yàn)中,η的值設(shè)為200。稀疏分解后得到的形狀基的可視化結(jié)果如圖3所示。
在步驟4)中,所述的線(xiàn)性混合LA基獲取新的LA向量值,其具體方法為:在步驟3)中獲取的LA形狀基矩陣之后,修改W矩陣中任意一列的的數(shù)值,得到向量,然后矩陣C再與相乘,得到一個(gè)新的LA向量值殘差向量,最后與第一個(gè)三角網(wǎng)格模型(,即參考三角網(wǎng)格模型)的LA向量值相加即可獲得具有新的姿態(tài)的三角網(wǎng)格模型的LA向量值。即通過(guò)計(jì)算即可獲取新的LA向量值。
在步驟5)中,所述的恢復(fù)連接映射,其過(guò)程主要包括建立一個(gè)新的局部坐標(biāo)系,通過(guò)邊的LA值計(jì)算得到一這條邊為公共邊的兩個(gè)三角面片各個(gè)頂點(diǎn)的坐標(biāo),然后再計(jì)算各個(gè)面片的在新的局部坐標(biāo)系下的局部正交標(biāo)價(jià),最后通過(guò)兩個(gè)面片的局部正交標(biāo)架恢復(fù)其連接映射關(guān)系具體過(guò)程如下所述:
在從步驟4)中獲取LA向量之后,我們可以對(duì)每一條邊恢復(fù)其連接關(guān)系。假設(shè)邊e=(i,j)是左三角面片τ和右三角面片υ的公共邊,且h,g分別為左右三角面片的第三個(gè)頂點(diǎn),即公共邊e=(i,j)的左右三角面片分別為τ=(j,h,i),υ=(g,j,i)如圖4所示。首先創(chuàng)建一個(gè)坐標(biāo)系(r,s,t),然后計(jì)算出兩個(gè)三角面片各個(gè)頂點(diǎn)在這個(gè)坐標(biāo)系下的坐標(biāo)值。坐標(biāo)系以頂點(diǎn)vi作為坐標(biāo)原點(diǎn)且頂點(diǎn)vj的坐標(biāo)值為(lij,0,0),坐標(biāo)系的t軸與三角面片υ向外方向的法線(xiàn)同向。由于三角面片υ為公共邊e=(i,j)的右三角面片,所以頂點(diǎn)vg的r坐標(biāo)必定小于0。所以可以計(jì)算vg的坐標(biāo)分別為:
為了計(jì)算頂點(diǎn)vh的坐標(biāo)值,我們首先假設(shè)頂點(diǎn)vh繞著公共邊旋轉(zhuǎn)展平后跟三角面片υ共面的頂點(diǎn)vh',則類(lèi)似的可以計(jì)算頂點(diǎn)vh'的坐標(biāo)值為:
將頂點(diǎn)vh'繞著r坐標(biāo)軸旋轉(zhuǎn)φij-π后即可獲得頂點(diǎn)vh的坐標(biāo)軸。
在獲得兩個(gè)三角面片各個(gè)頂點(diǎn)的坐標(biāo)軸之后,計(jì)算在上述過(guò)程中新建的局部坐標(biāo)系下的局部正交標(biāo)價(jià)。局部正交標(biāo)價(jià)的具體過(guò)程如下:
以三角面片τ為例,我們定義這個(gè)三角面片上的局部正交標(biāo)價(jià)為ζτ=(uτ,vτ,nτ)其中表示三角面片τ上從第一個(gè)頂點(diǎn)vi指向第二個(gè)頂點(diǎn)vj的單位向量;nτ為三角面片向外的單位法線(xiàn);vτ=nτ×uτ。以上三個(gè)單位向量就構(gòu)成了ζτ3×3的矩陣結(jié)構(gòu)。
同理可以求出三角面片υ上的局部正交標(biāo)價(jià)ζυ。那么即為將其他坐標(biāo)系下其他坐標(biāo)系下的坐標(biāo)值轉(zhuǎn)變成υ局部坐標(biāo)系下表示的轉(zhuǎn)換矩陣。三角面片上的局部正交標(biāo)價(jià)如圖2所示。
在計(jì)算出以邊e=(i,j)為公共邊的兩個(gè)三角面片的局部正交標(biāo)價(jià)之后就可以計(jì)算這公共邊的連接映射Qij。Qij的定義如下:
至此,計(jì)算出了邊e=(i,j)的連接映射,用類(lèi)似的方式就可恢復(fù)所有邊的連接映射。
因?yàn)樵谶M(jìn)行LA基的編輯時(shí),直接改變的是LA值,即直接改變了三角網(wǎng)格中的邊長(zhǎng)度和邊對(duì)應(yīng)的三角形的二面角大小。這就有可能導(dǎo)致修改后的邊長(zhǎng)不滿(mǎn)足三角形邊長(zhǎng)不等式,即修改后的邊有可能沒(méi)辦法構(gòu)成三角面片。面對(duì)這些情況需要進(jìn)行特殊處理:當(dāng)lgj≥lji+lig時(shí)(圖4(b)所示),我們統(tǒng)一將邊的長(zhǎng)度lji和lig放大lgj/(lji+lig)倍,這樣就有l(wèi)gj=lji+lig,這時(shí)候因?yàn)檫?i,j)的方向跟邊(g,j)的方向一致,所以邊(g,j)的方向?yàn)?1,0,0);同理,當(dāng)lji≥lgj+lig時(shí)(圖4(c)所示),邊(g,j)的方向?yàn)?1,0,0),當(dāng)lig≥lgj+lji時(shí)(圖4(d)所示),邊(g,j)的方向?yàn)?-1,0,0)。
在步驟6)中,所述的估計(jì)局部正交標(biāo)價(jià),其主要方法如下:
假設(shè)為三角形網(wǎng)格中的邊的集合,通過(guò)如下最小化函數(shù)(2)來(lái)估計(jì)出每個(gè)三角面片的局部正交標(biāo)架:
其中左邊項(xiàng)為:
表示連接映射能量。
而函數(shù)(2)中的ζ1和分別表示需要估計(jì)的第一個(gè)三角面片的正交標(biāo)價(jià)和給定的第一個(gè)三角面片的正交標(biāo)價(jià),為了保證重構(gòu)出來(lái)的剛性變換的三角網(wǎng)格具有唯一性,我們需要給定第一個(gè)三角面片的局部正交標(biāo)價(jià);下標(biāo)‘F’表示Frobenius范數(shù);Qij為步驟5)中恢復(fù)的鏈接映射。
步驟7)中,所述的重構(gòu)三角網(wǎng)格主要就是計(jì)算新的三角網(wǎng)格模型各個(gè)頂點(diǎn)的位置,具體過(guò)程如下:
在步驟6)中獲取到局部正交標(biāo)價(jià)之后,通過(guò)優(yōu)化函數(shù)(3)來(lái)計(jì)算出三角網(wǎng)格中各個(gè)頂點(diǎn)的位置。
εER({vi,i∈I})=εEV({vi,i∈I})+εEC({vi,i∈I}) (3)
其中右邊的項(xiàng)用于約束給定的固定點(diǎn)的位置,其具體為:
其中I*為給定固定的頂點(diǎn)的編號(hào),為給定的固定頂點(diǎn)的位置。為了保證重構(gòu)出來(lái)的剛性變換的三角網(wǎng)格模型具有唯一性,我們需要固定一些點(diǎn)的位置不變,固定點(diǎn)的數(shù)量根據(jù)需要進(jìn)行調(diào)整。
函數(shù)(3)中的第一個(gè)想用于約束估計(jì)的頂點(diǎn)位置跟步驟6)中得到的局部正交標(biāo)價(jià)里面向量的偏差,具體為:
其中egj=-lgju,eji=lji(cosβu-sinβv),eig=lig(cosαu+sinαv),α為三角面片上邊(g,j)和邊(i,g)的夾角,而β為邊(g,j)和邊(j,i)的夾角(如圖5所示);式中的u,v表示由步驟6)估計(jì)的對(duì)應(yīng)三角面片上的局部正交標(biāo)價(jià)ζ=(u,v,n)上對(duì)應(yīng)的向量。
優(yōu)化函數(shù)(3)之后就可以獲得三角網(wǎng)格模型的所有點(diǎn)的位置,即重構(gòu)出編輯過(guò)后具有新的姿態(tài)的三角網(wǎng)格模型。
本發(fā)明經(jīng)過(guò)實(shí)驗(yàn)證明其可行性,能廣泛應(yīng)用于各種模型。圖6展示的是本發(fā)明對(duì)LA基定位以及對(duì)繞著節(jié)點(diǎn)進(jìn)行旋轉(zhuǎn)運(yùn)動(dòng)編輯的結(jié)果。其中圖(a)為編輯其中的兩個(gè)LA基,通過(guò)改變控制這兩個(gè)區(qū)域的LA基的混合權(quán)重參數(shù)重新構(gòu)造了一個(gè)具有新的姿態(tài)的三角網(wǎng)格模型,直觀(guān)上說(shuō)就是將控制左邊模型上半身區(qū)域的LA基的混合權(quán)重參數(shù)賦值跟控制中間模型下半身區(qū)域的LA基的混合權(quán)重參數(shù)組合起來(lái),構(gòu)成一個(gè)完整的混合權(quán)重參數(shù),最后重構(gòu)出右邊具有新的姿態(tài)的三角網(wǎng)格模型。圖(b)也是類(lèi)似的結(jié)果。而(c)則是通過(guò)改變混合權(quán)重參數(shù)之后重構(gòu)出來(lái)的具有新的姿態(tài)的三角網(wǎng)格模型,這些姿態(tài)在原來(lái)的三角網(wǎng)格數(shù)據(jù)集中是不存在的。圖7展示的是對(duì)人臉三角網(wǎng)格模型的編輯效果,其中從左邊數(shù)第一個(gè)三角網(wǎng)格模型展示的是通過(guò)本發(fā)明提取的控制左邊眼睛區(qū)域的LA基,第二個(gè)展示的是控制右邊眼睛區(qū)域的LA基,第三個(gè)展示的是控制左嘴角區(qū)域的LA基,最右邊展示的是通過(guò)將控制這三個(gè)LA基的混合權(quán)重參數(shù)組合到一起構(gòu)建出一個(gè)完整的混合權(quán)重參數(shù)之后重構(gòu)出來(lái)的三維網(wǎng)格模型。從圖中可以看到重構(gòu)出來(lái)的三維網(wǎng)格模型左邊眼睛的形狀跟第一個(gè)模型的比較相似,右邊眼睛的形狀跟第二個(gè)模型的比較相似,而左邊嘴角的形狀跟第三個(gè)模型的比較相似。圖8是以馬的三角網(wǎng)格模型為例子展示了本發(fā)明對(duì)全局旋轉(zhuǎn)運(yùn)動(dòng)處理的合理結(jié)果以及DG方法處理的結(jié)果。實(shí)驗(yàn)中馬的模型繞著一個(gè)圓進(jìn)行奔跑運(yùn)動(dòng)。圖中左邊為原本沒(méi)有進(jìn)行變形的模型,右邊兩行展示的是在對(duì)相同的基進(jìn)行全局旋轉(zhuǎn)編輯后得到的結(jié)果,第一個(gè)為頭部的變形,第二個(gè)為前腿的變形,第三個(gè)后腿的變形,實(shí)驗(yàn)表明,本發(fā)明在處理全局旋轉(zhuǎn)運(yùn)動(dòng)時(shí),處理的結(jié)果更為合理。
以上所述之實(shí)施例子只為本發(fā)明之較佳實(shí)施例,并非以此限制本發(fā)明的實(shí)施范圍,故凡依本發(fā)明之形狀、原理所作的變化,均應(yīng)涵蓋在本發(fā)明的保護(hù)范圍內(nèi)。