黄焜昀 李大军 惠振杨
(东华理工大学 测绘工程学院, 江西 南昌 330013)
三维模型广泛地应用于城市设计规划、应急和救灾管理、地图导航等,是智慧城市中不可或缺的地理信息数据库[1]。机载激光雷达(light detection and ranging,LiDAR)测量技术能快速获取高精度地表三维空间地理信息[2],为地形三维重建提供高效、精准的基础数据,然而机载激光雷达获取的数据是无序的三维点云数据,并不能直接获取建筑物的三维信息,建筑物三维重建是机载LiDAR数据用于智慧城市建设中的至关重要的一环[3]。
基于机载LiDAR点云的三维重建工作一直是众多学者和研究人员的热门研究领域[4]。一种以机载和地面激光点云数据、倾斜多视影像两类典型数据源为基础的多源特征的建筑物三维模型重建方法[5],能够融合点云的表面高精度表达和影像的精细轮廓,但该方法对数据要求高,存在效率低等问题。一种从“粗”到“细”的建筑物点云提取和基于轮廓关键点检测的三维模型构建方法[2],提出了基于关键点三维重建的方法,具有效率高,数据要求低等优势,但该方法得到的关键点仍需人工干预编辑,存在自动化程度低等问题。一种基于点云库(point cloud library,PCL)的区域生长分割算法和直方图结合的方法提取建筑物点云方法[6],该方法利用算法自动提取建筑物关键点,算法自动化程度高,但提取关键点过程中为对边缘轮廓进行规则化处理,得到三维模型的效果欠佳。
分析上述方法,本文提出在经典边缘检测算法“阿尔法-形状(Alpha-Shape)”中引入德劳奈(Delaunay)三角网,剔除不符合边缘要求的线段,降低算法时间复杂度,提高边缘检测效率,并对提取轮廓进行主方向规则化处理,完成建筑物外围边缘轮廓提取;并实现基于建筑物方向规则化的屋顶分割算法,算法对点云房顶分割,得到房屋点云的关键轮廓点,最后通过夏普·格尔(SharpGL)开发工具包将提取得到关键点建立三维模型,实现建筑物自动化快速三维重建。
建筑物多为规则的形体,一种简单三维模型的表达方法,由其关键拐点的连接而成的线框模型,如图1所示,此方法不仅模型存储空间小,模型构建运算量也低,同时支持后期渲染和地理分析。机载LiDAR获取到建筑物高精度点云,通过算法对建筑物点云进行分离,再通过算法对建筑物的外围轮廓关键点进行提取,提取的点云连接的轮廓并非为规则形状,还需对提取的外围轮廓进行主方向规则化处理,此外需对建筑物轮廓区域的屋顶方向规则化分割。提取得到关键点后,根据点与点之间的相对位置关系,构建建筑物线框三维模型。
图1 基于关键点三维重建的线框模型
本文的建筑物快速三维重建方法,分为三部分内容:第一部分是点云数据的预处理,实现建筑物点云的分离,为后续关键点提取提供数据源;第二部分为建筑物关键点的提取,包括房屋边缘轮廓和房顶关键点,为模型三维重建提供关键数据;第三部分为SharpGL工具实现关键点三维模型的建立。具体流程如图2所示。
机载LiDAR数据中包含有各种植被和人工构建物点云,这部分点云会对建筑物关键信息提取造成影响,对点云进行去噪滤波处理十分必要[7]。本文采用梯度滤波(Gradient)和人工编辑相结合的方法,CloudCompare软件中实现梯度滤波处理,首先对测区点云计算标量值(Scalar)通过编辑工具的标量域(Scalar Filed)的导出坐标到标量域(Export Coordinate to SF)工具,再利用标量域(Scalar Filed)的梯度(Gradient)计算梯度值,最后通过标量域(Scalar Filed)的标量值筛选(Filed By Value)工具,将梯度值0.3~1.0之间的点云剔除,得到建筑物区域滤波后点云,如图3所示,离散点云经过滤波处理,点云中的其他地物已被剔除。
图2 建筑物三维重建流程图
图3 建筑物点云的滤波提取
点云地面点与非地面点的分离,借助CloudCompare插件中的“布料”滤波算法(CSF Filter),“布料”滤波算法把点云进行上下颠倒,颠倒后假设有一块布料受到重力影响从上方落下,颠倒后非地面点区域会呈现凹状,布料会落入其中,布料最终落下的地形即为非地面点地形[8]。经过“CSF Filter”滤波处理的点云被分为地面点和非地面点,针对少量的噪点采用手动编辑的方法剔除掉,如图4所示。
(a)地面点 (b)非地面点图4 “布料”滤波算法点云
建筑物边缘点的提取,将建筑区域的非地面点云的X,Y坐标构成二维坐标点集S。S点集中任意两点定义一个半径为alpha的圆,当alpha足够大的时候(alpha一般为点集平均间距的2~3倍),就不会有点能够进入到根据这两点定义的圆[9],此时两点即为建筑物外围轮廓的一条线段,所有满足条件的线段组成的就是建筑物外围轮廓线。
将点集S构建Delaunay三角网。对三角形的每条边进行判断,构建Delaunay三角网方法可以极大地降低Alpha-Shape算法的时间复杂度[10]。Delaunay三角网可以看作为多个三角形,取其中一个三角形,若三角形中某条边的长度大于2×alpha,说明两点距离太远,无法构建满足要求的圆,则删除该三角形。若过某条边的两点且半径为alpha的圆包含其他点,说明两点并非为外围轮廓点,则删除该三角形。如图5所示,△ABC是当前判断的三角形,圆心为O,半径为alpha是由边A-B构建的圆,因为过AB两点的圆包含点C,说明两点为非外围轮廓点。
图5 不符合条件三角形
删除上述不符合要求的三角形边,剩下的边既为建筑物外围边缘。该边缘即为点集S通过单阈值Alpha-Shapes提取的建筑物边缘线,如图6所示。
图6 Alpha-Shape提取点云边缘线
在提取的建筑物边缘线段集中,合理的alpha值使得边缘线段集都为连续的,但在集合中的排序却是混乱的,须通过算法对线段进行拼接,即在线段集中随意选择一条线段,通过寻找线段集中与此线段想连接的线段,连接线段具有包含同一线段端点,同名端点相连,即可得到一条边缘线,由于边缘点集中并不是所有点距离都小于2×alpha,会存在断裂的情况,还需对断裂的边缘线进行修复,得到完整的建筑物边缘,每个建筑物都有一条完整的建筑边缘线,至此已经完成建筑物边界的拼接和分组。
常见的建筑物大多由规则的多边形所组成,因此建筑物的外围轮廓线各线段之间具有一定的位置关系,可以利用相邻轮廓线之间的位置关系对拟合后的线段进行规则化处理[11],其步骤如下:
(1)边缘初始拐点确定。计算点L1与L2的向量夹角α,若α符合阈值(一般认为α接近90°),将L1与L2公共端点看作初始拐点,遍历线段集,找出所有初始拐点。以初始拐点为边界线分组的端点,两两初始拐点以及之间的点确定一组边缘点,将每组边缘点进行直线段的拟合。建筑物初始拐点如图7所示。提取得到边缘大多不太规整,存在较多误判的建筑物拐点,对于这些拐点需要进一步进行处理,在规则化过程中,若两个相邻直线方向一致的情况,则剔除其中一条直线。
(a)拐点
(b)非拐点图7 初始拐点的判断
(2)边缘点集分组直线拟合。通过初始拐点对边缘线段集分组,得到分组线段端点点集,最小二乘方法直线拟合分组边缘点集。在拟合过程中,初始拐点不参与拟合,只针对拟合初始拐点之间的边缘点。
(3)规则化分组拟合直线。对各组边缘点集直线拟合,并计算两拐点之间距离大小。选取距离最大拐点的拟合直线作为建筑物主方向。计算其余直线对应的方向向量与建筑物主方向向量夹角值β。若|β|>150°,认为该直线与建筑物主方向直线平行,将建筑物主方向直线斜率赋予该直线。同时以该直线段中点作为规则化后直线上的一点,计算规则化直线的截距,从而确定与建筑物主方向直线平行的直线。同理,若夹角|β|<120°之间,定义该规则化直线与建筑物主方向直线垂直;若120°<|β|<150°,则根据上一向量的方向,将本直线规则化成与其垂直。若规则化直线处理之后,会有连续相邻直线斜率相同,则删除其前一条规则化直线。
完成建筑物主方向规则化,建筑物的外围轮廓已经确定,但为了简单化建筑物的外围轮廓表达,采用轮廓关键点的表达方式。轮廓关键点的获取方式为:求取两两拟合直线的交点,作为建筑物最终角点。经过规则化分组拟合直线交点,得到轮廓线最终角点,如图8(a)所示。边缘最终角点确定后,通过对边缘转折点的顺序连接,即可形成建筑物最终边缘线,如图8(b)所示。
(a)轮廓线最终角点
(b)最终边缘线图8 规则化建筑物边缘
建筑物的外围轮廓确定后,通过外围轮廓裁剪到建筑物上方点云,此部分为建筑物的屋顶信息,建筑物三维重建得到外围轮廓信息,接下来需要提取的是建筑物的屋顶信息,屋顶的提取分割,需利用建筑物规则化方向,知道规则化方向后,便可以通过规则化方向对屋顶点云进行固定方向的压平到一个平面上,得到二维平面下屋顶的正视图,通过正视图提取屋顶轮廓,还原为三维信息,轮廓的拐点的三维坐标即为建筑物屋顶的拐点,如图9所示。
图9 建筑物方向规则化的屋顶分割
得到建筑完整的外围轮廓点后,利用OpenGL在C#开发语言的封装工具包SharpGL,对三维模型进行表达和显示,通过建筑物提取的规则化角点,构建平面,构建建筑物底部,四周,以及顶部平面,得到细节结构完整、准确的建筑物实体化模型。构建的模型为粗糙的简体模型,需利用SharpGL工具对粗糙的模型进行单颜色纹理构建,同时添加场景灯光等效果进行渲染,提升模型的视觉效果,如图10所示。
图10 建筑物三维模型
为了验证本文建筑物快速三维重建算法的有效性,下载国际摄影测量与遥感学会(International Society for Photogrammetry and Remote Sensing,ISPRS)提供的城市机载LiDAR数据进行实验,数据中包含有建筑物,其原始点云如图11所示。利用滤波算法,对测区数据进行滤波处理,并以此结果作为建筑物快速三维重建实验的初始数据。在进行建筑物快速三维重建实验之前,对建筑物提取结果进行简单的预处理,例如去除不完整的建筑物以及存在少量的非建筑物点。预处理的工作在CloudCompare软件中完成。
(a)Samp12区域
(b)Samp31区域图11 ISPRS提供城区的原始点云
验证本文中的单阈值Alpha-Shape边缘检测算法,对下载的ISPRS数据,建筑物边缘进行提取,如图12(a)和图12(c)所示,单阈值Alpha-Shape边缘检测算法高效、准确,得到完整的建筑物边缘线段集;接下来对提取边缘线进行拐点提取、分组拟合、规则化、角点求取等步骤,得到规则化的外围轮廓,如图12(b)和图12(d)所示,能够处理一定复杂程度的建筑物轮廓形状,但对于少量边缘不够规整的建筑物,存在少量轮廓丢失或过度规则化的情况。
(a)Samp12区域边缘提取
(b)Samp12区域规则化
(c)Samp31区域边缘提取
(d)Samp31区域规则化图12 建筑物边缘轮廓提取结果
得到建筑物规则化轮廓后,对建筑物屋顶进行方向规则化分割,获得屋顶的关键角点信息,借助SharpGL对外围轮廓和屋顶角点信息进行三维建模,如图13(a)和图13(c)所示,三维模型顶视图如图14所示,再利用CloudCompare对LiDAR点云进行数字地表模型(digital surface model,DSM)构建,得到试验区的数字表面模型,如图13(b)和图13(d)所示。
(a)Samp31区域三维模型
(b)Samp31区域DSM
(c)Samp31区域三维模型
(d)Samp31区域DSM图13 建筑物边缘轮廓三维重建模型与点云构建DSM模型
图14 建筑物DSM模型与关键点模型叠加效果
将二者导出为三维模型OBJ文件和数字表面TIFF文件,在CloudCompare中对二者模型做叠加处理。由于点云数据的平均间距为1 m,认为提取关键点偏离实际位置超过3倍平均间距,为不满足要求点,经检验关键点的提取准确度达85%。
由于本组实验在关键点获取和模型三维重建中均采用程序完成,具有较高的效率,对本次实验使用的数据,约5万个点云,面积为0.2 km×0.26 km,点云数据预处理时间约为5 min,建模只需1 min,在此对比了几种常用方法三维建模的效率,如表1所示。
表1 几种三维重建方法的对比
本文通过在Alpha-Shape边缘检测算法中引入三角网,提高运算效率,同时实现建筑物方向规则化的屋顶分割算法,从而提取得到建筑物轮廓的关键点,并运用关键点快速建模技术,实现建筑物的快速建模,将模型在CloudCompare中与点云DSM进行比较,经检验此方法得到模型轮廓的关键位置的准确的达到85%,且通过与其他三维建模方法比较,本文方法具有较高的效率,实现0.05 km2区域的建筑物三维重建仅耗时6 min。