发明名称 一种带边界约束的散乱点云重构方法
摘要 本发明公开了一种带边界约束的散乱点云重构方法。所述方法首先将三维散乱点云映射到二维平面上,对获取的二维点集求取最小包围盒后将包围盒划分为若干个矩形栅格,根据每个栅格的相邻栅格内是否存在二维点来判断该栅格是否为边界栅格,对每个边界栅格提取出二维边界点后通过映射关系得到三维散乱点云的边界点;将三维散乱点云中的边界点去除后利用基于模糊熵迭代的点云简化算法对剩余点云进行简化,将之与点云边界点合并后构成精简点云;利用基于Delaunay准则的优化算法对精简点云对应的二维点集进行三角剖分后将剖分结果映射到三维空间,最终实现三维散乱点云曲面重构。
申请公布号 CN103679807B 申请公布日期 2016.08.24
申请号 CN201310717328.0 申请日期 2013.12.24
申请人 焦点科技股份有限公司 发明人 达飞鹏;刘超;律帅;吴佳;陈璋雯;王辰星
分类号 G06T17/00(2006.01)I 主分类号 G06T17/00(2006.01)I
代理机构 南京知识律师事务所 32207 代理人 张苏沛
主权项 一种带边界约束的散乱点云重构方法,其特征在于,其步骤如下:步骤1:利用圆柱面投影法,将原始三维散乱点云Pri_PointCloud映射到二维平面上,得到二维散乱点集Pri_Dot,建立起Pri_PointCloud和Pri_Dot之间的一一对应关系;步骤2:找到二维散乱点集Pri_Dot的最小包围盒Box后,将最小包围盒以一定的间距划分成矩形栅格;具体包括如下步骤2.1‑2.4:步骤2.1:遍历二维散乱点集Pri_Dot,分别得到Pri_Dot中横向和纵向最值,记为Xmax、Xmin、Ymax和Ymin;步骤2.2:以点(Xmax,Ymax)、点(Xmin,Ymin)、点(Xmax,Ymin)和点(Xmin,Ymax)为顶点构成一个矩形,该矩形即为最小包围盒Box;步骤2.3:以点(Xmin,Ymin)为起始顶点,从左到右自下而上将最小包围盒Box分割成m×n个正方形栅格,每个正方形栅格的边长为Gap,将每个栅格的顶点坐标信息和栅格序号按照分割生成顺序存入栅格集合Mesh中;步骤2.4:根据坐标位置关系,将二维散乱点集Pri_Dot中所有点划分到对应的栅格中后统计每个栅格内是否含有Pri_Dot中的点,若栅格内含有散乱点,则定义该栅格为有效栅格,否则定义为无效栅格,最小包围盒外的部分均设置为无效栅格;步骤3:对于每个有效栅格,判定其是否为边界栅格;具体包括如下步骤3.1‑3.3:步骤3.1:统计每个有效栅格上下左右四个相邻栅格是否均为有效栅格;若是,则判定该栅格不是边界栅格,若否,则判定该栅格为边界栅格;步骤3.2:对每个边界栅格,进一步确定它的边界标记;若它的左栅格为无效栅格,则该栅格为左边界栅格,若它的上栅格与左栅格均为无效栅格,则该栅格为左上边界栅格,依此类推;定义上边界栅格的标记为1,下边界栅格的标记为2,左边界栅格的标记为3,右边界栅格的标记为4,左上边界栅格的标记为5,左下边界栅格的标记为6,右上边界栅格的标记为7,右下边界栅格的标记为8;步骤3.3:将每个边界栅格的坐标信息和其边界标记同时加入边界栅格集合EMesh;步骤4:遍历边界栅格集合EMesh,找出每个边界栅格中的边界点后根据映射关系得到三维散乱点云中的边界点;具体包括如下步骤4.1‑4.3:步骤4.1:构造一个二维边界点容器Edge_Vector_2D用于存放二维边界点和一个点云边界点容器Edge_Vector_3D用于存放散乱点云中的边界点;步骤4.2:任取一个边界栅格,确定其边界标记,根据边界标记找出该栅格内边界点;若边界标记为1‑4,在每个栅格内找一次边界点,以边界标记值为1时找上边界点为例,沿x方向从左到右将边界栅格平均划分为G个矩形,找出每个矩形内二维散乱点中y坐标最大的点后将该点存入二维边界点容器Edge_Vector_2D,边界标记值为2、3、4时找边界点以边界标记值为1时找上边界点为例;若边界标记为5‑8,在每个栅格内找两次边界点,以边界标记值为5时找左上边界点为例,先仿照边界标记值为1时找出上边界点后再仿照边界标记值为3时找出左边界点后合在一起即为该栅格的边界点,边界标记值为6、7、8时找边界点以边界标记值为5时找左上边界点为例;步骤4.3:待边缘栅格集合EMesh内所有元素都找到其中的边界点并存入二维边缘点容器Edge_Vector_2D后,根据步骤1中映射时得到的一一对应关系,找出Edge_Vector_2D对应的三维点,这些点即为散乱点云的边界点,将它们存入点云边界点容器Edge_Vector_3D后转至步骤5;步骤5:将三维散乱点云Pri_PointCloud中的边界点去除,估算剩余三维点的曲率后利用模糊熵迭代法对剩余点进行相应比例稀释,将稀释剩余点与步骤4中得到的边界点合在一起构成简化点云Simp_PointCloud;具体包括如下步骤5.1‑5.6:步骤5.1:从三维散乱点云Pri_PointCloud中将步骤4中得到的边界点去除,得到非边界点云nonedge_PCloud,统计nonedge_PCloud中点个数记为Number;步骤5.2:对非边界点云nonedge_PCloud中任意一点p<sub>0</sub>,采用稳定性较好的抛物面拟合法来估算该点的曲率c,遍历nonedge_PCloud中所有点,进而得到非边界点曲率集合Cur;步骤5.3:将非边界点曲率集合Cur中曲率值从大到小排列,得到曲率最大值MaxCur、最小值MinCur以及最大最小值之差CurDelta,以5%*CurDelta为划分阈值,从曲率最小值MinCur开始至曲率最大值终止,将曲率集合Cur分为20组,构成集合CurSet,计算出第j组中曲率个数Cnum[j]以及曲率均值ave_cur[j],其中1≤j≤20;步骤5.4:将CurSet作为一个整体构建模糊集,计算出最小模糊熵,其对应组别的的曲率均值即作为最佳阈值T,非边界点云nonedge_PCloud中曲率值大于T的点存入到大曲率点集合BigCur,曲率值小于T的点则存入到小曲率点集合SmallCur;步骤5.5:对于小曲率点集合SmallCur中的点,从首个点开始,每隔n个点选取一个三维点存入简化点云Simp_PointCloud中直至SmallCur的末尾;对于大曲率点集合BigCur,统计BigCur中点个数记为Bnum,若Bnum<(Number*1%),则直接将BigCur中所有点存入简化点云Simp_PointCloud中,否则跳转至步骤5.4后将BigCur作为一个整体继续执行直至满足要求;步骤5.6:将点云边界点容器Edge_Vector_3D中所有点也存到简化点云Simp_PointCloud中;步骤6:从二维散乱点集Pri_Dot中将简化点云Simp_PointCloud所对应的二维数据选取出来记为Simp_Dot2d后,利用基于Delaunay准则的优化算法进行二维三角剖分后映射回三维空间;具体包括如下步骤6.1‑6.6:步骤6.1:根据步骤1中映射时得到的一一对应关系,将简化点云Simp_PointCloud所对应的二维坐标从二维散乱点集Pri_Dot中选取出来记为Simp_Dot2d;步骤6.2:构造点表PList用于存储并管理Simp_Dot2d中的二维点,PList中储存二维点的坐标、序号及点边界标识,对PList中任意一点,若该点为边界点则点边界标识为1,否则为0,序号则表示该点在点表PList中的位置顺序;构造边表SList用于存储并管理构造的三角形的边,若构成边的两个顶点均为边界点,则称之为边界边,否则称为普通边,SList中储存已构建边的顶点在PList中的序号、边界标识及其使用次数,当某一边被添加进三角网格后使用次数加1,边界边最大使用次数为一次,而普通边最大使用次数为两次,当一条边的使用次数达到最大使用次数时,就将该边从SList中删去;构建三角形表TList,用于存储构造的三角形的三个顶点的序号,TList初始为空,随着三角网格构建不断更新;步骤6.3:从点表PList中任取一点Point<sub>1</sub>,遍历PList找出与Point<sub>1</sub>最临近的点Point<sub>2</sub>,连接这两点得到边s<sub>1</sub>并将之存入边表SList作为其初始值;步骤6.4:从边表SList中选取一条边,从点表PList中找到符合Delaunay三角剖分准则的点,进而构造出三角形;若构造的三角形的顶点均为边界点,且存在一条边的长度大于<img file="FDA0000944121320000041.GIF" wi="218" he="69" />则判定该三角形无效,其中Gap为步骤2中分割最小包围盒使用正方形模板边长;否则就判定构造的三角形有效并将该它存入三角形表TList,更新点表PList和边表SList后将SList中达到最大使用次数的边删除;步骤6.5:判断边表SList中边数量是否为零,若不是则跳转至步骤6.3继续构造三角形,否则跳至步骤6.6;步骤6.6:二维空间内数据点Simp_Dot2d的三角网格化完成,根据步骤1中映射时得到的一一对应关系,三维简化点云Simp_PointCloud也得到相应的三角网格,三维散乱点云曲面重构完成。
地址 210061 江苏省南京市高新区星火路软件大厦A座12F