基于自适应阈值的三维点云分段式去噪方法
2022-03-24任彬崔健源李刚宋海丽
任彬,崔健源,李刚,宋海丽
(1 石家庄铁道大学机械工程学院,石家庄050043)
(2 中国人民解放军陆军工程大学,石家庄050043)
0 引言
近年来,无人驾驶、智能驾驶技术正快速发展。现阶段,车辆对外部信息的获取主要是依靠激光雷达、毫米波雷达和摄像头等三类传感器。与另外两者相比,激光雷达具有高精度、高分辨率的优点,用其探测行车环境成为了一种趋势。作为车辆上的一种重要传感器,激光雷达可以直接获取与周围物体的距离和方位角等信息,即点云数据。由于受到天气、装配误差等因素的影响,点云中常含有一定数量的噪声点。噪声点的存在会对点云配准、语义分割等步骤产生严重影响,导致配准误差大、分割精度低、耗时长等问题。因此,对点云数据进行去噪成为了点云处理的重要研究方向之一。
点云去噪既要求快速高效地去除噪声点,又要求尽可能地保留点云的细节特征,比如边缘、尖角、孔洞等。针对以上问题,国内外研究人员提出了许多点云去噪算法。魏硕等[1]采用了结合基于密度的噪声空间聚类应用算法和统计滤波算法的单光子点云去噪方法,其性能优于经典的半径滤波算法。刘利恒等[2]提出了一种几何特征保持的点云去噪算法,首先通过栅格化去除大尺度噪声,再通过模糊C 均值聚类算法删除小尺度噪声。程知等[3]为了提高差分光柱像运动激光雷达探测信噪比,提出了一种基于集合经验模态分解和奇异值分解的混合降噪法,有效地识别和滤除了噪声。WANG W 等[4]提出一种基于Laplace 分布的去噪算法,可以有效保留原始数据中有用细节信息。CRUZ C 等[5]提出一种基于非局域增强卷积神经网络的去噪算法,通过结合卷积神经网络和非局部滤波器实现了图像的有效去噪。CENTIN M 等[6]提出一种几何保真的Signoroni网格去噪算法,该算法不依赖于点云规模,对目标应用领域具有挑战性的情况去噪效果良好。李凯等[7]对初步去噪后的点云使用改进后的统计滤波方法,设定阈值进行去噪,但参数的设定比较依赖经验,对结果也有着较大的影响。杨秀芳[8]等采用提升小波变换和改进型阈值函数去噪技术对强噪声干扰的雷达生命信号进行去噪处理,取得了的良好效果。吴俊威等[9]结合混合增采样策略和领域自适应选择策略提出了一种新的点云滤波算法,并取得了良好的效果。JANKE P 等[10]将贝叶斯统计第一次用于点云去噪邻域,其主要思想是将测量和重构都定义为点云,并用这种有限维的表示来描述所有统计假设。SCHALL O 等[11]提出了一种基于核密度估计函数的聚类去噪方法,其具有效率高、鲁棒性强的优点,但无法准确处理点云中的尖锐特征。为了解决城市点云的去噪问题,杨鹏等[12]设计了一种基于最小二乘密度聚类的城市点云去噪算法,其利用最小二乘法求解各维度的密度拟合曲线,再利用密度拟合曲线设置阈值并提取各维度合限点集的交集作为最终结果。实验表明其对噪声点具有较好的剔除效果,满足城市点云去噪任务的要求。CASTILLO E 等[13]将主成分分析法与约束非线性最小二乘问题相结合,与传统PCA 相比,新方法自动为相邻点分配适当的权重,以最大程度地减少跨奇异点的贡献,并在实验中取得了良好的结果。ORTS-ESCOLANO S 等[14-16]提出利用Growing Neural Gas 神经网络进行点云去噪,并结合三维滤波器和下采样技术,在实验中取得了良好的效果。MATTEI E 等[17]提出了一种移动鲁棒主成分分析法,该算法通过计算局部平均值进行去噪,且无需提前知道法线方向。ZHANG Y 等[18]提出了一种三维扩散滤波降噪算法,实现了自适应去噪。WANG J 等[19]使用均值漂移聚类算法对点云中的离群噪声点进行去除。为了在点云去噪中既保持尖锐区域的特征又使平滑区域高度光顺,王晓辉等[20]提出了一种基于法向量距离分类的去噪方法,其采用加权局部最优投影算法和双边滤波算法分别对平滑区域和尖锐区域进行滤波去噪,有效去除了点云中的孤点。
根据噪声点与非噪声点之间的欧式距离,划分为远信号噪声点和近信号噪声点两类,依据各自不同的特征,本文提出了一种基于自适应阈值的三维点云分段式去噪方法,即首先利用基于非线性函数的阈值自适应去噪算法进行远信号噪声的去除,再利用基于曲率中值的去噪算法进行近信号噪声的去除。基于非线性函数的阈值自适应去噪算法首先对输入点云进行栅格化处理,将栅格到激光雷达的距离作为输入,通过调用设定的非线性函数计算阈值,去除栅格内点云数量小于阈值的栅格;其次对剩余栅格进行聚类,将聚类集内的栅格数量小于阈值的聚类集去除。基于曲率中值的去噪算法通过比较某一点曲率与该点邻域内所有点的曲率中值,进行是否为噪声点的判断。
1 方法原理与步骤
点云数据中的噪声可以分为两大类:近信号噪声和远信号噪声等,其中,远信号噪声又可分为孤立噪声点和孤立噪声簇两类。其具体关系如图1所示。
图1 数据点的分类Fig.1 Classification of data points
各类型噪声特点为:1)孤立噪声点的点云密度低且邻域内无信号点;2)孤立噪声簇的点云密度高,邻域内无信号点,且领域内大部分为噪声点;3)近信号噪声点的点云密度高,领域内大部分为信号点。远信号噪声点距离信号点较远,邻域内无信号点,易于分离去除;而近信号噪声点距离信号点较近,邻域内有信号点,不易去除。综合考虑去噪时间和去噪效果,本文提出一种基于自适应阈值的三维点云分段式去噪方法,即利用基于非线性函数的阈值自适应去噪算法和基于曲率的去噪算法,分别对近信号噪声点和远信号噪声点进行处理,流程图如图2所示。
图2 去噪算法流程图Fig.2 Flow chart of the proposed method
基于非线性函数的阈值自适应去噪算法主要目的是去除输入点云数据中的远信号噪声,包括孤立噪声点和孤立噪声簇,这可以减少后续细去噪阶段的计算量。步骤为1)对输入的点云数据进行栅格化处理,将整个点云空间划分为有序的栅格,并计算栅格的平均点云密度,设为初始阈值;2)将栅格到原点的距离作为输入,调用设定的非线性函数计算阈值,达到动态调整阈值的效果,若该栅格达到阈值,则保留;否则,则删去;3)对剩余栅格进行聚类,若某一聚类集中栅格的数量小于设定阈值,则判断该聚类集内的点为孤立噪声簇,删除该聚类集。具体细节将在1.1 节详细说明。
基于曲率的去噪算法主要目的是去除近信号噪声。本文选用邻域曲率比较的方法,通过比较选定点与邻域内所有点的曲率的中值来判断其是否为噪声点。在比较时选用中值而不是均值,可以有效抵御野值的干扰,避免信息点被误删除。具体细节将在1.2 节详细说明。
1.1 基于非线性函数的阈值自适应远信号去噪
基于非线性函数的阈值自适应去噪算法的目的是去除远信号噪声。其中,孤立噪声点邻域内的点数少,可通过比较栅格点云密度进行去除。孤立噪声簇是由多个噪声点组成,其栅格点云密度可能与信号点所在栅格相近,但信号点所在栅格大多相互连接,而孤立噪声簇所在栅格大多较为孤立,邻域栅格数量少。
第一阶段是去除孤立噪声点,其流程图如图3(a)所示。输入点云一般是无序的,首先选择栅格建立点云拓扑结构,该步骤可视为栅格中值下采样。然后根据阈值进行孤立噪声点删除,由于点云随着与传感器间距离的增加,会逐渐变得稀疏,所以在设定点云密度阈值时,根据距离对阈值进行动态调整。本文提出一种自适应点云密度阈值去噪策略,根据式(1)计算整体点云密度d0。
图3 基于非线性函数的阈值自适应去噪算法流程图Fig.3 Flow charts of the threshold adaptive denoising algorithm based on nonlinear function
式中,num_of_points 为输入点云中的数据点数量,num_of_vaild_grids 为有效栅格数量,有效栅格是指至少含有一个数据点的栅格。得到整体点云密度d0后,由式(2)计算单个栅格的密度阈值,即
式中,l为栅格中心到原点的欧式距离。由式(2)可知,距离原点越远的栅格,其点云密度阈值也会越小,未达到阈值的栅格内的点即为噪声点。通过距离对阈值动态调整,可以避免点云数据本身近密远疏的性质对去噪产生影响。
第二阶段是去除孤立噪声簇,其流程图如图3(b)所示。孤立噪声簇是多个噪声点的聚集,其所在栅格能够达到第一阶段的密度阈值,无法去除。但孤立噪声簇所在栅格大多孤立存在,栅格集中的栅格数量少,而信号点和近信号噪声所在栅格大多相互连接,栅格集中的栅格数量多。因此,采用栅格集中的栅格数量对孤立噪声簇进行判断,将栅格集中栅格数量小于设定阈值的栅格集视为孤立噪声簇所在栅格。将栅格数量阈值设定为3,具体步骤为:
步骤1,对任一栅格gi,统计其紧密相邻的栅格的数量Ni,紧密相邻意为该邻域栅格与gi有一个共用面。假设gi的坐标为(xi,yi,zi),只需统计(xi-1,yi,zi)、(xi+1,yi,zi)、(xi,yi-1,zi)、(xi,yi+1,zi)、(xi,yi,zi-1)和(xi,yi,zi+1)等6 个坐标处是否存在有效栅格即可。
步骤2,若Ni大于等于2,则gi不是噪声簇所在栅格,移动至下一栅格并重复步骤1。若Ni为1,即gi只有1 个紧密相邻的栅格gi+1,则对gi+1进行步骤1 并得到Ni+1,此时不将gi计入Ni+1中。若Ni+1大于1,则gi不是孤立噪声簇所在的栅格,否则gi即为孤立噪声簇所在的栅格。若Ni为0,则可直接判断得出gi是孤立噪声簇所在的栅格。
步骤3,移动到下一个栅格,重复步骤1 和步骤2,直至所有栅格都被遍历。
1.2 基于曲率的近信号去噪
基于曲率的去噪算法的目的是去除近信号噪声,其离信号点的距离较近。本文通过提取曲率几何特征来实现近信号噪声的去除,核心思路为采用邻域内的曲率中值来调整噪声点的判断阈值,因为相比于邻域内平均值,野值对中值的影响更小,所以利用曲率中值来调整判断阈值能够降低误判概率。点云中数据点的曲率可利用移动最小二乘法[21]计算得到
对于点云中的任意一点pi(xi,yi,zi),设其切平面方程为
利用点pi到其切平面的距离,构建k邻域点集的观测方程,为
式中,(xi,j,yi,j,zi,j)为点pi的第j个邻近点的坐标;di是点pi到切平面的距离;di,j为点pi的第j个邻近点到切平面的距离。利用高斯函数计算点pi及其邻域内任意一点pj的权w,为
式中,h为距离常数。建立如式(7)所示的约束准则,即
由约束准则可得
由式(8)可解得Y,进而求得点pi的法向量ni=[a,b,c]T,最终根据法向量与曲率的关系,任意一点pi的曲率ci可由式(10)计算
式中,nj为点pi的第j个邻近点的法向量。得到所有点的曲率后,即可进行中值比较,完成近信号噪声点的去除。其流程图如图4所示。具体步骤为:
图4 基于曲率的去噪算法流程图Fig.4 Flow chart of the denoising algorithm based on curvature
步骤2:计算P内所有点的曲率。
步骤3:对某一点pi,通过K-D 树[22]找到其k个最近邻,记为p1,p2,p3,…,pk。
步骤4:将pi和p1,p2,p3,…,pk各自的曲率进行排序,选出其中值c作为初始阈值。
步骤5:若pi的曲率ci不在[0.5c,1.5c]的范围内,则pi为噪声点;反之则不是噪声点。
步骤6:取下一个点,重复执行步骤3~5,直到点云P中的所有点都被判断为止。
当点云数量较大时,步骤3 中寻找pi的k个最近邻域点的时间较长。为此,预先在步骤1 中采用K-D 树建立已经去除了远信号噪声的输入点云的拓扑结构,以快速且准确地找到邻域点。
2 实验结果分析与对比
2.1 实验结果分析
为验证方法有效性,本节采用公共数据集进行实验。实验数据来自斯坦福大学三维扫描库(The Stanford 3D Scanning Repository),该数据库中包含从多个角度扫描得到兔子模型(Bunny)和龙模型(Dragon)的点云图,被扫描模型如图5所示。本文选用其中的bun000、bun180、dragonStandRight_0 和dragonStandRight_120 等四组点云数据,如图6所示。
新时期下,随着我国电厂企业的持续深化改革,虽然其整体竞争力不断提升,但是依然存在诸多问题。同时,在以往国有企业管理模式下,电厂企业内部组织结构存在重叠和交叉的情况,对企业的长远发展形成了制约。因此,电厂企业要对内部组织结构进行优化,通过扁平化管理方式,提升组织结构的合理性,在招聘员工过程中,也要遵循人尽其才的原则,按照员工能力分配工作岗位,保证员工在适合的岗位中充分发挥其能力和才智。
图5 被扫描模型Fig.5 The scanned models
图6 原始公共点云Fig.6 Origin point clouds
原始数据全部视为信号点,即原始数据中无任何噪声点,通过对其进行加入高斯噪声点得到带噪点云,噪声点数约为原始数据点数的10%,带噪点云如图7所示。
对于图7所示的带噪点云,采用本文提出的基于自适应阈值的三维点云分段式去噪方法进行去噪,首先采用基于非线性函数的自适应去噪算法进行远信号噪声的去除;然后采用基于曲率的去噪算法进行近信号噪声的去除,最终的去噪结果如图8所示。
图7 带噪点云Fig.7 The point clouds with noise
由图8 可知,去噪后,消除了大部分的噪声点,并且有效地保留了原始点云中的尖锐、边缘特征及细节特征,是一种有效的点云去噪方法。从图8(a)中可以看到,兔耳周围的噪声被去除,保留的兔耳边缘细腻。在图8(c)中,龙的腰身附近的极大部分噪声点已被去除,且腰身上的凸起细节均被完整保留下来,为后续的三维重建提供了丰富的细节。
图8 本文算法的去噪结果Fig.8 The results of the proposed method
为进一步分析本文去噪算法的性能,通过统计四组数据下的点云大小、去噪精确度和耗时等数据,得出了四组去噪精确度均在95%以上,如表1所示。其中,去噪精确度P为
式中,Nc表示去除的噪声点数目,Nt表示噪声点总数。
由表1 可知,当点云大小为40 000 个点左右时,耗时约为13 s,耗时与输入点云大小满足正线性关系,并具有较好的并行性,即对任意栅格或数据点进行判定时不会影响其它栅格或数据点的处理,有效缩短了去噪时间,且不影响去噪精确度,也符合目前计算机的多线程的发展趋势。
表1 本文方法实验结果Table 1 The result of the proposed method
2.2 实验结果对比
为进一步验证本文方法的去噪性能,对图7(a)和图7(c)的带噪点云再分别采用半径滤波算法、文献[17]和文献[18]的算法进行去噪实验。去噪结果对比图分别见图9、10。
图9 Bunny 去噪结果对比Fig.9 Comparison graph of Bunny
从结果对比图中可以看出,与采用半径滤波算法、文献[17]算法和文献[18]算法等进行比较,本文算法能够在较大范围内、较高噪声的情况下,进行大规模散乱点云去噪,去噪效果明显,细节特征保留。
为更准确地进行对比,在表2 中分别统计了四种算法在相同输入下的去噪精确度和耗时。从中可以看出,与半径滤波算法、文献[17]算法和文献[18]算法等相比,本文算法针对不同类型噪声的特点,有针对性地分别采取了基于非线性函数的阈值自适应去噪算法和基于曲率中值的去噪算法,故而去噪精确率最高。
图10 Dragon 去噪结果对比Fig.10 Comparison graph of Dragon
在耗时方面,通过保证算法良好的并行性,引入多线程并行化处理技术,在去噪精确率高于文献[17]算法和文献[18]算法高的情况下,耗时减少1 s 左右。与半径滤波算法相比,在两种场景下,虽然耗时较长,但去噪精确度提高了约15%。这是因为半径滤波算法仅依靠点云密度对数据点进行判断,算法简单,只需计算待判断点的指定领域范围内的点数即可,所以运行速度较快,但无法很好地去除与信号点的点云密度相近的近信号噪声点,导致去噪精确率较低,两种场景下分别低于比本文方法14.6%和14.9%,本文算法则通过曲率中值算法完成了该类噪声点的滤除。因此可以证明,本文提出的基于自适应阈值的三维点云分段式去噪方法是一种更加有效的点云去噪方法。
3 结论
点云去噪是点云处理中的一个重要环节,针对点云去噪问题,本文提出了一种基于自适应阈值的三维点云分段式去噪方法,分别采用了基于非线性函数的阈值自适应去噪算法进行远信号噪声的去除,基于曲率的去噪算法进行近信号噪声的去除。通过对斯坦福大学公共点云数据进行去噪实验,实验结果表明本文方法在保持物体点云数据的结构特征的同时,能够有效删除噪声点,达到了95%以上的去噪精确度,为后期三维重建提供了可靠的数据源。
但本文方法也尚有不足之处,例如需要自行调整的参数较多,包括栅格大小、邻域点数量等,本文除了栅格大小外,只是固定地采用了一套参数。如何减少参数的数量、如何调整参数范围以及如何更快地搜索邻域等是下一步研究重点。