本發(fā)明涉及三維點(diǎn)云,尤其是涉及基于重心voronoi剖分的點(diǎn)云均一化方法。
背景技術(shù):
點(diǎn)云是大量點(diǎn)的集合,隨著掃描技術(shù)的日益發(fā)展,我們能利用掃描儀獲取不規(guī)則物體的點(diǎn)云表達(dá)從而重構(gòu)出該物體的網(wǎng)格信息,而后實(shí)現(xiàn)3d圖像顯示乃至3d打印等。
隨著技術(shù)的發(fā)展,相關(guān)科技的成熟,kinect、sense等消費(fèi)級掃描儀出現(xiàn)在了人們面前,人們可以在家就實(shí)現(xiàn)對物體的掃描,從而將物體轉(zhuǎn)化為計算機(jī)上的模型。但是鑒于消費(fèi)級的價格要求,設(shè)備的精度相對較低,掃描出來的點(diǎn)云存在分布過于密集、結(jié)構(gòu)缺失、噪音等缺點(diǎn)。掃描儀程序一般會不會對掃描出的點(diǎn)云進(jìn)行更多更好地優(yōu)化,并且用戶通常沒有簡單、快速和有效的辦法對掃描點(diǎn)云進(jìn)行處理,往往是掃描即所得。但是點(diǎn)云的分布情況直接影響了模型的好壞,最終影響了整個渲染顯示的效果,所以對掃描信息的二次處理是十分必要和有意義的。
網(wǎng)格重構(gòu)領(lǐng)域的重心voronoi剖分方法,是將一個輸入的初始網(wǎng)格進(jìn)行重構(gòu),優(yōu)化點(diǎn)的位置以得到一個性質(zhì)更好的網(wǎng)格。但是該方法是建立在網(wǎng)格基礎(chǔ)之上的一種方法,不適用于以點(diǎn)云為基礎(chǔ)的數(shù)據(jù)。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于基于重心voronoi剖分的點(diǎn)云均一化方法。
本發(fā)明包括以下步驟:
1)對所有的輸入點(diǎn)建立kd-tree([2]bentleyjl.multidimensionalbinarysearchtreesusedforassociativesearching[j].communicationsoftheacm,1975,18(9):509-517),再查找k近鄰,所述查找k近鄰是給定一個坐標(biāo),查找與該坐標(biāo)最接近的k個點(diǎn)的坐標(biāo);
2)對點(diǎn)云數(shù)據(jù)進(jìn)行權(quán)值的賦值工作,具體方法如下:
首先進(jìn)行5次拉普拉斯光順,每一次普拉斯光順的具體辦法是:對每一個輸入點(diǎn),由步驟1)中提前建立的kd-tree求出距離kd-tree最近的10個輸入點(diǎn),然后將該點(diǎn)的曲率與這10個輸入點(diǎn)的曲率求平均值,將該平均值作為該輸入點(diǎn)的新權(quán)重;其次進(jìn)行冪處理,即把每個輸入點(diǎn)的權(quán)重再做一個實(shí)數(shù)的冪運(yùn)算;
在步驟2)中,所述對點(diǎn)云數(shù)據(jù)進(jìn)行權(quán)值的賦值工作,通常,每一個點(diǎn)的權(quán)重會被設(shè)置為其主曲率中較大的一個(設(shè)定權(quán)重的方法不限于此,具體根據(jù)用戶的需求而定),這樣做的好處在使得輸出點(diǎn)在物體表面尖銳處分布密集,在平滑處分布稀疏。權(quán)值設(shè)置完成后要進(jìn)行曲率的光順;所述實(shí)數(shù)的冪運(yùn)算,可取2.5次冪。
3)用戶指定一個所需要的輸出點(diǎn)的數(shù)量n,然后根據(jù)權(quán)重在輸入點(diǎn)集上進(jìn)行點(diǎn)的采樣,得到n個采樣點(diǎn);
在步驟3)中,所述點(diǎn)的采樣的方式可為:
(1)求所有輸入點(diǎn)的權(quán)重和,記為w;
(2)計算輸出點(diǎn)的平均權(quán)重ws,ws=w/n;
(3)設(shè)定一個累加器sum;
(4)遍歷每一個輸出點(diǎn)一次,每訪問一個點(diǎn),累加器sum就加上該點(diǎn)的權(quán)重,當(dāng)累加器sum的值大于平均權(quán)重ws時,即將當(dāng)下遍歷到的點(diǎn)加入采樣點(diǎn)集q中,同時sum減去ws,如此操作后,將得到一個采樣點(diǎn)集q。
4)對采樣點(diǎn)中的每一個點(diǎn)利用步驟1)中建立的kd-tree,查找該采樣點(diǎn)在輸入點(diǎn)中的k近鄰,利用k近鄰和該采樣點(diǎn)計算最小二乘平面s,將該采樣點(diǎn)投影到平面s上得到一個投影q*,以這個投影q*為中心,在平面s上生成一個正六邊形的三角網(wǎng)格m,中心q*到正六邊形的6個頂點(diǎn)的距離稱為半徑r,所述半徑r的計算公式為:
r=2(vb-box/n)1/3
其中,vb-box為輸入點(diǎn)云的包圍盒體積,n為輸出點(diǎn)個數(shù),該正六邊形網(wǎng)格被稱作估計平面,那么每一個采樣點(diǎn)對應(yīng)一個正六邊形的三角網(wǎng)格,記一個點(diǎn)-網(wǎng)格對為<q*,m>;
在步驟4)中,所述k可選為15。
5)如果點(diǎn)云模型沒有邊界,那么跳過此步驟;如果點(diǎn)云模型有邊界,那么利用pointcloudlibrary這個開源的代碼庫將邊界提取出來,該邊界稱為外邊界;
6)利用步驟4)中求出的所有點(diǎn)-網(wǎng)格對<q*,m>及步驟5)中提取的外邊界計算voronoi圖,對于每一個點(diǎn)q*都將擁有一個voronoi單元,voronoi單元中含有其它點(diǎn)的網(wǎng)格,在計算voronoi圖時不需要考慮其它點(diǎn)的網(wǎng)格,僅需要考慮自己的網(wǎng)格,外邊界只用于voronoi單元的計算,其voronoi單元中不需要計算多邊形網(wǎng)格;
7)計算出voronoi圖后,對于每一個voronoi單元中的多邊形網(wǎng)格進(jìn)行三角化操作,三角化操作是將網(wǎng)格中的多邊形分解成多個三角形,三角化的目的在于計算不規(guī)則多邊形的重心;
在步驟7)中,所述三角化操作可采用delaunay三角化。
8)對每一個voronoi單元,計算voronoi單元的重心p,然后以該重心p作為采樣點(diǎn)的新位置,重心p的計算公式如下:
其中,t表示一個voronoi單元v中的三角形,i為該三角形的頂點(diǎn),ci表示點(diǎn)的權(quán)重,pi表示點(diǎn)的坐標(biāo),at表示三角形t的面積;
9)將每一個點(diǎn)q*移動到新的voronoi單元v的重心p后,計算的所有點(diǎn)-網(wǎng)格對及voronoi圖即失效,需要重新計算估計平面,即回到步驟4)估計平面,反復(fù)執(zhí)行步驟4)~8),即lloyd迭代操作;
在步驟9)中,所述反復(fù)執(zhí)行步驟4)~8)的次數(shù)最好為35~50。
10)如果對有邊界的模型使用到步驟6),那么在結(jié)束步驟9)時需要將外邊界上面的部分點(diǎn)加入到最終的輸出點(diǎn)中,具體方法是對步驟9)中得到的輸出點(diǎn)再求一次邊界,稱為內(nèi)邊界,求出距離每一個內(nèi)邊界最近的外邊界集合,將該外邊界集合加入到最終的輸出點(diǎn)中。
本發(fā)明采用重心voronoi剖分來對輸出點(diǎn)進(jìn)行位置的優(yōu)化。由于輸入的信息為單純的點(diǎn),需要利用點(diǎn)集求出最小二乘面從而建立簡單的離散網(wǎng)格,以期獲得相關(guān)計算參數(shù)。利用點(diǎn)與離散網(wǎng)格計算voronoi圖,然后在每個voronoi單元中,進(jìn)行l(wèi)loyd迭代操作,使得點(diǎn)的分布達(dá)到預(yù)想狀態(tài),即重心voronoi圖([3]qiangdu,vancefaber,maxgunzburger.centroidalvoronoitessellations:applicationsandalgorithms[j].siamreview,1999,41(4):637-676)。
背景技術(shù)中提到掃描儀掃描出的點(diǎn)云數(shù)據(jù)就可以采用本發(fā)明進(jìn)行優(yōu)化,本發(fā)明的優(yōu)勢在于點(diǎn)云的簡化、均一和去噪。其優(yōu)點(diǎn)在于:
1)用較少的點(diǎn)去表達(dá)數(shù)量較多的輸入點(diǎn)云想要表達(dá)的物體,將物體平滑表面的點(diǎn)更多地挪動到物體尖銳表面,有效降低掃描儀掃描出的冗余點(diǎn);
2)對噪聲有一定魯棒性,掃描儀得到的數(shù)據(jù)一般是含有一定的噪聲,造成生成的網(wǎng)格不夠光滑等,本發(fā)明有對噪音數(shù)據(jù)的過濾作用;
3)使得輸出點(diǎn)分布均一、呈現(xiàn)蜂巢狀結(jié)構(gòu),視覺上呈現(xiàn)更好的觀感,總體提升點(diǎn)的分布質(zhì)量,為點(diǎn)云的進(jìn)一步應(yīng)用做出鋪墊;
4)本發(fā)明利用網(wǎng)格重心voronoi剖分相關(guān)技術(shù)進(jìn)行了推廣,使得其能直接處理建立在點(diǎn)云上面的數(shù)據(jù);
5)采用重心voronoi剖分來優(yōu)化三維點(diǎn)云中點(diǎn)的位置信息。該方法首先在輸入的粗糙三維點(diǎn)云上采點(diǎn),然后通過估計每個采樣點(diǎn)的所在平面和計算每個采樣點(diǎn)的voronoi單元,計算出采樣點(diǎn)的重心位置,將采樣點(diǎn)移動到新的位置即進(jìn)行l(wèi)loyd迭代([1]lloyd,s.p.leastsquaresquantizationinpcm[j].ieeetransactionsoninformationtheory1982,28(2):129-137),從而獲得一個蜂窩狀分布的點(diǎn)云結(jié)構(gòu)。
附圖說明
圖1為本發(fā)明輸入的不帶邊界的點(diǎn)云模型。
圖2為本發(fā)明對輸入點(diǎn)云進(jìn)行采樣后得到的采樣點(diǎn)。
圖3為本發(fā)明的單個估計平面示意圖。
圖4為本發(fā)明所有估計平面的示意圖。
圖5為本發(fā)明生成的voronoi圖和三角化的示意圖。
圖6為本發(fā)明最終輸出點(diǎn)云結(jié)果。
圖7為本發(fā)明輸入的帶邊界的點(diǎn)云模型。
圖8為一個邊界提取的示意圖。
圖9為本發(fā)明利用邊界進(jìn)行l(wèi)loyd迭代的示意圖。
圖10為本發(fā)明對有邊界的模型輸出的結(jié)果。
具體實(shí)施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
為了豐富結(jié)果,展示含有邊界和不含邊界兩種情況,以下用2個實(shí)施例說明本發(fā)明,實(shí)施例1為不含有邊界的模型,實(shí)施例2為含有邊界的模型。并且實(shí)施例1在步驟s2中使用曲率作為權(quán)重,實(shí)施例2將權(quán)重全部設(shè)置為1。根據(jù)上述發(fā)明內(nèi)容,實(shí)施例1執(zhí)行除步驟s6和s10之外的8個步驟,實(shí)施例2執(zhí)行全部步驟:
實(shí)施例1:
s1:輸入原始點(diǎn)云,建立點(diǎn)云kd-tree。
讀入一個約2.4萬點(diǎn)的兔子點(diǎn)云模型(參見圖1),對所有點(diǎn)建立三維kd-tree。
s2:對點(diǎn)云的權(quán)重進(jìn)行賦值,數(shù)值上等于點(diǎn)的主曲率較大的一個,并進(jìn)行拉普拉斯光順和冪處理。
s3:初始化輸出點(diǎn),采樣。
指定輸出3000個點(diǎn),根據(jù)權(quán)重的采樣結(jié)果如圖2所示。
s4:計算估計平面。
單個估計平面如圖3所示,將所有采樣點(diǎn)的估計平面畫出來將得到圖4所示的分離網(wǎng)格(為了可視性,每個六邊形的網(wǎng)格半徑被適當(dāng)縮小)。
s5:計算voronoi圖。
利用步驟s4中得到的所有點(diǎn)-網(wǎng)格對計算voronoi圖如圖5(a)所示,一個voronoi單元由一個多邊形網(wǎng)格組成。
s6:無邊界,此步跳過。
s7:計算出voronoi圖后,對于每一個voronoi單元中的多邊形網(wǎng)格進(jìn)行三角化操作。
如圖5(b)所示,將一個不規(guī)則多邊形用許多小三角形表示。
s8:對每一個voronoi圖,計算單元的重心p,然后以該重心作為采樣點(diǎn)的新位置。
即利用公式計算步驟s7中每一個不規(guī)則多邊形的重心,然后將這個voronoi單元的對應(yīng)點(diǎn)移動到該重心。
s9:執(zhí)行l(wèi)loyd迭代。
反復(fù)從步驟s4開始的操作,50次后,得到圖6的輸出點(diǎn)云。
s10:無邊界,此步跳過。
實(shí)施例2:
s1:輸入原始點(diǎn)云,建立點(diǎn)云kd-tree。
讀入約12萬個點(diǎn)的牙齒模型(圖7),對所有點(diǎn)建立三維kd-tree。
s2:對點(diǎn)云的權(quán)重進(jìn)行賦值,權(quán)重全部為1。
s3:初始化輸出點(diǎn),采樣。
指定輸出10000個點(diǎn)。
s4:計算估計平面。
s5:計算voronoi圖。
s6:有邊界,如圖7所示的牙齒模型,對其進(jìn)行邊界提取操作,提取的邊界如圖8所示。邊界被加入計算的示意圖如圖9所示,邊界上的點(diǎn)參與voronoi單元計算。
s7:計算出voronoi圖后,對于每一個voronoi單元中的多邊形網(wǎng)格進(jìn)行三角化操作。
s8:對每一個voronoi圖,計算單元的重心p,然后以該重心作為采樣點(diǎn)的新位置。
s9:執(zhí)行l(wèi)loyd迭代。
反復(fù)從步驟s4開始的操作共50次。
s10:對于有邊界的牙齒模型在步驟s9步后就需要將邊界采樣加入輸出點(diǎn),最終輸出結(jié)果如圖10所示。