史 陽(yáng),孫殿柱,李延瑞,劉 健
(山東理工大學(xué)機(jī)械工程學(xué)院,山東淄博255091)
散亂點(diǎn)云曲面拓?fù)渲亟ㄖ饕糜诮鉀Q實(shí)物表面樣點(diǎn)鄰接關(guān)系的復(fù)原問(wèn)題,輸出結(jié)果體現(xiàn)為二維可定向流形結(jié)構(gòu)的多邊形網(wǎng)格曲面[1-4],是逆向工程中實(shí)現(xiàn)曲面重建及創(chuàng)新設(shè)計(jì)的重要基礎(chǔ).高質(zhì)量的曲面拓?fù)渲亟▽?duì)提高曲面重建精度具有重要意義.
目前,散亂點(diǎn)云曲面拓?fù)渲亟ǖ闹髁魉惴蓺w納為三類——場(chǎng)函數(shù)算法[4-7]、網(wǎng)格增量構(gòu)造算法[1-3,8-10]和Voronoi過(guò)濾算法[11-15].場(chǎng)函數(shù)法通過(guò)為散亂點(diǎn)云構(gòu)建標(biāo)量場(chǎng),采用等值面提取算法獲得曲面拓?fù)渚W(wǎng)格,該類算法重建的網(wǎng)格為非插值網(wǎng)格,重建精度不高.網(wǎng)格增量構(gòu)造算法通常從任一樣點(diǎn)開(kāi)始,在點(diǎn)云中選取匹配點(diǎn)[2]以完成初始網(wǎng)格的構(gòu)造,然后將當(dāng)前的網(wǎng)格邊界向其鄰域樣點(diǎn)擴(kuò)展形成新的網(wǎng)格邊界,重復(fù)此過(guò)程直至所有樣點(diǎn)成為曲面拓?fù)渚W(wǎng)格頂點(diǎn),該類算法效率較高,但對(duì)于r-dense恰當(dāng)采樣點(diǎn)云[16]中非均勻區(qū)域和曲率變化大的多輪廓點(diǎn)云,基于幾何鄰域獲取的匹配點(diǎn)進(jìn)行拓?fù)渲亟ǔ.a(chǎn)生非工藝孔洞和多余面片.Voronoi過(guò)濾算法基于散亂點(diǎn)云的Voronoi圖進(jìn)行Delaunay全局剖分,利用局部二維流形與中軸約束條件從Delaunay三角剖分結(jié)果中提取曲面拓?fù)渚W(wǎng)格,該類算法需要生成整個(gè)散亂點(diǎn)云的Voronoi圖,時(shí)間復(fù)雜度高,且不能有效重建模型邊界.
本文提出一種基于樣點(diǎn)拓?fù)浣彽纳y點(diǎn)云曲面拓?fù)渲亟ㄋ惴ǎ云谟行Ы鉀Qr-dense恰當(dāng)采樣點(diǎn)云中非均勻區(qū)域易產(chǎn)生非工藝孔洞的問(wèn)題.
與樣點(diǎn)Voronoi單元相鄰的單元所對(duì)應(yīng)的中心點(diǎn)即為樣點(diǎn)的拓?fù)浣彅?shù)據(jù),拓?fù)浣彿从车氖强臻g近鄰.獲取樣點(diǎn)拓?fù)浣徸钪庇^的方法就是生成整個(gè)點(diǎn)云的Voronoi圖,但構(gòu)造散亂點(diǎn)云的Voronoi圖系統(tǒng)資源消耗高[17],如果為查詢某個(gè)樣點(diǎn)拓?fù)浣彾鴺?gòu)造整個(gè)點(diǎn)云的Voronoi圖,則付出的代價(jià)太大.為快速查詢樣點(diǎn)的k近鄰,首先對(duì)點(diǎn)云數(shù)據(jù)構(gòu)建R*S-樹(shù)索引結(jié)構(gòu)[18],基于該索引應(yīng)用動(dòng)態(tài)擴(kuò)展空心球算法獲取樣點(diǎn)k近鄰,通過(guò)偏心擴(kuò)展和自適應(yīng)擴(kuò)展獲取樣點(diǎn)拓?fù)浣弲⒖紨?shù)據(jù),生成該局部點(diǎn)集的Voronoi圖,獲取樣點(diǎn)的拓?fù)浣彛?9].
點(diǎn)集P包含樣點(diǎn)C及其k近鄰點(diǎn),(xi,yi,zi)為P中各點(diǎn)的坐標(biāo).則點(diǎn)集P的形心C1的坐標(biāo)為
分別求解以點(diǎn)C為起點(diǎn),k近鄰各點(diǎn)為終點(diǎn)的向量與向量CC1夾角,根據(jù)夾角判斷k近鄰點(diǎn)是否位于樣點(diǎn)的同側(cè),若都位于同側(cè)則需要對(duì)點(diǎn)集P進(jìn)行偏心擴(kuò)展.圖1為樣點(diǎn)及其k近鄰點(diǎn)集(k=12)的Voronoi圖[17],樣點(diǎn)C的Voronoi單元如圖1中粗線框所示.由圖1可見(jiàn),如果沿向量CC1相反方向偏心擴(kuò)展點(diǎn)集P使其包含虛線所示面f右側(cè)點(diǎn),有助于縮小樣點(diǎn)的初始Voronoi單元,進(jìn)而有效減少后續(xù)經(jīng)自適應(yīng)擴(kuò)展獲取的拓?fù)浣弲⒖紨?shù)據(jù)的數(shù)量,提高樣點(diǎn)的拓?fù)浣彶樵冃剩?/p>
圖1 樣點(diǎn)及其k近鄰生成的Voronoi圖
該算法的具體步驟如下:
Step1:將散亂點(diǎn)云的采樣密度ρ作為偏心擴(kuò)展的距離閾值,初始化擴(kuò)展次數(shù)i=0.
Step2:計(jì)算向量C1C的長(zhǎng)度d.
Step3:若點(diǎn)集P中所有點(diǎn)位于樣點(diǎn)的同側(cè)且i·d≤ρ,則執(zhí)行Step4;否則,程序結(jié)束.
Step4:求解C1關(guān)于C的對(duì)稱點(diǎn)C′1,并作如下代換:C1=C,C=C′1,R=R+d,i=i+1.
Step5:以C為球心,R為半徑作球,將球內(nèi)的點(diǎn)添加到點(diǎn)集P中,執(zhí)行Step3.
對(duì)圖1中樣點(diǎn)C的近鄰點(diǎn)集P進(jìn)行偏心擴(kuò)展,點(diǎn)A、B被添加到點(diǎn)集P中,如圖2所示,生成其Voronoi圖,樣點(diǎn)的初始Voronoi單元如圖中粗線框所示,與圖1相比,偏心擴(kuò)展后樣點(diǎn)的初始Voronoi單元明顯縮?。?/p>
圖2 偏心擴(kuò)展后點(diǎn)集的Voronoi圖
偏心擴(kuò)展后獲得樣點(diǎn)的Voronoi單元,計(jì)算樣點(diǎn)與其Voronoi單元各頂點(diǎn)的距離,確定最大值dmax,然后以樣點(diǎn)為球心,作半徑為2dmax的球,獲取球內(nèi)及球面上所有點(diǎn),將其作為樣點(diǎn)拓?fù)浣弲⒖紨?shù)據(jù),完成自適應(yīng)擴(kuò)展,樣點(diǎn)的拓?fù)浣彵囟ㄈ堪谠擖c(diǎn)集中.
生成樣點(diǎn)拓?fù)浣弲⒖紨?shù)據(jù)的Voronoi圖,從存儲(chǔ)Voronoi單元信息的“facet-edge”數(shù)據(jù)結(jié)構(gòu)中查找當(dāng)前樣點(diǎn)所對(duì)應(yīng)的Voronoi單元并獲取Voronoi頂點(diǎn),查詢與樣點(diǎn)至少具有一個(gè)相同Voronoi頂點(diǎn)的Voronoi單元,其所對(duì)應(yīng)的數(shù)據(jù)點(diǎn)即為樣點(diǎn)拓?fù)浣忺c(diǎn).基于局部點(diǎn)集——樣點(diǎn)拓?fù)浣弲⒖紨?shù)據(jù)的Voronoi圖獲取樣點(diǎn)拓?fù)浣?,避免了?duì)整體點(diǎn)云生成Voronoi圖,有效降低了算法的時(shí)間復(fù)雜度.
對(duì)于非平面點(diǎn)云,為獲取非均勻區(qū)域樣點(diǎn)(如圖3中點(diǎn)p所示)的拓?fù)浣?,進(jìn)行偏心擴(kuò)展和自適應(yīng)擴(kuò)展后獲取的拓?fù)浣弲⒖紨?shù)據(jù)中往往包含樣點(diǎn)局部點(diǎn)集所在平面的鄰側(cè)面或?qū)γ嬷械狞c(diǎn),如圖3(b)中的點(diǎn)A、B,這些點(diǎn)是不應(yīng)該參與樣點(diǎn)局部曲面拓?fù)渲亟ǖ模疄榇?,將樣點(diǎn)的拓?fù)浣彿譃橥瑢油負(fù)浣廡N1和異層拓?fù)浣廡N2.
將樣點(diǎn)及其k近鄰點(diǎn)組成點(diǎn)集P,求解點(diǎn)集P的最小二乘平面,計(jì)算點(diǎn)集P中各數(shù)據(jù)點(diǎn)到該最小二乘平面的最大距離H,將到該最小二乘平面距離小于H的樣點(diǎn)拓?fù)浣彅?shù)據(jù)稱作該樣點(diǎn)的同層拓?fù)浣?,其它拓?fù)浣弰t稱為該樣點(diǎn)的異層拓?fù)浣?,并將同層拓?fù)浣徸鳛闃狱c(diǎn)的Delaunay匹配點(diǎn).
圖3 樣點(diǎn)同層拓?fù)浣徥疽鈭D
本文基于網(wǎng)格增量構(gòu)造算法[2-3]并結(jié)合上述樣點(diǎn)拓?fù)浣彶樵兎椒▽?shí)現(xiàn)散亂點(diǎn)云曲面拓?fù)渲亟ǎ?/p>
網(wǎng)格增量構(gòu)造算法的實(shí)現(xiàn)步驟一般為:
1)讀取散亂點(diǎn)云,對(duì)散亂點(diǎn)云建立R*S-樹(shù)空間索引結(jié)構(gòu),同時(shí)初始化各點(diǎn)的狀態(tài)函數(shù)值.
2)讀取散亂點(diǎn)云中任意一樣點(diǎn),查詢其k近鄰,將樣點(diǎn)及其k近鄰組成點(diǎn)集P.
3)對(duì)點(diǎn)集P構(gòu)建Voronoi圖,判斷樣點(diǎn)與其k近鄰之間的空間鄰接關(guān)系,從中選擇匹配點(diǎn).
4)將樣點(diǎn)及其匹配點(diǎn)連接生成局部Delaunay三角網(wǎng)格,將樣點(diǎn)的匹配點(diǎn)順次添加到傳播主環(huán)中.
5)以傳播主環(huán)為初始邊界,基于網(wǎng)格邊界分裂條件和自裁剪條件,通過(guò)已構(gòu)造網(wǎng)格邊界膨脹、分裂及自裁剪等增量操作將局部網(wǎng)格構(gòu)造增量傳播至整體點(diǎn)云,完成散亂點(diǎn)云的曲面拓?fù)渲亟ǎ?/p>
本文采用同層拓?fù)浣彶樵兎椒ㄌ鎿Q上述Step2中的k近鄰查詢,并將獲取的同層拓?fù)浣彅?shù)據(jù)作為樣點(diǎn)的匹配點(diǎn),同時(shí)省去了Step3,然后依據(jù)樣點(diǎn)拓?fù)浣弲⒖紨?shù)據(jù)的Voronoi圖,遍歷樣點(diǎn)p所在Voronoi單元各面的邊表,若共用該邊的多面體鏈表中有三個(gè)成員,且此三成員的中心點(diǎn)有兩個(gè)是樣點(diǎn)的同層拓?fù)浣?,則將此三成員的中心點(diǎn)連接成三角網(wǎng)格,該三角網(wǎng)格即為Delaunay三角網(wǎng)格.將生成的三角網(wǎng)格以Voronoi單元的面結(jié)構(gòu)體形式存儲(chǔ)于一面表中,遍歷完成后即生成滿足條件的局部Delaunay三角網(wǎng)格,順次遍歷存儲(chǔ)局部Delaunay三角網(wǎng)格的面表,再遍歷每個(gè)面的頂點(diǎn)鏈表.如圖4所示,將第一個(gè)面的第一個(gè)非樣點(diǎn)p的數(shù)據(jù)點(diǎn)p1存儲(chǔ)于區(qū)域子環(huán)LRp中,將第二個(gè)非樣點(diǎn)p的數(shù)據(jù)點(diǎn)p2存儲(chǔ)于區(qū)域子環(huán)LRp中,再查找共用p2的另一個(gè)面,可獲得p3,同理查找,可獲得區(qū)域子環(huán)LRp,并將其作為初始傳播主環(huán).獲取傳播主環(huán)后即可按網(wǎng)格增量構(gòu)造算法中的Step5完成散亂點(diǎn)云的曲面拓?fù)渲亟ǎ?/p>
圖4 樣點(diǎn)p的同層拓?fù)浣徏俺跏季W(wǎng)格
基于同層拓?fù)浣徶亟ǖ娜蔷W(wǎng)格曲面是一個(gè)內(nèi)部無(wú)隙曲面,不會(huì)存在內(nèi)邊界.因此,當(dāng)傳播主環(huán)無(wú)法繼續(xù)膨脹時(shí),如果原產(chǎn)品為封閉的產(chǎn)品模型,則獲取的最終傳播主環(huán)為空;如果原產(chǎn)品為開(kāi)曲面模型,則最終傳播主環(huán)為產(chǎn)品的重建邊界.
根據(jù)樣點(diǎn)拓?fù)浣彽男再|(zhì)可知,基于樣點(diǎn)拓?fù)浣忂M(jìn)行散亂點(diǎn)云曲面拓?fù)渲亟軌蛴行Ы鉀Q現(xiàn)有的網(wǎng)格增量構(gòu)造算法在處理r-dense恰當(dāng)采樣點(diǎn)云中非均勻區(qū)域時(shí)容易產(chǎn)生非工藝孔洞的問(wèn)題,但與此同時(shí),如圖5(a)所示,原產(chǎn)品模型上的工藝孔洞邊界數(shù)據(jù)也被重建生成了三角網(wǎng)格,因此需對(duì)該區(qū)域進(jìn)行孔洞處理.具體方法為:r-dense恰當(dāng)采樣點(diǎn)云局部區(qū)域?yàn)榻凭鶆虿蓸樱蓸用芏葹棣?,由三角形三邊關(guān)系定理可知合理三角網(wǎng)格的最長(zhǎng)邊不大于2ρ,因此,可通過(guò)人機(jī)交互選擇需要進(jìn)行孔洞處理的區(qū)域,將邊長(zhǎng)大于δρ(δ≥2)的三角面片視為不合理面片并刪除,以滿足工藝要求.對(duì)圖5(a)所示三角網(wǎng)格進(jìn)行孔洞處理后,重建效果如圖5(b)所示.
圖5 孔洞處理
采用本文算法對(duì)不同類型點(diǎn)云模型進(jìn)行曲面拓?fù)渲亟?,為體現(xiàn)本文算法自適應(yīng)性強(qiáng)的特點(diǎn),同時(shí)為保證重建效率,k值取常用值(k取10~20[20])中的最小值10.
圖6(a)所示兔子模型的散亂點(diǎn)云(點(diǎn)數(shù)為34 833)分布均勻但曲率變化復(fù)雜,采用本文算法對(duì)其進(jìn)行曲面拓?fù)渲亟?,重建效果如圖6(b)所示.由圖6可知,由于本文算法基于同層拓?fù)浣忂M(jìn)行局部網(wǎng)格重建,因此,對(duì)于曲率變化大的多輪廓點(diǎn)云仍具有良好的重建效果.
圖7(a)所示汽車部件外殼散亂點(diǎn)云(點(diǎn)數(shù)為29 226)內(nèi)部存在多處工藝孔洞,采用本文算法對(duì)其進(jìn)行曲面拓?fù)渲亟?,重建效果如圖7(b)所示,由圖7可知,基于本文算法提出的孔洞處理方法能夠有效重建散亂點(diǎn)云的內(nèi)孔特征.
圖6 本文算法曲面拓?fù)渲亟ㄐЧ麍D
圖7 本文算法曲面拓?fù)渲亟ㄐЧ麍D
圖8(a)所示米老鼠模型散亂點(diǎn)云在耳朵處由于近似為平面,所以沒(méi)有進(jìn)行高密度均勻采樣,部分區(qū)域點(diǎn)云稀疏.如圖8(c)所示,采用文獻(xiàn)[3] 算法對(duì)其進(jìn)行曲面拓?fù)渲亟?,效果如圖8(d)所示,此時(shí)采樣不均勻區(qū)域產(chǎn)生非工藝孔洞;采用本文算法進(jìn)行曲面拓?fù)渲亟?,效果如圖8(e)和圖8(f)所示;采用文獻(xiàn)[11] 基于全局Voronoi圖過(guò)濾的Cocone算法進(jìn)行曲面拓?fù)渲亟?,邊界點(diǎn)會(huì)與其全部的拓?fù)浣忺c(diǎn)相連生成三角網(wǎng)格,點(diǎn)云內(nèi)部重建效果與本文算法基本一致,而邊界重建效果不好,圖8(a)方框區(qū)域邊界點(diǎn)的重建效果分別如圖8(g)和圖8(h)所示.由圖8可知,由于本文算法能夠查找到樣點(diǎn)的同層拓?fù)浣?,所以既能夠有效解決現(xiàn)有網(wǎng)格增量構(gòu)造算法在處理r-dense恰當(dāng)采樣點(diǎn)云中非均勻區(qū)域時(shí)容易產(chǎn)生非工藝孔洞的問(wèn)題,又能夠有效生成點(diǎn)云邊界特征.
分別采用文獻(xiàn)[3] 算法、文獻(xiàn)[11] 算法及本文算法對(duì)米老鼠、汽車部件、兔子等6種散亂點(diǎn)云進(jìn)行曲面拓?fù)渲亟?,所用時(shí)間如圖9所示.由于本文算法基于局部點(diǎn)集——樣點(diǎn)拓?fù)浣弲⒖紨?shù)據(jù)的Voronoi圖查詢樣點(diǎn)拓?fù)浣彛耘c文獻(xiàn)[11] 基于全局Voronoi圖過(guò)濾的Cocone算法相比時(shí)間復(fù)雜度明顯降低.由圖9可知,本文算法的曲面拓?fù)渲亟〞r(shí)間比文獻(xiàn)[11] 算法提高了5倍以上,雖然效率稍遜于文獻(xiàn)[3] 算法,但足以滿足工程需求.
圖8 不同算法曲面拓?fù)渲亟ㄐЧ麍D
圖9 不同算法的曲面拓?fù)渲亟〞r(shí)間比較
本文算法與其他相關(guān)算法相比,具有以下特點(diǎn):
1)基于同層拓?fù)浣彅?shù)據(jù)獲取樣點(diǎn)的自由匹配點(diǎn),并通過(guò)選擇重建模型上的工藝孔洞區(qū)域進(jìn)行孔洞處理,實(shí)現(xiàn)了任意復(fù)雜散亂點(diǎn)云曲面拓?fù)渲亟?,算法?shù)據(jù)適應(yīng)性強(qiáng).
2)基于樣點(diǎn)拓?fù)浣徤蒁elaunay三角網(wǎng)格,有效解決了現(xiàn)有的網(wǎng)格增量構(gòu)造算法在處理rdense恰當(dāng)采樣點(diǎn)云中非均勻區(qū)域時(shí)容易產(chǎn)生非工藝孔洞的問(wèn)題.
3)通過(guò)建立局部點(diǎn)集——樣點(diǎn)拓?fù)浣弲⒖紨?shù)據(jù)的Voronoi圖獲取樣點(diǎn)拓?fù)浣?,相?duì)于現(xiàn)有Voronoi過(guò)濾算法有效提高了散亂點(diǎn)云曲面拓?fù)渲亟ㄐ剩?/p>
[1] 譚建榮,李立新.基于曲面局平特性的散亂數(shù)據(jù)拓?fù)渲亟ㄋ惴ǎ跩] .軟件學(xué)報(bào),2002,13(11):2 121-2 126.
[2] 孫肖霞,孫殿柱,李延瑞,等.散亂數(shù)據(jù)點(diǎn)的快速三角剖分算法[J] .中國(guó)機(jī)械工程,2006,17(增刊):245-248.
[3] 黃運(yùn)保.測(cè)量點(diǎn)集曲面重建若干關(guān)鍵技術(shù)研究[D] :武漢:華中科技大學(xué),2004.
[4] Hugues H.Surface reconstruction from unorganized points[D] .Washington:University of Washington,1994.
[5] Amenta N,Bern M,Kamvysselis M.A new Voronoi-based surface reconstruction algorithm[C] //Ivan Iee.Proceedings of the 25th Annual Conference on Computer Graphics and Interactive Techniques.New York:ACM,1998:415-421.
[6] Hornung A,Kobbelt L.Robust reconstruction of watertight 3D models from non-uniformly sampled point clouds without normal information[C] //Ivan Lee.Proceedings of the Fourth Eurographics Symposium on Geometry Processing.New York:ACM,2000:213-222.
[7] 熊邦書,魏江.變分辨率的曲面重建算法[J] .系統(tǒng)仿真學(xué)報(bào),2007,19(18):4 126-4 133.
[8] Huang J,Menq C.Combinatorial manifold mesh reconstruction and optimization from unorganized points with arbitrary topology[J] .Computer-Aided Design,2002,34(2):149-165.
[9] Lin H W,Tai C L,Wang G J.A mesh reconstruction algorithm driven by an intrinsic property of a point cloud[J] .Computer-Aided Design,2004,36(1):1-9.
[10] 錢歸平,童若鋒,彭文,等.基于散亂點(diǎn)云內(nèi)部特征的網(wǎng)格重建[J] .浙江大學(xué)學(xué)報(bào):工學(xué)版,2008,42(5):731-735.
[11] Amenta N,Choi S,Dey T K,et al.A simple algorithm for homeomorphic surfacere construction[C] //Alla sheffer.ACM Symposium on Computational Geometry.Cagliari:Eurographics Association,2000:213-222.
[12] Tsai Y C,Huang C Y,Lin K Y,et al.Development of automatic surface reconstruction technique in reverse engineering[J] .The International Journal of Advanced Manufacturing Technology,2009,42(1):152-167.
[13] Amenta N,Choi S,Kolluri R K.The power crust,unions of balls,and the medial axis transform[J] .Computational Geometry:Theory and Applications,2001,19(2-3):127-153.
[14] Dey T K,Goswami S.Tight cocone:a water-tight surface recon-structor[J] .Journal of Computing and Information Science in Engineering,2003,3(4):302-307.
[15] Mederos B,Amenta N,Velho L,et al.Surface reconstruction from noisy point clouds[C] //Desbrun M,Pottmann H.Proceedings of the Third Eurographics Symposium on Geometry Processing.Vienna:Eurographics Association,2005.
[16] 關(guān)東東,汪嘉業(yè),關(guān)華勇.r-dense采樣密度及其三維網(wǎng)格簡(jiǎn)化中的應(yīng)用[J] .山東大學(xué)學(xué)報(bào):理學(xué)版,2005,40(6):1-8.
[17] Hugo L.Computing the 3Dvoronoi diagram robustly:an easy explanation[C] //Christopher Gold.Voronoi Diagrams in Science and Engineering,2007.ISVD’07.4th International Symposium on.Wales:IEEE Computer Society,2007:117-129.
[18] 孫殿柱,朱昌志,李延瑞,等.散亂點(diǎn)云局部型面參考數(shù)據(jù)的快速查詢算法[J] .農(nóng)業(yè)機(jī)械學(xué)報(bào),2009,40(5):218-221.
[19] 孫殿柱,劉健,李延瑞,等.三維散亂點(diǎn)云的Voronoi拓?fù)浣忺c(diǎn)集查詢算法[J] .武漢大學(xué)學(xué)報(bào):信息科學(xué)版,2011,36(1):86-91.
[20] 單東日,柯映林.基于二維Delaunay近鄰的空間散亂數(shù)據(jù)曲面重建算法[J] .中國(guó)機(jī)械工程,2003,14(9):756-759.