三维点云孔洞修复(附Python代码和公共点云数据集链接)

1.孔洞成因
(1)物体自身缺失 (2)物体自身形状复杂,很多凹凸面不够规则甚至存在空腔,空腔内部无法被三维激光扫描仪扫描到 (3)物体部分区域对激光扫描不敏感,未被扫描上 (4)扫描仪的扫描稳定性
2.孔洞类型
按位置不同分为边缘孔洞和内部孔洞,边缘孔一般为非封闭孔洞,其孔边界也是模型边界的一部分;而内部孔为封闭孔洞。内部孔按形状不同又可分为普通孔洞、间隙孔洞以及环形岛屿孔洞,普通孔洞只有一条形状较规则的闭合边界;间隙孔洞形状狭窄且较长,多出现于模型倒角处;环形岛屿孔洞的缺失区域呈环状,内部包含孤立的岛屿面片。按面积大小分为大孔洞和小孔洞;按特征差异分类的孔洞,在整体模型面结构上孔洞分为平面孔洞、跨面孔洞、凸面孔洞以及凹面孔洞,区别在于所处特征区域不同。
3.孔洞识别方法
(1)基于三角网格化的孔洞识别顾名思义就是先将采集到的点云模型三角网格化,然后在三角网格结构中根据各个三角形面片中点线的拓扑关系进行孔洞识别。 (2)基于散乱点云的孔洞识别:在进行有效的孔洞边界识别时,由于散乱点云个体之间没有特定的连接关系且数据量巨大,通过建立点云数据空间索引遍历数据点,并根据孔洞边界点特征在空间中找到满足条件的特征点。 根据空间维度不同,基于点云数据的识别算法又可分为基于二维平面投影映射的识别和基于三维空间的识别。 基于二维平面投影映射的边界识别典型算法包括创建投影平面,计算投影点的角度标准阈值差,从而确定孔洞边界点对投影点进行参数化后,根据邻域点集在采样点处的场力大小之和可以表示点集的平均值,设置阈值,从而识别点云的边界特征点;其他还包括加权度量、吊锤法等判别边界特征点。 基于三维空间的边界识别算法则多考虑点云数据本身的三维特征,基于点云曲率、邻域点法向夹角等设置单一或混合阈值进行检测,该类算法对参数设置敏感度高。 此外,针对特定的点云数据,还有基于核回归等边界提取方法,该类算法不通过阈值参数提取孔洞边界,适用于特定的内部不规则尖锐孔洞的识别优化。 (3)基于K邻域搜索的孔洞识别:利用KD树建立散乱点云的空间拓扑关系后,采用距离判别法识别出点云模型中的孔洞,即计算采样点到其k个邻近点的欧氏距离,通过距离是否大于给定阈值来鉴定是否为边界点。
4.孔洞修复方法
1、基于几何的修复方法 基于传统几何的修复方法一般分为两种:①三角网格化点云修复的方法;②散乱点云模型修复的方法。 (1)三角网格化点云修复方法:该修复方法主要思想是将点云三角网格化,通过网格化的模型寻找到每个点之间的拓扑关系。通过网格中每条边拓扑属性寻找边界,若该边两侧都是三角形则该边为内部边;若该边一侧为三角形,另一侧为多边形,则为孔洞边界。那么连接成边界的两个点则为边界点。(该类算法在点云分布比较均匀和数据量较小时,能够获取较好的修补效果,但当点云数据量较大时,由于建立三角网格所需时间较多,难以取得理想的效果) 1)基于三角网格的孔洞修复主要分为基于体素的算法和基于表面的算法。 a.基于体素的修复算法首先将网格模型变换成由体素表示的模型,然后在离散空间中应用不同的方法进行孔洞修复,其采用的典型算法为有向体素融合,在此基础上根据孔洞邻域表面信息,使用多种偏微分方程进行聚敛优化等。 b.基于表面的典型算法则是在描述点云的拓扑结构后,根据特征线匹配、几何特征、形状计算和能量函数、径向基函数等进行孔洞修复。 总体来说,基于三角网格的修复对于一般的规则物体(如机械零件、动物点云模型)具有较好的修复效果,对不规则的大型点云模型或孔洞区域较大的网格模型修复效果不佳。 (2)散乱点云模型修复孔洞修复一般过程为:识别孔洞边界,根据边界点特征进行离散化曲面构建;通过曲面上的点,进行点云的修复。 3、基于模型检索的修复方法是通过部分输入数据与大型形状数据库中的模板模型进行匹配完成形状修复。检索的关键问题是构造有效检索的特征。 4、基于深度学习的修复方法当前主要为通过卷积神经网络对点云特征学习,直接生成点云数据的修复方法。基于深度学习网络的修复方法是直接在原始点云上运行,而无须对基础