一种利用点云数据提取建筑物屋顶面的方法
2024-01-09贾旭斌
王 亮,刘 鹏,贾旭斌
(1.青海省柴达木综合地质矿产勘查院,青海 格尔木 816099;2.青海省柴达木盆地盐湖资源勘探研究重点实验室,青海 格尔木 816099)
区域增长法是一种简单高效的分割方法,它通过选择种子点将邻近点聚集在一起,但容易受到种子点选取和增长方法的影响[1]。本文采用一种分步提取屋顶面的方法,首先通过Alpha Shapes 算法确定屋顶面的边界,并利用法向量和曲率特征选择合适的屋顶面种子点,然后通过区域增长算法提取出屋顶面,最后利用张量投票算法进行面片后处理,从而实现从点云中提取屋顶面。
1 方法原理
本文分步提取屋顶面方法的流程如图1所示。
图1 本文流程图
1.1 屋顶面轮廓线提取
Alpha Shapes[2]是一种可以有效提取离散点边界的算法,该算法只需要设置滚动圆半径r,即可提取边界点。如图2 中,设置滚动圆半径为r,以点P1(x1,y1)和P2(x2,y2)为例,根据2点坐标和半径r计算圆心坐标,i代表圆心R1和R2,则圆心坐标表示为式(1)、(2)、(3)。
图2 Alpha Shapes示意图
计算点P1、P2周围的点到圆心R1或R2距离,若到其中一个圆心的距离小于r的点不存在,到另一个圆心的距离小于r 的点存在,则表明此处为边界。通过滚动圆一次遍历所有点,从而筛选出边界点。
1.2 屋顶面种子点选取
法向量和曲率是提取建筑物屋顶面的重要依据。在三维空间中,垂直于平面的向量称为该平面的法向量,由于点云在空间中是离散分布的,所以点云的法向量需要借助周围邻域点组成的局部平面来确定,邻域点的选择借助K-d Tree 实现,则点的法向量可以定义为该点和k个邻域点构成的最佳拟合平面确定的法向量[3-5]。设Pi为点云中一点,{Pi1,Pi2,…,Pik}为k个邻域点,通过邻域点的最小二乘拟合平面记为S,使所有邻域点到平面S的拟合残差平方和最小,平面S可表示为:
式中,为平面S 的法向量,d为坐标原点到平面S的距离。
拟合平面会经过邻域点的重心,所以,拟合平面的求解可以转换为邻域点协方差矩阵特征值的求解。假设其对应的协方差矩阵为C,邻域重心为,则协方差矩阵C和邻域重心表示为:
由公式(5)、(6)可求得协方差矩阵的特征值λi1、λi2、λi3,且λi1≤λi2≤λi3,特征值对应的特征向量分别为,最小特征值对应的特征向量即为点Pi的法向量,即
曲率则可以表示为:
屋顶面种子点的选取依据法向量和曲率值。种子点的单位法向量与邻域点的单位法向量点积为1,与邻近点的曲率足够小,则将其作为屋顶面种子点用于屋顶面点云的聚类。
1.3 屋顶面面片提取
区域生长算法是一种利用定义准则由种子点向邻域扩张生成更大区域的算法。在种子点的基础上,用法向量作为约束,向周围邻域点进行扩张,再以邻域点为中心继续向外生长。图3显示以点P1为种子点向外生长的示意图,搜索8 连通方向的邻域点,判断邻域点是否满足约束条件,若满足,则对邻域点进行标记,再以标记的邻域点为中心,继续搜索周围未标记的邻域点,以此类推,直到所有的点检索完成。
图3 区域生长示意图
1.4 面片后处理
上述步骤中,我们已经对提取的建筑物面片点和非面片点进行了标记,但是屋顶面交界处点云存在屋顶面竞争的问题。因交界处点的法向量容易存在偏差,影响屋顶面交界处的点云提取,面片后处理主要是通过张量投票算法[6-7]实现,假设标记为非面片点的点集为F={q1,q2,q3,…qi,…,qm},首先检索qi的邻域点,利用邻域点组成向量矩阵,并利用法向量张量对qi进行投票,然后判断qi与邻域点构成面片的可能性。当qi与邻域点构成面片且qi的邻域点为面片点时,则认为点qi为面片点。
2 实验结果与精度分析
2.1 实验数据
为验证本文方法的可行性,选取国际摄影测量与遥感学会提供的4 组城区点云数据csite1、csite2、csite3和csite4进行实验。其中,csite1数据有缺口,地形起伏较大,主要包含大量建筑物、树木、道路等;csite2数据有缺口,包含建筑物、植被、道路、桥梁;csite3数据有缺口,包含建筑物、道路、植被;csite4数据有缺口,主要包含建筑物、道路和植被。因本文主要研究建筑物屋顶面点云的提取,所以对数据进行了滤波处理,采用CSF滤波算法得到实验数据的非地面点云。
2.2 评价指标
为了定量分析点云分割精度,选用完整率Cp、正确率Cr和提取质量Cq对屋顶面提取结果进行评价。
式中,TP为正确提取的屋顶面点个数;FP为错误提取的屋顶面点个数;FN为未被提取的屋顶面点个数。
2.3 实验结果
本文采用上述方法对4 组实验数据滤波后的非地面点进行处理,滤波的效果会对屋顶面种子点的筛选产生影响,如果有较多的地面点被错分为非地面点,那么筛选的屋顶面种子点中就会存在一部分错分的地面点,将地面点误认为是屋顶面点。
本文需要设置的参数主要有滚动圆半径r、法向量阈值ε和邻域点K。滚动圆半径r 表示离散点提取边界的精细程度,r越小提取的离散点边界越精细。本文中依据点与点距离的平均值设置滚动圆半径r。法向量是以点所在局部平面的法向量作为该点的法向量,在计算法向量时一般以该点8邻域或16邻域内的点所构成的局部平面进行计算,从而筛选出与邻域点的夹角满足条件的种子点,本文中设置的夹角阈值ε为15°,当该点与邻域点的夹角小于15°时认为时平面点,可作为种子点。利用筛选的种子点进行生长向外扩张,遍历所有种子点邻域内的激光脚点,对满足条件的点和不符合条件的点分别进行标记,直到所有的点检索完成。邻域点K通常设置为8。
如图4中所示csite1局部区域的处理,计算点云的法向量和曲率特征,统计邻域点法向量夹角大小并设置阈值条件筛选种子点,以此作为区域生长的种子点,并以Alpha Shapes 提取的边界点限制生长的屋顶面面片范围,最后采用张量投票对同一屋顶面的不同面片进行合并,得到屋顶面点云。
图4 csite1局部区域
4组实验数据的提取结果如图5所示。
图5 数据csite1、csite2、csite3、csite4的建筑物屋顶面提取结果
图5中屋顶面的提取结果表明,本文方法能很好地从点云数据中提取出建筑物屋顶面。为了进一步验证本文算法提取屋顶面的效果,利用完整率、正确率和提取质量作为评价因子,与RANSAC算法、区域增长算法提取屋顶面的效果进行对比,可知,本文方法可以在完整率Cp上达到与RANSAC算法、区域增长算法相近的精度,但在正确率Cr和提取质量Cq上,本文方法表现出明显的优势,正确率Cr达到95%以上,提取质量Cq在94%以上,主要在于2种算法在提取屋顶面点云时存在过度分割或欠分割的现象,如图6所示,以数据2中部分区域为例,展示了RANSAC方法、区域增长方法与本文方法提取的屋顶面效果对比图,从图中可以看出RANSAC方法和区域增长方法在进行屋顶面提取时,存在相邻屋顶面欠分割的情况,RANSAC方法在提取小面积屋顶面边缘时存在错误提取的问题。
图6 屋顶面提取效果对比图
通过定量、定性的对比本文方法与其他2 种方法的提取效果,说明本文方法可以较好地实现屋顶面的提取,且能达到很好地提取效果。
3 结 语
本文提出的分步提取屋顶面点云的方法,能较好地实现屋顶面地提取,满足实际工程的需要。但本文方法也存在步骤较多、数据处理连贯性不强的缺点,且实验未对本文算法处理数据的效率进行评估,计算效率方面的研究还需要继续跟进,在今后的研究学习中将继续改进和完善其中的不足之处。