随着三维扫描技术的迅速发展,点云数据在各个领域得到了广泛应用,如计算机视觉、虚拟现实、自动驾驶、文化遗产保护等[1-3]。然而,由于三维扫描设备精度的局限性、外部条件变化以及采集过程中的不确定性,点云数据通常会含有噪声。这些噪声不仅会影响点云的精度,还会对后续处理步骤(如点云配准、重建和分类等)产生不利影响[4-5]。因此,为提高点云数据的质量和效果,需要根据具体情况对采集到的点云数据进行处理和优化。
近年来,越来越多的学者对三维点云数据的去噪方法进行了深入研究,并提出了一些点云数据去噪方法。Fleishman等[6]基于双边滤波提出了一种兼顾各向异性和特征保持的去噪算法,双边滤波因子的局限性,可能导致点云数据被过度平滑。任彬等[7]基于非线性函数和曲率提出了一种分段式自适应阈值去噪算法,实现了噪声的自适应调整与聚类去除。Zhou等[8]提出了一种双阈值去噪方法,显著提高了去噪速度。焦亚男等[9]对点云数据中的噪声进行了尺度评估,并结合改进的双边滤波算法,在保留点云特征的基础上显著提升了处理速度。陈亚超等[10]基于双边滤波,提出了一种参数自适应的点云去噪算法,减少了参数输入误差,提升了处理效率。Li等[11]采用加权局部最优投影(weighted locally optimal projection,WLOP)将点云的法向量信息整合到投影平面上,在去噪过程中保持了特征,表现出较好的鲁棒性。袁华等[12]通过对噪声进行分类并采用改进的双边滤波方法进行处理,避免了点云过度平滑和细节失真。
传统的点云去噪方法主要包括统计滤波、均值滤波、中值滤波以及双边滤波等[13]。统计滤波通过计算点云邻域内点的统计特性去除离群点,但在处理边界时可能会导致细节丢失;双边滤波通过同时考虑空间域和强度域的信息来平滑点云,可以较好地保留边界细节,但对噪声的抑制能力相对有限。为了兼顾噪声抑制和细节保留,本文提出了一种基于曲率与法线信息分割的改进点云去噪方法。该方法首先利用曲率与法线信息将点云划分为平坦区域和非平坦区域,然后对不同的区域采用改进的统计滤波与双边滤波进行处理,以得到更好地去噪效果。算法具体流程如图1所示。
图1 基于曲率法线信息分割的去噪方法流程图
Figure 1 Flow chart of denoising method based on curvature normal information segmentation
在不规则的点云数据中,点与其邻域之间的特征信息往往难以直接提取,需要构建空间数据结构,以有效地分析数据。常见的空间数据结构有KD树、八叉树、四叉树等,KD树用于低维空间的高效近邻搜索和范围查询;八叉树和四叉树分别适用于三维和二维空间的数据组织[14]。本文采用KD树构建空间数据结构,首先,计算各个维度的方差,选择方差最大的维度作为当前划分维度;其次,在所选维度上对数据点进行排序,并选择中位数作为当前节点的划分点,将数据分为左右两个子集;最后,递归地对每个子集重复上述过程,依次选择下一个最大方差的维度作为分割维度,直到所有点都被添加到树中为止。构建KD树数据结构能够有效缩小搜索范围,从而减少近邻搜索的时间。KD树结构如图2所示。
图2 KD树结构
Figure 2 KD tree structure
KNN搜索利用KD树通过递归遍历来快速找到给定点的最近邻。搜索过程中,树结构帮助快速定位潜在邻域,并通过剪枝策略减少无关节点的访问,从而高效地找到距离查询点的最近点。具体过程如图3所示。
图3 KNN搜索流程图
Figure 3 KNN search flow chart
点云区域分割是点云数据处理中的关键一步,可将点云划分为具有相似几何特征或属性的区域[15],以识别和分类不同的表面区域。分割方法可以基于多种特征,如曲率、法向量、颜色或强度等。本文利用点云数据的曲率与法向信息对点云进行分割,曲率信息可以帮助区分平坦区域和非平坦区域,法向量的一致性可以进一步验证区域的平坦性。
曲率信息是点云数据重要特征信息,反映了点云表面的局部几何特征,通过量化表面的弯曲程度来揭示点云的形状和结构[16]。曲率信息可以帮助区分平坦、凸起、凹陷或边缘区域,对点云数据的分析和处理至关重要。常见的曲率计算方法包括主成分分析(principal component analysis,PCA)和最小二乘平面拟合,但是PCA对点云数据中的噪声较为敏感,尤其是在点云数据质量较低或噪声较多的情况下,计算得到的曲率值可能不准确,从而影响后续的分析和处理结果;最小二乘平面拟合通常假设邻域点在一个平面上,对复杂曲面或高曲率区域的拟合效果较差,对于实际复杂曲面的点云数据,平面拟合可能无法准确捕捉到真实的几何特征。
本文采用奇异值分解法[17](SVD)对点云数据的曲率信息进行估计。SVD可以适应不同规模和分布的点云数据,对数据中的噪声和离群点具有较好的鲁棒性,能够提供精确的特征值和特征向量,对于曲率的计算至关重要。
SVD曲率估计的具体步骤如下。
步骤1 对于点云中的点pi,通过KNN搜索,确定其邻域点集N(pi)。
步骤2 基于点pi的邻域N(pi)构建协方差矩阵C。
(1)
式中:
为pi邻域的质心。
(2)
步骤3 对协方差矩阵C进行奇异值分解:
C=UλUT。
(3)
式中:λ为对角矩阵,包含3个奇异值λ1、λ2、λ3(其中λ1≥λ2≥λ3),这些奇异值反映了邻域点在3个主轴方向上的分布。
步骤4 进行曲率估计,通过最小奇异值λ3来估计,通常定义曲率ki为
(4)
曲率值反映了局部表面的形状特征,曲率值较小的区域通常对应于相对平坦或逐渐变化的表面;曲率值较大的区域通常对应于表面弯曲剧烈或存在突变的地方,这些表面可能具有较大的凸起、凹陷或尖锐的边缘。
算法1 曲率估计。
输入:点云数据ptCloud,邻域点数K;
输出:各点的曲率ki。
①读取点云数据ptCloud;
②P=ptCloud.Location获取点云的三维坐标;
③for each i∈P;
④[indices,dists]=KNN(ptCloud,point,K);
⑤nnpoint=P(indices,:)获取邻域点的坐标;
⑥centroid=mean(nonpoint,1)计算质心;
⑦Dmean=nnpoint-centroid去质心;
⑧
构建协方差矩阵;
⑨s=SVD(C)奇异值分解;
⑩ki=s(3)/sum(s)计算曲率;
end
输出曲率ki。
点云的法线信息是点云表面特征的重要信息,它描述了点云中每个点局部表面的方向[18]。在点云去噪处理中,法线信息可以帮助识别和剔除离群点或异常点,描述点云的局部形状特征。主成分分析法(PCA)是常采用的法线估计方法,但对噪声敏感,在点云稀疏或噪声较多的情况下可能产生误差,当点云的局部形状复杂时,PCA 可能无法有效捕捉表面的真实法线方向。
本文基于距离加权来实现法线估计,利用点之间的距离信息进行加权,在噪声较多或点云密度不均匀的情况下提供稳定的法线估计。
基于距离加权平均的法线估计步骤如下。
步骤1 对于点云中的点pi,通过KNN搜索,确定其邻域点集N(pi)。
步骤2 计算邻域点集合N(pi)的质心![]()
(5)
式中:|N(pi)|为邻域点的数量;pj为邻域内的每个点。
步骤3 基于距离计算每一个邻域点的权重,权重可定义为
(6)
式中:pj为邻域点;pi为目标点;ε为控制距离衰减的参数。
计算加权的协方差矩阵C:
(7)
加权协方差矩阵考虑了各点与中心点之间的距离,距离越近的点对协方差矩阵的贡献越大。
步骤4 对加权协方差矩阵C进行奇异值分解:
C=VλVT。
(8)
式中:V为特征向量矩阵;λ为对角矩阵,包含3个奇异值λ1、λ2、λ3(其中λ1≥λ2≥λ3)。
步骤5 法向量np是最小奇异值λ3对应的特征向量v3,即
np=v3。
(9)
法向量夹角θi的计算公式为
(10)
式中:θi为采样点pi的法向量ni与其邻域点pj法向量nj之间的夹角。
算法2 法线估计。
输入:点云数据ptCloud,邻域点数K,距离衰减参数ε;
输出:各点的法线。
①读取点云数据ptCloud;
②P=ptCloud.Location,N=size(P,1)获取点云的三维坐标;
③for each i∈1:N;
④[indices,dists]=KNN(ptCloud,point,K);
⑤nnpoint=P(indices,:)获取邻域点的坐标;
⑥centroid=mean(nonpoint,1)计算质心;
⑦Dmean=nnpoint-centroid去质心;
⑧
计算每个邻域点到目标点的距离;
⑨weights=exp(-dd/(2ε2))计算权重;
⑩
加权协方差矩阵计算;
[V,S]=SVD(C)奇异值分解;
normal(i,:)=V(:,3)′法向量为最小奇异值对应的特征向量;
end
输出法线。
基于曲率与法线信息可以将点云数据分割为平坦区域与非平坦区域。计算整个点云数据的平均曲率,把平均曲率作为曲率阈值χ,对于点云数据中的点,如果其曲率ki≤χ,则将其归为平坦区域,反之,则将其归为非平坦区域。根据法线之间的角度差异进一步区分平坦区域和非平坦区域。计算点的法线与邻域点法线的夹角,若夹角小于阈值,则说明这些点属于同一平坦区域。为验证本文区域分割算法的有效性,采用如图4所示的Horse点云与实测鼠标点云作为研究对象进行分割实验。
图4 点云区域分割
Figure 4 Point cloud area segmentation
对区域分割结果进行统计如表1所示。由图4与表1可以看出,基于曲率与法线信息能够有效地把Horse点云与实测鼠标点云分割为平坦区域与非平坦区域,同时对各区域的特征也能够很好地保留。
表1 区域分割结果统计
Table 1 Statistics on region segmentation results
点云原始点数平坦区域数据非平坦区域数据Horse484853383414651鼠标31832228004738275
传统的统计滤波是一种简单有效的点云去噪方法,通过分析各点与其邻域内其他点的距离关系来判断该点是否为离群点,适于处理孤立噪声点[19]。该方法对点云的密度变化敏感,使用固定邻域大小可能导致在密度不均匀的点云中误判离群点或保留噪声点[20]。
本文基于曲率信息对传统的统计滤波进行改进,曲率能反映点云表面形状的几何特征,通过结合曲率信息,可以使滤波结果更加准确。改进的统计滤波具体步骤如下。
步骤1 首先根据上文方法计算点云中的每个点pi的曲率ki。
步骤2 基于曲率调整邻域大小,在高曲率区域,例如边缘或角点,使用较小的邻域K可以避免误判正常点为离群点;在低曲率区域,使用较大的邻域K更准确地估计点与邻域的距离。
动态调整邻域Ki的公式可定义为
Ki=K0(1+βki)。
(11)
式中:K0为初始邻域大小;β为曲率邻域权重影响因子,取值一般在 0.1 到 1.0 之间。调整β,可以控制曲率对邻域大小的影响程度。曲率变化较平缓的数据集,β通常取较大的值;曲率变化较大的数据集,可以适当减小β值。
步骤3 曲率加权的距离计算,将曲率ki作为加权因子,调整各点与其邻近点之间的距离:
(12)
式中:dij为pi与其邻域点pj的欧氏距离;γ为控制曲率影响的权重参数,取值通常在0~1。在曲率变化较大的点云中,适当增大γ值有助于更好地捕捉形状特征。如果需要对离群点更加敏感,可以选择更大的γ值,以增强曲率的影响。
步骤4 计算平均距离及标准差。
(13)
(14)
步骤5 设置阈值L=μ+ζσ,ζ为计算系数。当di>L时,该点被标记为离群点,并将其剔除,遍历点云中所有的点,以完成统计滤波。
算法3 改进的统计滤波。
输入:点云数据ptCloud,初始邻域K0,曲率邻域权重影响因子β,曲率加权距离的权重参数γ,计算系数ζ;
输出:去除离群点后的点云ptCloud_filtered。
①读取点云数据ptCloud并计算点云的曲率ki;
②Ki=zeros(length(ptCloud.Location),1)初始化邻域大小数组;
③for i∈1:length(ptCloud.Location);
④Ki=K0·(1-β·ki)计算调整后的邻域大小;
⑤end
⑥distance=zeros(length(ptCloud.Location),1)初始化distance数组用于存储点的加权距离;
⑦for i∈1:length(ptCloud.Location)
⑧[indices,dists]=KNN(ptCloud,point,Ki)使用Ki执行KNN搜索;
⑨weightedDistances=dists·(1+γ·ki)计算加权距离;
⑩distance(i)= mean(weightedDistances)计算加权平均距离;
end
μ=mean(distance)计算平均距离;
σ=std(distance)计算标准差;
L=μ+ζ·σ设置离群点阈值;
for i∈1:length(ptCloud.Location)
outlierIndices=find(distance(i)>L)使用阈值筛选离群点;
newLocation=ptCloud.Location创建新的点云对象;
newLocation(outlierIndices,:)=[]删除离群点;
ptCloud_filtered=pointCloud(newLocation)生成去噪后的点云数据;
end
双边滤波最早应用于图像处理领域,随着技术的发展,双边滤波的应用扩展到了三维点云处理领域[21]。在点云数据处理中,双边滤波通过在点云数据中结合空间距离和点属性的相似性来平滑噪声,具有良好的特征保持与平滑性能[22]。
双边滤波的表达式为
(15)
式中:
为滤波处理后的点;pi为原始数据点;α为双边滤波因子;n为pi的法向量。
双边滤波因子的表达式为
α=
(16)
为提高双边滤波的稳定性和特征保持能力,本文对双边滤波因子进行了改进,改进后的因子为
α′=
(17)
式中:‖pi-pj‖为点pj到pi的空间距离;〈pi-pj,nj〉为向量积;Wc(x)为光顺滤波权函数,Ws(x)为特征保持权函数,均为高斯核函数,表示近邻点对pi的影响权值。其表达式为
(18)
式中:σc为点pi到其邻域点距离的影响因子,用来控制光顺程度;σs为点pi到邻近点的距离在其法向上的投影对点pi的影响因子,用来控制特征保持程度。σc取值为点pi的邻域半径,σs取值为点pi的邻域点标准差。
本文算法在硬件配置为Intel(R) Core(TM)i7-13700H CPU(主频2.40 GHz)、16 GB内存,操作系统为Windows 11的计算机平台上,使用MATLAB编程语言在MATLAB R2023a环境中实现。为验证本文算法的有效性,利用斯坦福兔子点云模型与实测直齿轮点云模型进行实验分析。
设置4组实验对兔子点云进行降噪处理,将统计滤波、双边滤波、DBSCAN与本文算法进行对比。结果如表2所示。使用统计滤波、双边滤波、DBSCAN和本文算法去噪得到的结果如图5所示。
表2 去噪效果对比
Table 2 Comparison of denoising effects
算法点数去噪前去噪后去噪率/%统计滤波389473653680.36双边滤波389473677972.27DBSCAN389473635686.37本文算法389473601297.83
图5 兔子点云模拟实验
Figure 5 Rabbit point cloud simulation experiment
从表2及图5的实验结果可以看出,本文算法的去噪率达到了97.83%,高于其他3种去噪方法,并且在去除噪声的同时,能够很好地保留点云模型的边缘细节,不会过度光顺模型。
为进一步验证本文算法的有效性,对实测的直齿轮点云数据进行了相应的处理。图6(a)为使用三坐标测量机搭载Header LS60激光扫描测头对直齿轮进行扫描,图6(b)为获取的点云数据。从图6(b)可以看出,直齿轮点云数据周围混杂着噪声点,会影响直齿轮点云数据的后续处理。
图6 直齿轮点云数据处理
Figure 6 Spur gear point cloud data processing
采用本文算法对直齿轮点云数据进行处理,处理结果如图6(g)所示,图6(c)、图6(d)为直齿轮点云的非平坦区域及其去噪后的结果;图6(e)、图6(f)分别为直齿轮点云的平坦区域及其去噪后的结果;图6(h)为直齿轮点云重建模型,表3为直齿轮的去噪结果统计。
表3 直齿轮的去噪结果统计
Table 3 Statistics of denoising results for spur gear
点云点数去噪前去噪后去除噪声直齿轮整体151610815125203588非平坦区域355515354776739平坦区域116059311577442849
由图6和表3可以看出,本文算法可以有效去除混杂在直齿轮三维点云周围的噪声点,同时很好地保留了直齿轮的齿形特征。
将去噪后的直齿轮整体点云和轮齿部分点云分别与基于Solidworks导出的直齿轮模型进行比较,并计算两者之间的偏差。图7为基于Solidworks导出的标准直齿轮模型。
图7 基于Solidworks导出的标准直齿轮模型
Figure 7 Standard spur gear model exported based on SolidWorks
图8(a)为直齿轮整体点云数据的对比结果;图8(b)为其距离偏差;图8(c)为轮齿部分点云数据的对比结果;图8(d)为其距离偏差。表4为直齿轮整体与轮齿部分点云的距离偏差统计。
表4 点云模型距离偏差统计
Table 4 Distance deviation statistics of point cloud models 单位:mm
点云数据最大偏差平均偏差标准偏差整体点云0.5064660.0332090.145332轮齿部分0.5064660.1032050.216608
图8 直齿轮点云数据对比
Figure 8 Comparison of spur gear point cloud data
从图8和表4可以看出,经过本文算法处理后,直齿轮整体点云中90%以上的点与标准直齿轮模型之间的距离偏差小于0.2 mm。从图8和表4可以看出,直齿轮轮齿部分点云中90%以上的点与标准直齿轮模型的距离偏差小于0.25 mm。这表明,本文算法具有良好的精度,能够有效保留零件的几何特征。
本文提出了一种基于曲率与法线信息分割点云的去噪方法。首先采用SVD与距离加权对三维点云的曲率与法线信息进行估计,然后基于曲率与法线信息将三维点云划分为平坦区域与非平坦区域,最后利用改进的统计滤波与双边滤波进行处理。对斯坦福兔子点云模型采用不同的算法进行对比验证,同时对实测直齿轮点云模型进行处理验证,结果表明,本文算法能够有效且精确地去除点云中的噪声,同时准确保留点云模型的几何特征,为后续处理奠定了基础。
[1] 丁少闻,张小虎,于起峰,等.非接触式三维重建测量方法综述[J].激光与光电子学进展,2017,54(7): 70003.DING S W,ZHANG X H,YU Q F,et al.Overview of non-contact 3D reconstruction measurement methods[J].Laser &Optoelectronics Progress,2017,54(7): 70003.
[2] 段红娟.简述三维点云处理技术的研究[J].电子技术与软件工程,2013(14): 137-138.DUAN H J.A brief introduction to the research of 3D point cloud processing technology[J].Electronic Technology &Software Engineering,2013(14): 137-138.
[3] 陈义飞,郭胜,潘文安,等.基于多源传感器数据融合的三维场景重建[J].郑州大学学报(工学版),2021,42(2): 80-86.CHEN Y F,GUO S,PAN W A,et al.3D scene reconstruction based on multi-source sensor data fusion[J].Journal of Zhengzhou University (Engineering Science),2021,42(2): 80-86.
[4] 杜超,向亚琪,樊国政.基于激光雷达的点云数据处理研究[J].信息技术与信息化,2024(3): 83-86.DU C,XIANG Y Q,FAN G Z.Research on point cloud data processing based on lidar[J].Information Technology and Informatization,2024(3): 83-86.
[5] 杨必胜,梁福逊,黄荣刚.三维激光扫描点云数据处理研究进展、挑战与趋势[J].测绘学报,2017,46(10): 1509-1516.YANG B S,LIANG F X,HUANG R G.Progress,challenges and perspectives of 3D LiDAR point cloud processing[J].Acta Geodaetica et Cartographica Sinica,2017,46(10): 1509-1516.
[6] FLEISHMAN S,DRORI I,COHEN-OR D.Bilateral mesh denoising[J].ACM Transactions on Graphics,2003,22(3): 950-953.
[7] 任彬,崔健源,李刚,等.基于自适应阈值的三维点云分段式去噪方法[J].光子学报,2022,51(2): 319-332.REN B,CUI J Y,LI G,et al.A three-dimensional point cloud denoising method based on adaptive threshold[J].Acta Photonica Sinica,2022,51(2): 319-332.
[8] ZHOU S T,LIU X L,WANG C Y,et al.Non-iterative denoising algorithm based on a dual threshold for a 3D point cloud[J].Optics and Lasers in Engineering,2020,126: 105921.
[9] 焦亚男,马杰,钟斌斌.一种基于尺度变化的点云并行去噪方法[J].武汉大学学报(工学版),2021,54(3): 277-282.JIAO Y N,MA J,ZHONG B B.Point cloud parallel de-noising algorithms based on scale change[J].Engineering Journal of Wuhan University,2021,54(3): 277-282.
[10] 陈亚超,樊彦国,禹定峰,等.考虑法向离群的自适应双边滤波点云平滑及IMLS评价方法[J].图学学报,2023,44(1): 131-138.CHEN Y C,FAN Y G,YU D F,et al.Adaptive bilateral filtering point cloud smoothing and IMLS evaluation method considering normal outliers[J].Journal of Graphics,2023,44(1): 131-138.
[11] LI B,SCHNABEL R,KLEIN R,et al.Robust normal estimation for point clouds with sharp features[J].Computers &Graphics,2010,34(2): 94-106.
[12] 袁华,庞建铿,莫建文.基于噪声分类的双边滤波点云去噪算法[J].计算机应用,2015,35(8): 2305-2310.YUAN H,PANG J K,MO J W.Denoising algorithm for bilateral filtered point cloud based on noise classification[J].Journal of Computer Applications,2015,35(8): 2305-2310.
[13] 鲁冬冬,邹进贵.三维激光点云的降噪算法对比研究[J].测绘通报,2019(增刊2): 102-105.LU D D,ZOU J G.Comparative research on denoising algorithms of 3D laser point cloud[J].Bulletin of Surveying and Mapping,2019(S2): 102-105.
[14] 赵尔平,刘炜,党红恩.海量3D点云数据压缩与空间索引技术[J].计算机应用,2018,38(1): 146-151,193.ZHAO E P,LIU W,DANG H E.Data compression and spatial indexing technology for massive 3D point cloud[J].Journal of Computer Applications,2018,38(1): 146-151,193.
[15] LUO N,JIANG Y Y,WANG Q.Supervoxel-based region growing segmentation for point cloud data[J].International Journal of Pattern Recognition and Artificial Intelligence,2021,35(3): 2154007.
[16] 朱广堂,叶珉吕.基于曲率特征的点云去噪及定量评价方法研究[J].测绘通报,2019(6): 105-108.ZHU G T,YE M L.Research on the method of point cloud denoising based on curvature characteristics and quantitative evaluation[J].Bulletin of Surveying and Mapping,2019(6): 105-108.
[17] LITTLE A V,MAGGIONI M,ROSASCO L.Multiscale geometric methods for data sets I: multiscale SVD,noise and curvature[J].Applied and Computational Harmonic Analysis,2017,43(3): 504-567.
[18] GUO X Y,SHI S H,ZHOU M,et al.Application of normal vectors and color features in semantic segmentation of colored point clouds[C]∥2023 China Automation Congress (CAC).Piscataway: IEEE,2023: 8547-8552.
[19] 焦晨,王宝锋,易耀华.点云数据滤波算法研究[J].国外电子测量技术,2019,38(11): 18-22.JIAO C,WANG B F,YI Y H.Research on point cloud data filtering algorithms[J].Foreign Electronic Measurement Technology,2019,38(11): 18-22.
[20] 魏硕,赵楠翔,李敏乐,等.结合改进DBSCAN和统计滤波的单光子去噪算法[J].激光技术,2021,45(5): 601-606.WEI S,ZHAO N X,LI M L,et al.Single photon denoising algorithm combined with improved DBSCAN and statistical filtering[J].Laser Technology,2021,45(5): 601-606.
[21] 张志强,王万玉.一种改进的双边滤波算法[J].中国图象图形学报,2009,14(3): 443-447.ZHANG Z Q,WANG W Y.A modified bilateral filtering algorithm[J].Journal of Image and Graphics,2009,14(3): 443-447.
[22] DIGNE J,DE FRANCHIS C.The bilateral filter for point clouds[J].Image Processing on Line,2017,7: 278-287.