基于多视图像点云的建筑物屋顶分割算法研究

2022-06-06 12:57陈鑫祥蒲冰鑫王瑞胜钟若飞
地理空间信息 2022年5期
关键词:面片云中屋顶

陈鑫祥,蒲冰鑫,俞 建,王瑞胜,钟若飞

(1. 广东省国土资源技术中心,广东 广州 510098;2. 首都师范大学 资源环境与旅游学院,北京 100048;3. 广州大学 地理科学学院,广东 广州 510006)

建筑物是一种可用于估算能源[1]需求、生活、城市人口和财产税的基本GIS 数据。基于机载点云的建筑物三维建模,主要是以建筑物屋顶为基础进行几何模型绘制[2];同时建筑物屋顶识别作为屋顶轮廓线生成的关键一步[3],在“乡村振兴”的时代背景下,对农村地籍调查工作大有裨益。全自动建筑物屋顶识别算法将有助于解决传统人工方法从海量点云中提取建筑物屋顶成本高、耗时长的问题。基于低空无人机获取的多视倾斜图像经过计算机视觉技术处理后,可得到多视图像MVS 点云[4]。相较于机载激光雷达技术,倾斜摄影技术具有速度快、成本低、风险小等优点,且MVS点云不仅包含地物详细的三维信息,还包含纹理信息和光谱信息,因此MVS点云后处理技术是未来研究的趋势[5]。鉴于此,研究基于MVS 点云的全自动建筑物屋顶识别技术十分必要。

通过查阅大量文献可知,现存的点云后处理技术主要针对激光点云。在机载激光点云后处理算法中,从点云中提取建筑物屋顶主要包括建筑物识别和屋顶面片提取[6]两步。建筑识别通常包括“自下而上”和“自上而下”两种思路,“自下而上”即分别过滤地面、植被等非建筑点,最后得到建筑[7];而“自上而下”则是直接从点云中识别建筑[8];通常来说,“自下而上”的方式更流行。从点云中识别地面的算法[9-11]有很多,如ZHANG K[9]等提出的渐进形态学滤波,ZHANG W M[11]等提出的布料滤波,这些算法都能取得很好的效果,算法的难点是如何对建筑和植被点进行分类。针对植被识别算法,研究主要集中在LiDAR点云,但这些方法往往都有使用场景的限制。部分学者对MVS点云做了研究,如刘宇[12]等提出利用植被系数和绿信比过滤植被点,该方法参数过多、不易控制;眭海刚[13]等利用了颜色不变量理论[14-15],只需设置一个参数;上述两种方法均未考虑建筑物表面极有可能为近绿色的情况。屋顶面片分割算法的关键是如何识别面片之间的差异性。常见的算法包括基于点法向量的区域增长算法、基于平面拟合的RANSAC 算法[16]以及基于最小能量函数的屋顶分割算法[2]等。

综上所述,现阶段存在很多激光点云后处理算法,各有优劣。对于MVS点云,由于其往往存在不同程度的数据缺失,且含有大量噪声、离值点,因此从MVS 点云中快速而准确地分割建筑物屋顶是一大挑战。针对该问题,本文提出了一种从大规模MVS点云中分割建筑物屋顶面片的新算法。

1 研究方法

本文借用LiDAR点云处理的一些思想,结合MVS点云数据的特点,提出了一种从MVS点云中全自动识别建筑物屋顶面片的算法框架,主要由建筑物单体化、屋顶面片识别和面片优化3 个部分组成,每个部分又由2~3个子算法组成,如图1所示。

图1 建筑物屋顶分割流程图

1.1 建筑物单体化

借鉴计算机科学中“分而治之”的算法思想,首先需要执行建筑物单体化操作。由于屋顶是以单体建筑物为单元存在的,因此准确识别建筑物至关重要。算法借用LiDAR 点云“自下而上”分离建筑物的思想,通过过滤植被、分离地面来实现建筑物单体化。

1.1.1 地面过滤

从数据性质上来看,MVS点云类似于机载激光点云,因此可利用机载激光点云中地面识别算法进行地面去除。本文采用ZHANG W M[11]等提出的布料滤波算法。该算法利用三维计算机图形学中的布料模拟技术,将计算机编程模拟的布料放置在倒置后的点云数据上,再通过布料与数据的接触来识别地面点。

1.1.2 植被过滤

从数据内容上来看,数据源是彩色点云,具有正确的RGB 信息。受相关研究[14-15]的启发,植被通常是绿色或近绿色,那么可利用基于颜色不变量的植被滤波方法。具体的,设点云中每个点的坐标为(x,y,z),利用绿色和蓝色通道定义的颜色不变量公式为:

式中, Ig(x,y,z)、 Ib(x,y,z)为该点的绿色和蓝色通道值。

设植被阈值为Tg,当Ψg<Tg时,表示该点为植被点;否则,为非植被点。值得注意的是,现实世界中存在一些带有特殊颜色的建筑,如屋顶为蓝色的厂房、墙上绿色攀援植物的居民楼、彩色外墙的幼儿园(图2)等,通常的植被去除算法都忽略了这些特殊情况。为了防止植被点过滤时误删除这些建筑物点,本文采用一种基于法向量变化检测的方法来进行优化[17]。

图2 幼儿园

首先,估计点的法向量。利用式(2),构造一个圆心为 p ,半径为r 的邻域 Np,其中 P 为原始点集,

然后,利用式(3),计算邻域内点的协方差矩阵Cp,并计算其特征值和特征向量。对特征值排序,λ1<λ2<λ3,则最小特征值 λ1对应的特征向量被视为点 p 的法向量。其中, pˉ为邻域Np的中心。

通过设定阈值Tn则可很好地识别共面点。通过上述步骤,理论上可保证准确地过滤植被点。

1.1.3 建筑物的单体化

对于MVS点云,过滤掉地面、植被后,通常剩余地物为建筑物、车辆和电力设施(如电线、电杆)等。由于建筑物包含完整的立面信息,因此单栋建筑物的点数明显大于其余地物。利用基于点间距的欧式聚类算法,设置聚类的最小点数和点间距的最大值,可有效剔除非建筑物点,实现建筑物聚类。

为了进一步提高算法的精确度,本文结合高程信息对结果进行优化。找到每个点集的高程最小值Zmin,并结合建筑屋顶常识,设置建筑物高程最小值Zmin+Tz,如Tz=2.0 m。

1.2 屋顶面片识别

经过建筑物单体化后,本文以单栋建筑物点集为处理单元进行屋顶面片提取。相较于机载激光点云,MVS点云中的建筑物信息更加丰富,不仅包括大量建筑物立面信息,还有可能包括部分室内信息。

1.2.1 建筑物立面去除

根据先验知识,建筑物立面通常是垂直于水平面的。因此,可通过计算特征 f 去除建筑物立面[18]。由式(5)可知,若点位于立面,则 f 极有可能等于1。

式中,np为点p处的法向量;ez为单位列向量(0,0,1)。

由于MVS点云具有详细的建筑物立面信息(图3),通过特征值 f 只能剔除建筑物墙面点,对于非墙面点,如雨棚等构筑物则不能有效去除。这些构筑物呈小块状零星分布,不同块之间有较大距离,因此可利用欧式聚类算法进行有效去除。

图3 建筑物

1.2.2 面片识别

建筑物屋顶通常由各种平面或类平面组成,因此可利用区域增长算法分割屋顶面片。经典区域增长算法的工作原理是基于点法线之间的角度比较,即通过设置曲率变化和法线角度变化的阈值,合并在平滑度上接近的点,从而分割面片。

1.3 面片优化

MVS点云中存在部分点与现实世界不一致甚至部分点缺失的情况,如两个平面的相交区域为不规则曲面、屋顶面片中有较大孔洞等,如图4所示;同时,建筑物屋顶通常存在一些附属物,如水箱、通风设施、太阳能热水器等,去除立面后,仍会有点残留,这些情况将造成分割出的屋顶面片边界不规则甚至不完整。

图4 建筑物屋顶

1.3.1 面片平整

针对这些问题,受李海亮[19]等研究的启发,结合屋顶环境的特点,本文提出了一种基于主成分分析的面片平整算法,既能修补孔洞,又能平整面片。

1)搜索与点数最多的面片Pmax的距离d 在阈值内的面片,如0.5 <d <2.0;这些被认为是非屋顶面片P'。

2)利用主成分分析算法将P'和Pmax转换到主平面。计算转换后Pmax的高程均值,并把它赋给所有点的z 坐标。

3)在主平面上,搜索与直线x=Xmin+i×dˉ距离在dˉ/2范围内的点;再以dˉ为阈值,进行补点,其中dˉ为平均点间距,i=1,2,3,…;直至Xmin+i×d>Xmax为止。

4)在 y 坐标上重复步骤3)。

5)将所有点从主平面还原到世界坐标系,得到屋顶面片P。

6)迭代执行步骤1)~5),直至遍历所有点。

通过该算法处理,理论上可获得平整的建筑物屋顶面片。

1.3.2 格网化

通过实验发现,由于照相机摄影角度的原因,MVS点云通常含有建筑物内部点。为了避免将建筑物内部点识别为屋顶,本文提出了一种基于二维格网的滤波算法。

首先找到点集在X 、Y 轴上的最值(Xmin、Xmax、Ymin、Ymax);再根据式(6)计算每个点所属网格的行列索引号;最后统计每个网格内的点数,并按照高程值对点进行排序。若网格内存在相邻点的高程之差大于阈值Tz,如Tz=2.5,则舍弃高程较低的那部分点。

式中,rowi为点i 的行索引;columni为点i 的列索引;width 为网格的宽度; xi为点i 的x 坐标; yi为点i 的 y 坐标。

通过该算法处理,不仅能清除建筑物的内部面片、提高屋顶面片的识别率,而且能删除屋顶面片之间的重叠部分,使面片规则,从而方便了以屋顶面片为输入数据的其他算法处理,如屋顶轮廓线提取、基于屋顶的三维建模等。

2 实验与结果分析

2.1 数据预处理

为了验证本文算法的正确性,选取一组由倾斜影像生成的彩色点云进行实验。原始数据采集于广州市某小区,共约包含38 593 万个点,大小约为17.6 G;按照1∶50 抽稀,并去除噪声后,最终数据大小为359 M,点数约为772 万个。场景内包括一个幼儿园、11 栋居民楼(含一栋连体建筑)、两栋结构复杂的商业建筑、大量绿化设施和车辆以及道路、路灯等交通设施,如图5所示。

图5 原始数据

2.2 实验环境

实验采用C++编程语言,基于PCL 库,环境为Windows 64 位系统,处理器为Intel Xeon (至强)E3-1226 v3 @ 3.30GHz 四核,内存为 16 GB,IDE 为Visual Studio 2013。

2.3 实验结果分析

整个框架运行时间为1 542.1 s,其中植被过滤耗时约为53 s,地面过滤和单体化耗时约为461.96 s,屋顶面片分割由于涉及到面片优化,耗时较长,约为1 027.14 s。实验结果如图6所示,可以看出,尽管测试数据中有彩色建筑,本文算法仍可准确识别出14栋建筑物,有效完成屋顶分割任务。为了进一步说明该算法的有效性,本文将原始数据与分割结果进行叠加比较,如图7 所示,从视觉效果上来看,该算法能正确分割出屋顶面片。

图6 实验结果

图7 重叠效果图

为了突出屋顶分割的准确性,屋顶包含大量附属物的建筑物分割结果如图8 所示,可以看出,该算法不仅能准确分割屋顶面片,而且能保证其具有较规则的几何形状。

图8 附属物屋顶

本文采用参考文献[18]的方法来定量评价本文算法,结果如表1 所示,可以看出,实验数据的分割准确度可达96.46%。对比实验结果和原始数据发现,出现欠分割的原因是两个屋顶面片平行且紧邻,导致面片合并,如m 和n 组;屋顶存在较大空洞导致出现过分割,如h 组,充分说明本文算法具有良好的鲁棒性。

表1 实验结果统计

3 结 语

本文提出了一种全自动从大规模多视图点云中分割建筑物屋顶面片的算法。虽然MVS点云中含有大量的离值点,但该算法仍能生成准确、平整的建筑物屋顶面片,并保证面片之间正确的拓扑关系。本文具有两个创新点:①优化了基于颜色不变量理论的建筑物单体化技术,能在复杂的城市场景中实现高准确率的建筑物识别;②提出了一种基于主成分分析的面片孔洞修补算法,既能修补空洞,又能平整面片,对于由规则四边形组成的屋顶普遍适用。

本文解决了从MVS点云中分割建筑物屋顶面片较难的问题,在一定程度上降低了工业上分割建筑物屋顶面片的成本;且研究结果能作为建筑物屋顶轮廓线提取或三维建模的输入数据。本文算法仍存在一些不足之处,如对于非矩形组成的屋顶面片适用性不强等,后续研究中将重点解决这些不足,同时研究如何生成规则屋顶轮廓线。

猜你喜欢
面片云中屋顶
借“光”生财的屋顶
阿来《云中记》的死亡言说及其反思
三维模型有向三角面片链码压缩方法
屋顶屋
“一个人”的村庄:阿来《云中记》解读
初次来压期间不同顶板对工作面片帮影响研究
云中歌
云中笛音
屋顶的雪(外四首)
甜面片里的人生