欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種帶邊界約束的散亂點云重構(gòu)方法

文檔序號:6525168閱讀:377來源:國知局
一種帶邊界約束的散亂點云重構(gòu)方法
【專利摘要】本發(fā)明公開了一種帶邊界約束的散亂點云重構(gòu)方法。所述方法首先將三維散亂點云映射到二維平面上,對獲取的二維點集求取最小包圍盒后將包圍盒劃分為若干個矩形柵格,根據(jù)每個柵格的相鄰柵格內(nèi)是否存在二維點來判斷該柵格是否為邊界柵格,對每個邊界柵格提取出二維邊界點后通過映射關(guān)系得到三維散亂點云的邊界點;將三維散亂點云中的邊界點去除后利用基于模糊熵迭代的點云簡化算法對剩余點云進行簡化,將之與點云邊界點合并后構(gòu)成精簡點云;利用基于Delaunay準則的優(yōu)化算法對精簡點云對應(yīng)的二維點集進行三角剖分后將剖分結(jié)果映射到三維空間,最終實現(xiàn)三維散亂點云曲面重構(gòu)。
【專利說明】一種帶邊界約束的散亂點云重構(gòu)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于計算機輔助設(shè)計領(lǐng)域,尤其是涉及一種帶邊界約束的散亂點云重構(gòu)方法。
【背景技術(shù)】
[0002]隨著計算機幾何技術(shù)的不斷發(fā)展,逆向工程作為一種產(chǎn)品設(shè)計再現(xiàn)技術(shù)已經(jīng)引起了各界的注意。由于現(xiàn)代光學(xué)技術(shù)和激光掃描等技術(shù)飛速發(fā)展,點云數(shù)據(jù)已經(jīng)在計算機輔助設(shè)計和計算機圖形學(xué)領(lǐng)域有了廣泛應(yīng)用。而曲面重構(gòu)是實現(xiàn)后續(xù)各項功能的基礎(chǔ),是逆向工程研究的關(guān)鍵技術(shù)之一。
[0003]近年來,曲面重構(gòu)技術(shù)已經(jīng)有深入研究。針對三維散亂點云,目前主要存在兩種三角剖分算法:二維平面投影法和直接三維三角剖分。直接三角剖分的理論和算法都不完善,算法效率不高,并不太實用;目前應(yīng)用比較多的是二維平面投影法,但是對于點云邊界上的點,該算法可能會將并不相鄰的點構(gòu)成三角形,因此在邊界處無法很好地還原物體本來面貌。
[0004]三維散亂點云的曲面重構(gòu)具有廣泛的應(yīng)用前景,同時也是一個具有挑戰(zhàn)性工作,需要進一步的深入研究。

【發(fā)明內(nèi)容】

[0005]本發(fā)明所要解決的技術(shù)問題在于克服現(xiàn)有技術(shù)的不足,本發(fā)明提出了一種帶邊界約束的散亂點云重構(gòu)方法。
[0006]為解決上述技術(shù)問題,本發(fā)明采用的技術(shù)方案如下:一種帶邊界約束的散亂點云重構(gòu)方法,其步驟如下:
[0007]步驟1:利用圓柱面投影法,將原始三維散亂點云Pri_P0intCl0ud映射到二維平面上,得到二維散亂點集Pri_Dot,建立起Pri_PointCloud和Pri_Dot之間的——對應(yīng)關(guān)系;
[0008]步驟2:找到二維散亂點集Pri_Dot的最小包圍盒Box后,將最小包圍盒以一定的間距劃分成矩形柵格,具體步驟如下:
[0009]步驟2.1:遍歷二維散亂點集Pri_Dot,分別得到Pri_Dot中橫向和縱向最值,記為Xmax> Xmin> Ymax 和 Ymin ;
[0010]步驟2.2:以點(Xmax, Ymax)、點(Xmin, Ymin)、點(Xmax, Ymin)和點(Xmin, Ymax)為頂點構(gòu)成一個矩形,該矩形即為最小包圍盒Box ;
[0011]步驟2.3:以點(Xmin, Ymin)為起始頂點,從左到右自下而上將最小包圍盒Box分割成mXn個正方形柵格,每個正方形柵格的邊長為Gap,將每個柵格的頂點坐標信息和柵格序號按照分割生成順序存入柵格集合Mesh中;
[0012]步驟2.4:根據(jù)坐標位置關(guān)系,將二維散亂點集Pri_Dot中所有點劃分到對應(yīng)的柵格中后統(tǒng)計每個柵格內(nèi)是否含有Pri_Dot中的點,若柵格內(nèi)含有散亂點,則定義該柵格為有效柵格,否則定義為無效柵格,最小包圍盒外的部分均設(shè)置為無效柵格;
[0013]步驟3:對于每個有效柵格,判定其是否為邊界柵格,具體步驟如下:
[0014]步驟3.1:統(tǒng)計每個有效柵格上下左右四個相鄰柵格是否均為有效柵格;若是,則判定該柵格不是邊界柵格,若否,則判定該柵格為邊界柵格;
[0015]步驟3.2:對每個邊界柵格,進一步確定它的邊界標記;若它的左柵格為無效柵格,則該柵格為左邊界柵格,若它的上柵格與左柵格均為無效柵格,則該柵格為左上邊界柵格,依此類推;定義上邊界柵格的標記為1,下邊界柵格的標記為2,左邊界柵格的標記為3,右邊界柵格的標記為4,左上邊界柵格的標記為5,左下邊界柵格的標記為6,右上邊界柵格的標記為7,右下邊界柵格的標記為8 ;
[0016]步驟3.3:將每個邊界柵格的坐標信息和其邊界標記同時加入邊界柵格集合EMesh ;
[0017]步驟4:遍歷邊界柵格集合EMesh,找出每個邊界柵格中的邊界點后根據(jù)映射關(guān)系得到三維散亂點云中的邊界點,具體步驟如下:
[0018]步驟4.1:構(gòu)造一個二維邊界點容器Edge_Vector_2D用于存放二維邊界點和一個點云邊界點容器Edge_Vector_3D用于存放散亂點云中的邊界點;
[0019]步驟4.2:任取一個邊界柵格,確定其邊界標記,根據(jù)邊界標記找出該柵格內(nèi)邊界點;若邊界標記為1-4,在每個柵格內(nèi)找一次邊界點,以邊界標記值為I時找上邊界點為例,沿X方向從左到右將邊界柵格平均劃分為G個矩形,找出每個矩形內(nèi)二維散亂點中I坐標最大的點后將該點存入二維邊界點容器Edge_Vector_2D,邊界標記值為2、3、4時找邊界點以邊界標記值為I時找上邊界點為例;若邊界標記為5-8,在每個柵格內(nèi)找兩次邊界點,以邊界標記值為5時找左上邊界點為例,先仿照標志值為I時找出上邊界點后再仿照標志值為3時找出左邊界點后合在一起即為該柵格的邊界點,邊界標記值為6、7、8時找邊界點以邊界標記值為5時找左上邊界點為例;
[0020]步驟4.3:待邊緣柵格集合EMesh內(nèi)所有元素都找到其中的邊界點并存入二維邊緣點容器Edge_Vector_2D后,根據(jù)步驟I中映射時得到的——對應(yīng)關(guān)系,找出Edge_Vector_2D對應(yīng)的三維點,這些點即為散亂點云的邊界點,將它們存入點云邊界點容器Edge_Vector_3D 后轉(zhuǎn)至步驟 5 ;
[0021]步驟5:將三維散亂點云Pri_PointCloud中的邊界點去除,估算剩余三維點的曲率后利用模糊熵迭代法對剩余點進行相應(yīng)比例稀釋,將稀釋剩余點與步驟4中得到的邊界點合在一起構(gòu)成簡化點云Simp_PointCloud,具體步驟如下:
[0022]步驟5.1:從三維散亂點云Pri_P0intCl0ud中將步驟4中得到的邊界點去除,得到非邊界點云nonedge_PCloud,統(tǒng)計nonedge_PCloud中點個數(shù)記為Number ;
[0023]步驟5.2: 對非邊界點云nonedge_PCloud中任意一點Pci,采用穩(wěn)定性較好的拋物面擬合法來估算該點的曲率c,遍歷nonedge_PCloud中所有點,進而得到非邊界點曲率集合 Cur ;
[0024]步驟5.3:將非邊界點曲率集合Cur中曲率值從大到小排列,得到曲率最大值MaxCur、最小值MinCur以及最大最小值之差CurDelta,以5%*CurDelta為劃分閾值,從曲率最小值MinCur開始至曲率最大值終止,將曲率集合Cur分為20組,構(gòu)成集合CurSet,計算出第j組中曲率個數(shù)Cnum[j]以及曲率均值ave_cur[j],其中1≤j≤20 ;[0025]步驟5.4:將CurSet作為一個整體構(gòu)建模糊集,計算出最小模糊熵,其對應(yīng)組別的的曲率均值即作為最佳閾值T,非邊界點云nonedge_PCloud中曲率值大于T的點存入到大曲率點集合BigCur,曲率值小于T的點則存入到小曲率點集合SmallCur ;
[0026]步驟5.5:對于小曲率點集合SmallCur中的點,從首個點開始,每隔η個點選取一個三維點存入簡化點云Simp_PointCloud中直至SmallCur的末尾;對于大曲率點集合BigCur,統(tǒng)計BigCur中點個數(shù)記為Bnum,若Bnum < (Number*l%),則直接將BigCur中所有點存入簡化點云Simp_P0intCl0ud中,否則跳轉(zhuǎn)至步驟5.4后將BigCur作為一個整體繼續(xù)執(zhí)行直至滿足要求;
[0027]步驟5.6:將點云邊界點容器Edge_Vector_3D中所有點也存到簡化點云Simp_PointCloud 中;
[0028]步驟6:從二維散亂點集Pri_Dot中將簡化點云Simp_PointCloud所對應(yīng)的二維數(shù)據(jù)選取出來記為Simp_Dot2d后,利用基于Delaunay準則的優(yōu)化算法進行二維三角剖分后映射回三維空間,具體步驟如下:
[0029]步驟6.1:根據(jù)步驟I中映射時得到的——對應(yīng)關(guān)系,將簡化點云Simp_PointCloud所對應(yīng)的二維坐標從二維散亂點集Pri_Dot中選取出來記為Simp_Dot2d ;
[0030]步驟6.2:構(gòu)造點表PList用于存儲并管理Simp_Dot2d中的二維點,PList中儲存二維點的坐標、序號及點邊界標識,對PList中任意一點,若該點為邊界點則點邊界標識為1,否則為0,序號則表示該點在點表PList中的位置順序;構(gòu)造邊表SList用于存儲并管理構(gòu)造的三角形的邊,若構(gòu)成邊的兩個頂點均為邊界點,則稱之為邊界邊,否則稱為普通邊,SList中儲存已構(gòu)建邊的頂點在PList中的序號、邊邊界標識及其使用次數(shù),當某一邊被添加進三角網(wǎng)格后使用次數(shù)加1,邊界邊最大使用次數(shù)為一次,而普通邊最大使用次數(shù)為兩次,當一條邊的使用次數(shù)達到最大使用次數(shù)時,就將該邊從SList中刪去;構(gòu)建三角形表TList,用于存儲構(gòu)造的三角形的三個頂點的序號,TList初始為空,隨著三角網(wǎng)格構(gòu)建不斷更新;
[0031]步驟6.3:從點表PList中任取一點Pointl,遍歷PList找出與Pointl最臨近的點Point2,連接這兩點得到邊Si并將之存入邊表SList作為其初始值;
[0032]步驟6.4:從邊表SList中選取一條邊,從點表PList中找到符合Delaunay三角剖分準則的點,進而構(gòu)造出三角形;若構(gòu)造的三角形的頂點均為邊界點,且存在一條邊的長度大于力* Gi//;,則判定該三角形無效,其中Gap為步驟2中分割最小包圍盒使用正方形模板邊長;否則就判定構(gòu)造的三角形有效并將該它存入三角形表TList,更新點表PList和邊表SList后將SList中達到最大使用次數(shù)的邊刪除;
[0033]步驟6.5:判斷邊表SList中邊數(shù)量是否為零,若不是則跳轉(zhuǎn)至步驟6.3繼續(xù)構(gòu)造三角形,否則跳至步驟6.6 ;
[0034]步驟6.6:二維空間內(nèi)數(shù)據(jù)點Simp_Dot2d的三角網(wǎng)格化完成,根據(jù)步驟I中映射時得到的——對應(yīng)關(guān)系,三維簡化點云Simp_PointCloud也得到相應(yīng)的三角網(wǎng)格,三維散亂點云曲面重構(gòu)完成。
[0035]本發(fā)明的有益效果是:本發(fā)明提出了一種帶邊界約束的散亂點云重構(gòu)方法,所述方法首先將三維散亂點云映射到二維平面上,對獲取的二維點集提取出二維邊界點后通過映射關(guān)系得到三維散亂點云的邊界點;將三維散亂點云中的邊界點去除后利用基于模糊熵迭代的點云精簡算法對剩余點云進行簡化,將之與點云邊界點合并后構(gòu)成精簡點云;利用基于Delaunay準則的優(yōu)化算法對精簡點云對應(yīng)的二維點集進行三角剖分后將剖分結(jié)果映射到三維空間,最終實現(xiàn)三維散亂點云曲面重構(gòu)。該方法可以簡單有效地得到點云邊界點,同時構(gòu)造網(wǎng)格時簡單快速,效率較高,構(gòu)網(wǎng)準確。
【專利附圖】

【附圖說明】
[0036]圖1是本發(fā)明的一種帶邊界約束的散亂點云重構(gòu)方法整體流程圖。
[0037]圖2是本發(fā)明使用的水壺點云模型。
[0038]圖3是步驟4邊界柵格內(nèi)找邊界點的流程圖。
[0039]圖4是步驟4中提取點云邊界點的效果圖。
[0040]圖5是步驟5中點云簡化之后的效果圖。
[0041]圖6是步驟6中基于Delaunay準則的三角網(wǎng)格化優(yōu)化算法流程圖。
[0042]圖7是本發(fā)明的基于邊界提取的三維點云曲面重構(gòu)效果圖。
【具體實施方式】
[0043]下面結(jié)合附圖,對本發(fā)明提出的一種帶邊界約束的散亂點云重構(gòu)方法進行詳細說明:
[0044]本發(fā)明的一種帶邊界約束的散亂點云重構(gòu)方法,在Windows操作系統(tǒng)中通過VS2010平臺用C++編程語言實現(xiàn)帶邊界約束的散亂點云重構(gòu)方法的全部過程。我們選取本實驗室采用光柵投影三維測量技術(shù)所獲得的水壺點云數(shù)據(jù),點云模型如圖2所示,以此作為實例,基于本發(fā)明提出的方法對三維散亂點云進行曲面重構(gòu),并檢驗其重構(gòu)效果。圖1是本發(fā)明方法整體流程圖,具體步驟如下:
[0045]步驟1:利用圓柱面投影法,將原始三維散亂點云Pri_PointCloud映射到二維平面上,得到二維散亂點集Pri_Dot,建立起Pri_PointCloud和Pri_Dot之間的——對應(yīng)關(guān)系,圓柱面投影法具體步驟可參考文獻“鄭德華.三維激光掃描數(shù)據(jù)處理的理論與方法[D],上海:同濟大學(xué),2005:64-70”;
[0046]步驟2:找到二維散亂點集Pri_Dot的最小包圍盒Box后,將最小包圍盒以一定的間距劃分成矩形柵格,具體步驟如下:
[0047]步驟2.1:遍歷二維散亂點集Pri_Dot,分別得到Pri_Dot中橫向和縱向最值,記為Xmax> Xmin> Ymax 和 Ymin ;
[0048]步驟2.2:以點(Xmax, Ymax)、點(Xmin, Ymin)、點(Xmax, Ymin)和點(Xmin, Ymax)為頂點構(gòu)成一個矩形,該矩形即為最小包圍盒Box ;
[0049]步驟2.3:以點(Xmin, Ymin)為起始頂點,從左到右自下而上將最小包圍盒Box分割成mXn個正方形柵格,每個正方形柵格的邊長為Gap,將每個柵格的頂點坐標信息和柵格序號按照分割生成順序存入柵格集合Mesh中,此次柵格邊長Gap的選取需要參考點云密度以及點云模型實際大小,此次經(jīng)過實驗我們選取Gap=12 ;
[0050]步驟2.4:根據(jù)坐標位置關(guān)系,將二維散亂點集Pri_Dot中所有點劃分到對應(yīng)的柵格中后統(tǒng)計每個柵格內(nèi)是否含有Pri_Dot中的點,若柵格內(nèi)含有散亂點,則定義該柵格為有效柵格,否則定義為無效柵格,最小包圍盒外的部分均設(shè)置為無效柵格;[0051]步驟3:對于每個有效柵格,判定其是否為邊界柵格,具體步驟如下:
[0052]步驟3.1:統(tǒng)計每個有效柵格上下左右四個相鄰柵格是否均為有效柵格;若是,則判定該柵格不是邊界柵格,若否,則判定該柵格為邊界柵格;
[0053]步驟3.2:對每個邊界柵格,進一步確定它的邊界標記;若它的左柵格為無效柵格,則該柵格為左邊界柵格,若它的上柵格與左柵格均為無效柵格,則該柵格為左上邊界柵格,依此類推;定義上邊界柵格的標記為1,下邊界柵格的標記為2,左邊界柵格的標記為3,右邊界柵格的標記為4,左上邊界柵格的標記為5,左下邊界柵格的標記為6,右上邊界柵格的標記為7,右下邊界柵格的標記為8 ;
[0054]步驟3.3:將每個邊界柵格的坐標信息和其邊界標記同時加入邊界柵格集合EMesh ;
[0055]步驟4:遍歷邊界柵格集合EMesh,找出每個邊界柵格中的邊界點后根據(jù)映射關(guān)系得到三維散亂點云中的邊界點,尋找柵格中邊界點方法的流程圖如圖3所示,具體步驟如下:
[0056]步驟4.1:構(gòu)造一個二維邊界點容器Edge_Vector_2D用于存放二維邊界點和一個點云邊界點容器Edge_Vector_3D用于存放散亂點云中的邊界點;
[0057]步驟4.2:任取一個邊界柵格,確定其邊界標記,根據(jù)邊界標記找出該柵格內(nèi)邊界點;若邊界標記為1-4,根據(jù)邊界標記的定義,說明該邊界柵格只有一側(cè)存在邊界點,只需在每個柵格內(nèi)找一次邊界點,以邊界標記值為I時找上邊界點為例,沿X方向從左到右將邊界柵格平均劃分為G個矩形,找出每個矩形內(nèi)二維散亂點中y坐標最大的點后將該點存入二維邊界點容器Edge_Vector_2D,此處使用到的G —般選取步驟2.3中柵格邊長Gap的1/3或1/4,這里我們選取G為4,邊界標記值為2、3、4時找邊界點以邊界標記值為I時找上邊界點為例;若邊界標記為5-8,根據(jù)邊界標記的定義,說明該邊界柵格中有兩側(cè)存在邊界點,則需要在每個柵格內(nèi)找兩次邊界點,以邊界標記值為5時找左上邊界點為例,先仿照標志值為I時找出上邊界點后再仿照標志值為3時找出左邊界點后合在一起即為該柵格的邊界點,邊界標記值為6、7、8時找邊界點以邊界標記值為5時找左上邊界點為例;
[0058]步驟4.3:待邊緣柵格集合EMesh內(nèi)所有元素都找到其中的邊界點并存入二維邊緣點容器Edge_Vector_2D后,根據(jù)步驟I中映射時得到的——對應(yīng)關(guān)系,找出Edge_Vector_2D對應(yīng)的三維點,這些點即為散亂點云的邊界點,將它們存入點云邊界點容器Edge_Vector_3D后轉(zhuǎn)至步驟5,尋找點云邊界點的效果如圖4所示;
[0059]步驟5:將三維散亂點云Pri_PointCloud中的邊界點去除,估算剩余三維點的曲率后利用模糊熵迭代法對剩余點進行相應(yīng)比例稀釋,將稀釋剩余點與步驟4中得到的邊界點合在一起構(gòu)成簡化點云Simp_PointCloud,具體步驟如下:
[0060]步驟5.1:從三維散亂點云Pri_P0intCl0ud中將步驟4中得到的邊界點去除,得到非邊界點云nonedge_PCloud,統(tǒng)計nonedge_PCloud中點個數(shù)記為Number ;
[0061]步驟5.2:對非邊界點云nonedge_PCloud中任意一點Pci,采用穩(wěn)定性較好的拋物面擬合法來估算該點的曲率c,遍歷nonedge_PCloud中所有點,進而得到非邊界點曲率集合Cur,拋物面擬合法具體步驟可參考文獻“周綠,林亨,鐘約先,袁朝龍.曲面重構(gòu)中測量點云精簡方法的研究[J].中國制造業(yè)信息化,2004,33(5): 102-104” ;
[0062]步驟5.3:將非邊界點曲率集合Cur中曲率值從大到小排列,得到曲率最大值MaxCur、最小值MinCur以及最大最小值之差CurDelta,以5%*CurDelta為劃分閾值,從曲率最小值MinCur開始至曲率最大值終止,將曲率集合Cur分為20組,構(gòu)成集合CurSet,計算出第j組中曲率個數(shù)Cnum[j]以及曲率均值ave_cur[j],其中I≤j≤20 ;
[0063]步驟5.4:將CurSet作為一個整體構(gòu)建模糊集,計算出最小模糊熵,其對應(yīng)組別的的曲率均值即作為最佳閾值T,非邊界點云nonedge_PCloud中曲率值大于T的點存入到大曲率點集合BigCur,曲率值小于T的點則存入到小曲率點集合SmalICur,此處模糊熵的計算可參考文獻“陳璋雯,達飛鵬.基于模糊熵迭代的三維點云精簡算法[J].光學(xué)學(xué)報,2013,33(8): 0815001” ;
[0064]步驟5.5:對于小曲率點集合SmallCur中的點,從首個點開始,每隔η個點選取一個三維點存入簡化點云Simp_PointCloud中直至SmallCur的末尾;對于大曲率點集合BigCur,統(tǒng)計BigCur中點個數(shù)記為Bnum,若Bnum < (Number*l%),則直接將BigCur中所有點存入簡化點云Simp_P0intCl0ud中,否則跳轉(zhuǎn)至步驟5.4后將BigCur作為一個整體繼續(xù)執(zhí)行直至滿足要求,此處使用的η與我們選取的稀釋比例di有關(guān)系,選取n=ldi ;
[0065]步驟5.6:將點云邊界點容器Edge_Vector_3D中所有點也存到簡化點云Simp_PointCloud中,簡化點云的效果如圖5所示;
[0066]步驟6:從二維散亂點集Pri_Dot中將簡化點云Simp_PointCloud所對應(yīng)的二維數(shù)據(jù)選取出來記為Simp_Dot2d后,利用基于Delaunay準則的優(yōu)化算法進行二維三角剖分后映射回三維空間,二維三角剖分算法流程圖如圖6所示,具體步驟如下:
[0067]步驟6.1:根據(jù)步驟I中映射時得到的——對應(yīng)關(guān)系,將簡化點云Simp_PointCloud所對應(yīng)的二維坐標從二維散亂點集Pri_Dot中選取出來記為Simp_Dot2d ;
[0068]步驟6.2:構(gòu)造點表PList用于存儲并管理Simp_Dot2d中的二維點,PList中儲存二維點的坐標、序號及點邊界標識,對PList中任意一點,若該點為邊界點則點邊界標識為1,否則為0,序號則表示該點在點表PList中的位置順序;構(gòu)造邊表SList用于存儲并管理構(gòu)造的三角形的邊,若構(gòu)成邊的兩個頂點均為邊界點,則稱之為邊界邊,否則稱為普通邊,SList中儲存已構(gòu)建邊的頂點在PList中的序號、邊邊界標識及其使用次數(shù),當某一邊被添加進三角網(wǎng)格后使用次數(shù)加1,邊界邊最大使用次數(shù)為一次,而普通邊最大使用次數(shù)為兩次,當一條邊的使用次數(shù)達到最大使用次數(shù)時,就將該邊從SList中刪去;構(gòu)建三角形表TList,用于存儲構(gòu)造的三角形的三個頂點的序號,TList初始為空,隨著三角網(wǎng)格構(gòu)建不斷更新;
[0069]步驟6.3:從點表PList中任取一點Pointl,遍歷PList找出與Pointl最臨近的點Point2,連接這兩點得到邊Si并將之存入邊表SList作為其初始值;
[0070]步驟6.4:從邊表SList中選取一條邊,從點表PList中找到符合Delaunay三角剖分準則的點,進而構(gòu)造出三角形;此處使用的Delaunay準則主要包含最小角最大準則和空外接圓準則;所謂最小角最大準則,即在不出現(xiàn)奇異性的情況下,Delaunay三角剖分所形成的三角形中最小角之和大于任意非Delaunay三角剖分的最小角之和;空外接圓準則是指Delaunay三角剖分后任意的三角形的外接圓內(nèi)不包含其他數(shù)據(jù)點;若構(gòu)造的三角形的
頂點均為邊界點,且存在一條邊的長度大于芯~,則判定該三角形無效,其中Gap為步
驟2中分割最小包圍盒使用正方形模板邊長;否則就判定構(gòu)造的三角形有效并將該它存入三角形表TList,更新點表PList和邊表SList后將SList中達到最大使用次數(shù)的邊刪除;[0071]步驟6.5:判斷邊表SList中邊數(shù)量是否為零,若不是則跳轉(zhuǎn)至步驟6.3繼續(xù)構(gòu)造三角形,否則跳至步驟6.6 ;
[0072]步驟6.6:二維空間內(nèi)數(shù)據(jù)點Simp_Dot2d的三角網(wǎng)格化完成,根據(jù)步驟I中映射時得到的——對應(yīng)關(guān)系,三維簡化點云Simp_PointCloud也得到相應(yīng)的三角網(wǎng)格,三維散亂點云曲面重構(gòu)完成,重構(gòu)效果如圖7所示。
[0073]以上實施例只是對于本發(fā)明的部分功能進行描述,但實施例和附圖并不是用來限定本發(fā)明的。在不脫離本發(fā)明之精神和范圍內(nèi),所做的任何等效變化或潤飾,同樣屬于本發(fā)明之保護范圍,因此本發(fā)明的保護范圍應(yīng)當以本申請的權(quán)利要求所界定的內(nèi)容為標準。
【權(quán)利要求】
1.一種帶邊界約束的散亂點云重構(gòu)方法,其特征在于,其步驟如下: 步驟1:利用圓柱面投影法,將原始三維散亂點云Pri_PointCloUd映射到二維平面上,得到二維散亂點集Pri_Dot,建立起Pri_PointCloud和Pri_Dot之間的--對應(yīng)關(guān)系; 步驟2:找到二維散亂點集Pri_Dot的最小包圍盒Box后,將最小包圍盒以一定的間距劃分成矩形柵格; 步驟3:對于每個有效柵格,判定其是否為邊界柵格; 步驟4:遍歷邊界柵格集合EMesh,找出每個邊界柵格中的邊界點后根據(jù)映射關(guān)系得到三維散亂點云中的邊界點; 步驟5:將三維散亂點云Pri_PointCloUd中的邊界點去除,估算剩余三維點的曲率后利用模糊熵迭代法對剩余點進行相應(yīng)比例稀釋,將稀釋剩余點與步驟4中得到的邊界點合在一起構(gòu)成簡化點云Simp_PointCloud ; 步驟6:從二維散亂點集Pri_Dot中將簡化點云Simp_PointCloud所對應(yīng)的二維數(shù)據(jù)選取出來記為Simp_Dot2d后,利用基于Delaunay準則的優(yōu)化算法進行二維三角剖分后映射回三維空間。
2.根據(jù)權(quán)利要求1所述的帶邊界約束的散亂點云重構(gòu)方法,其特征在于,步驟2的具體步驟如下: 步驟2.1:遍歷二維散 亂點集Pri_Dot,分別得到Pri_Dot中橫向和縱向最值,記為Xmax、Xmin、Ymax 和 Ymin ; 步驟 2.2:以點(Xmax, Ymax)、點(Xmin, Ymin)、點(Xmax, Ymin)和點(Xmin, Ymax)為頂點構(gòu)成一個矩形,該矩形即為最小包圍盒Box ; 步驟2.3:以點(Xmin,Ymin)為起始頂點,從左到右自下而上將最小包圍盒Box分割成mXn個正方形柵格,每個正方形柵格的邊長為Gap,將每個柵格的頂點坐標信息和柵格序號按照分割生成順序存入柵格集合Mesh中; 步驟2.4:根據(jù)坐標位置關(guān)系,將二維散亂點集Pri_Dot中所有點劃分到對應(yīng)的柵格中后統(tǒng)計每個柵格內(nèi)是否含有Pri_Dot中的點,若柵格內(nèi)含有散亂點,則定義該柵格為有效柵格,否則定義為無效柵格,最小包圍盒外的部分均設(shè)置為無效柵格。
3.根據(jù)權(quán)利要求1所述的帶邊界約束的散亂點云重構(gòu)方法,其特征在于,步驟3的具體步驟如下: 步驟3.1:統(tǒng)計每個有效柵格上下左右四個相鄰柵格是否均為有效柵格;若是,則判定該柵格不是邊界柵格,若否,則判定該柵格為邊界柵格; 步驟3.2:對每個邊界柵格,進一步確定它的邊界標記;若它的左柵格為無效柵格,則該柵格為左邊界柵格,若它的上柵格與左柵格均為無效柵格,則該柵格為左上邊界柵格,依此類推;定義上邊界柵格的標記為1,下邊界柵格的標記為2,左邊界柵格的標記為3,右邊界柵格的標記為4,左上邊界柵格的標記為5,左下邊界柵格的標記為6,右上邊界柵格的標記為7,右下邊界柵格的標記為8 ; 步驟3.3:將每個邊界柵格的坐標信息和其邊界標記同時加入邊界柵格集合EMesh。
4.根據(jù)權(quán)利要求1所述的帶邊界約束的散亂點云重構(gòu)方法,其特征在于,步驟4的具體步驟如下: 步驟4.1:構(gòu)造一個二維邊界點容器Edge_Vector_2D用于存放二維邊界點和一個點云邊界點容器Edge_Vector_3D用于存放散亂點云中的邊界點; 步驟4.2:任取一個邊界柵格,確定其邊界標記,根據(jù)邊界標記找出該柵格內(nèi)邊界點;若邊界標記為1-4,在每個柵格內(nèi)找一次邊界點,以邊界標記值為I時找上邊界點為例,沿X方向從左到右將邊界柵格平均劃分為G個矩形,找出每個矩形內(nèi)二維散亂點中y坐標最大的點后將該點存入二維邊界點容器Edge_Vector_2D,邊界標記值為2、3、4時找邊界點以邊界標記值為I時找上邊界點為例;若邊界標記為5-8,在每個柵格內(nèi)找兩次邊界點,以邊界標記值為5時找左上邊界點為例,先仿照標志值為I時找出上邊界點后再仿照標志值為3時找出左邊界點后合在一起即為該柵格的邊界點,邊界標記值為6、7、8時找邊界點以邊界標記值為5時找左上邊界點為例; 步驟4.3:待邊緣柵格集合EMesh內(nèi) 所有元素都找到其中的邊界點并存入二維邊緣點容器Edge_Vector_2D后,根據(jù)步驟I中映射時得到的——對應(yīng)關(guān)系,找出Edge_Ve c tor_2D對應(yīng)的三維點,這些點即為散亂點云的邊界點,將它們存入點云邊界點容器Edge_Vector_3D 后轉(zhuǎn)至步驟 5。
5.根據(jù)權(quán)利要求1所述的帶邊界約束的散亂點云重構(gòu)方法,其特征在于,步驟5的具體步驟如下: 步驟5.1:從三維散亂點云Pri_P0intCl0ud中將步驟4中得到的邊界點去除,得到非邊界點云nonedge_PCloud,統(tǒng)計nonedge_PCloud中點個數(shù)記為Number ; 步驟5.2:對非邊界點云nonedge_PCloud中任意一點Ptl,采用穩(wěn)定性較好的拋物面擬合法來估算該點的曲率c,遍歷nonedge_PCloud中所有點,進而得到非邊界點曲率集合Cur ; 步驟5.3:將非邊界點曲率集合Cur中曲率值從大到小排列,得到曲率最大值MaxCur、最小值MinCur以及最大最小值之差CurDelta,以5%*CurDelta為劃分閾值,從曲率最小值MinCur開始至曲率最大值終止,將曲率集合Cur分為20組,構(gòu)成集合CurSet,計算出第j組中曲率個數(shù)Cnum[j]以及曲率均值ave_cur[j],其中I≤j≤20 ; 步驟5.4:將CurSet作為一個整體構(gòu)建模糊集,計算出最小模糊熵,其對應(yīng)組別的的曲率均值即作為最佳閾值T,非邊界點云nonedge_PCloud中曲率值大于T的點存入到大曲率點集合BigCur,曲率值小于T的點則存入到小曲率點集合SmallCur ; 步驟5.5:對于小曲率點集合SmallCur中的點,從首個點開始,每隔η個點選取一個三維點存入簡化點云Simp_PointCloud中直至SmallCur的末尾;對于大曲率點集合BigCur,統(tǒng)計BigCur中點個數(shù)記為Bnum,若Bnum < (Number*l%),則直接將BigCur中所有點存入簡化點云Simp_PointCloud中,否則跳轉(zhuǎn)至步驟5.4后將BigCur作為一個整體繼續(xù)執(zhí)行直至滿足要求; 步驟5.6:將點云邊界點容器Edge_Vector_3D中所有點也存到簡化點云Simp_PointCloud 中。
6.根據(jù)權(quán)利要求6所述的帶邊界約束的散亂點云重構(gòu)方法,其特征在于,步驟6的具體步驟如下: 步驟6.1:根據(jù)步驟I中映射時得到的--對應(yīng)關(guān)系,將簡化點云Simp_PointCloud所對應(yīng)的二維坐標從二維散亂點集Pri_Dot中選取出來記為Simp_Dot2d ; 步驟6.2:構(gòu)造點表PList用于存儲并管理Simp_Dot2d中的二維點,PList中儲存二維點的坐標、序號及點邊界標識,對PList中任意一點,若該點為邊界點則點邊界標識為I,否則為O,序號則表示該點在點表PList中的位置順序;構(gòu)造邊表SList用于存儲并管理構(gòu)造的三角形的邊,若構(gòu)成邊的兩個頂點均為邊界點,則稱之為邊界邊,否則稱為普通邊,SList中儲存已構(gòu)建邊的頂點在PList中的序號、邊邊界標識及其使用次數(shù),當某一邊被添加進三角網(wǎng)格后使用次數(shù)加1,邊界邊最大使用次數(shù)為一次,而普通邊最大使用次數(shù)為兩次,當一條邊的使用次數(shù)達到最大使用次數(shù)時,就將該邊從SList中刪去;構(gòu)建三角形表TList,用于存儲構(gòu)造的三角形的三個頂點的序號,TList初始為空,隨著三角網(wǎng)格構(gòu)建不斷更新;步驟6.3:從點表PList中任取一點Pointl,遍歷PList找出與Pointl最臨近的點Point2,連接這兩點得到邊Si并將之存入邊表SList作為其初始值; 步驟6.4:從邊表SList中選取一條邊,從點表PList中找到符合Delaunay三角剖分準則的點,進而構(gòu)造出三角形;若構(gòu)造的三角形的頂點均為邊界點,且存在一條邊的長度大于,則判定該三角形無效,其中Gap為步驟2中分割最小包圍盒使用正方形模板邊長;否則就判定構(gòu)造的三角形有效并將該它存入三角形表TList,更新點表PList和邊表SList后將SList中達到最大使用次數(shù)的邊刪除; 步驟6.5:判斷邊表SList中邊數(shù)量是否為零,若不是則跳轉(zhuǎn)至步驟6.3繼續(xù)構(gòu)造三角形,否則跳至步驟6.6 ; 步驟6.6:二維 空間內(nèi)數(shù)據(jù)點Simp_Dot2d的三角網(wǎng)格化完成,根據(jù)步驟I中映射時得到的——對應(yīng)關(guān)系,三維簡化點云Simp_PointCloud也得到相應(yīng)的三角網(wǎng)格,三維散亂點云曲面重構(gòu)完成。
【文檔編號】G06T17/00GK103679807SQ201310717328
【公開日】2014年3月26日 申請日期:2013年12月24日 優(yōu)先權(quán)日:2013年12月24日
【發(fā)明者】達飛鵬, 劉超, 律帥, 吳佳, 陳璋雯, 王辰星 申請人:焦點科技股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
固安县| 花莲市| 贺州市| 洛宁县| 建始县| 利川市| 兰西县| 贵州省| 花莲市| 龙陵县| 临沧市| 荥经县| 叶城县| 共和县| 天峻县| 湘潭市| 鸡东县| 赣榆县| 华池县| 云安县| 鄂托克前旗| 巴彦县| 渭南市| 静宁县| 柳河县| 宝应县| 平原县| 隆德县| 潮州市| 连州市| 磴口县| 游戏| 施秉县| 蓬溪县| 宾阳县| 岳池县| 霍城县| 神池县| 阳城县| 奇台县| 娄底市|