随着我国城市的飞速发展及人们对房屋质量要求的提高,房屋质量检测技术受到了大量的关注[1-2].当进行房屋质量检测时,经常出现由于年代过于久远或改变房屋使用功能等原因而导致的建筑图纸缺失的情况,因而须要重新对房屋进行测绘.目前,建筑平面图的测绘仍然须要大量人工的参与,现场通常采用钢卷尺和激光测距仪量测轴线距离,以确定墙体及门窗洞口的平面位置[3-4].然而,这些传统的方法耗费较多人力,同时还依赖于检测人员的工程经验,传统的人工测绘方法有一定的局限性.三维激光扫描技术可以准确地获取室内空间信息[5],通过其获取的点云数据近年来也被尝试应用于建筑平面图的绘制.文献[6]用点云密度直方图将墙面点云分割出来后,用霍夫(Hough)变换在墙线二值图中提取直线,最后将获取到的墙线与原图叠加获得最终的建筑墙线.文献[7]采用鲁棒性较强的主成分分析(PCA)对点云法向量进行计算,提取墙面的边界进而完成室内平面图的构建.以上研究侧重于室内点云数据的降噪和墙线信息的提取,在生成的平面图中缺乏门、窗开洞等位置信息.为了检测室内场景中的门窗信息,文献[8]采用的算法是“3D-2D-3D”策略,通过拍照从三维点云模型中获取二维图像后,得到大致的门窗目标范围,再返回三维点云中,最后提取局部点云数据的轮廓线得到门窗特征角点的位置信息.文献[9]整合了由一组三维激光扫描仪和彩色相机提供的几何(XYZ坐标)和颜色(RGB或HSV)六通道信息,这种几何-颜色的整合方法可以检测到开放、半开放和关闭的门,在不同的光照条件和扫描位置下,也具有较高的鲁棒性.文献[10]探索了点云和基于 SLAM 的激光扫描仪轨迹组合使用的方法,其中门被检测为局部最小值垂直距离,并应用此特征根据门的位置划分子空间.这些方法虽然可以较好地检测三维点云模型中的门窗部分,但是步骤较为繁琐,且无法与墙面提取结合起来.综上,目前从三维点云到平面图转换的研究大多仅有墙线的生成,门、窗等开洞位置的识别尚未与建筑平面图生成结合起来,也缺乏比较高效的算法将墙、门窗的提取统一起来以简化流程.随机抽样一致性算法(RANSAC)能从包含大量局外点的数据集中估计出高精度的参数,稳定性好,被广泛应用于平面检测[11].为了解决以上问题,本研究基于RANSAC算法拟合建筑结构中不同构件的平面,提出一种建筑平面图智能生成的技术,并采用实例验证了所提方法的有效性.1 点云数据获取和预处理1.1 三维激光扫描由于扫描对象为建筑物等大空间物体,因此为了更高的精度和分辨率,本研究采用地面式三维激光扫描仪来获取房屋的点云数据.基本原理是激光测距仪发射一个激光脉冲信号,同时接收由物体表面漫反射反向传回的信号,通过测量激光到目标往返所用时间来计算出目标物的距离[12].根据扫描仪的空间坐标,加上扫描的水平和垂直方向的角度,就可以得到每个扫描点的三维坐标,如图1所示.10.13245/j.hust.230501.F001图1三维激光扫描仪获取点云数据1.2 点云配准和降采样地面三维激光扫描仪属于固定式扫描仪,一次只能获取部分场景的点云信息.本研究采用点云配准来拼接多处场景的点云以完成整个建筑物的三维建模.点云配准主要分为粗配准和精配准两个阶段.首先通过不同场景中被测物体的形态学特性建立点云之间的匹配对应关系(粗配准),然后在粗配准的基础上尽量缩小点云之间的空间位置差(精配准).由于房屋含有墙面、地面、天花板等较多平面,因此本研究采用点-面(point-to-plane)迭代最近邻点(ICP)精配准算法[13],收敛也更快.其目标函数为最小化源顶点到目标顶点所在的面的距离平方,可表示为M=argminM∑[(M∙si-di)∙ni],式中:M为一个由旋转和平移组成的4×4三维刚体变换矩阵;s为源顶点;d为目标顶点;n为目标顶点的法向量.且有M=T(tx, ty, tz)∙R(α, β, γ),式中:T(tx,ty,tz)=100tx010ty001tz0001,其中tx,ty和tz分别为点在x,y和z方向的平移距离;R(α,β,γ)=r11r12r130r21r22r230r31r32r3300001,r11=cos γ cos β,r12=-sin γ cos α+cos γ sin β sin α,r13=sin γ sin α+cos γ sin β cos α,r21=sin γ cos β,r22=cos γ cos α+sin γ sin β sin α,r23=-cos γ sin α+sin γ sin β cos α,r31=-sin β,r32=cos β sin α,r33=cos β cos α.因此最小化目标函数共有6个参数.为了加快计算速度,如果两个点云之间的相对旋转小于30°,那么就在旋转矩阵中用θ替换sin θ,用1替换cos θ,用线性逼近非线性最小二乘优化问题.因为拼接后的建筑点云模型数据量往往较大,直接处理需要很高的计算成本,所以本研究在预处理中还应用体素降采样(voxelgrid downsampling)使全部点云的操作转换到关键点上以降低计算量,同时较好地保留三维结构信息[14].体素降采样是将三维空间体素化,然后在每个体素中抽取一个点的过程.通常可以用中心点或最接近中心的点作为采样点,具有效率高、采样点分布比较均匀的特点,并且可以通过体素的大小来控制点的间距.体素的长宽高可以通过设置包围盒三个方向的网格点数量得到,也可以根据不同的实际需要确定.每个体素包含若干个点,以中心点或离中心点最近的点作为采样点,在处理完所有体素后,得到降采样后的点云,过程示意图如图2所示.10.13245/j.hust.230501.F002图2体素降采样示意图2 点云分割与平面图生成2.1 RANSAC平面分割建筑的墙面、地板、天花板及门窗等开洞位置均属于规则平整的平面,拟合平面最常见且最简单的方法是最小二乘拟合,但最小二乘拟合的精度容易受到噪点的影响.随机抽样一致性算法(RANSAC)通过迭代拟合的方法可以排除噪点的影响,提高拟合精度[15].本研究采用RANSAC算法在3D空间点云中找出处在一个平面上的点,通过调整点之间距离的阈值、拟合的平面数量和迭代的次数来分割出不同构件的平面,并用不同的颜色附着点云以区分墙面、门窗等.RANSAC算法由以下两个步骤组成:a.随机选择输入数据中能形成数学模型的最小元素数,并利用这些元素计算出相应的模型参数,这些参数是能决定这个数学模型参数的最小值;b.检查所有数据中哪些元素符合第一步确定的模型,大于误差阈值的元素被视为离群值,小于或等于误差阈值的元素被认为是内部点[16].将这两个步骤不断循环,通过选择点数最多的模型得到最终结果,具体到三维空间点云中提取平面的步骤如下.步骤1 对平面进行拟合至少需要三个点,因此首先在三维点云中随机选择三个点,然后计算平面模型参数A,B,C,D,即A∙x+B∙y+C∙z=D.(1)步骤2 根据步骤1中估计的平面模型,用余下的数据点去计算结果误差,将误差与设定的误差阈值进行比较,以此确定内部点和外部点,计算该参数模型下内点的个数并记录.步骤3 重复步骤1和步骤2,若当前模型的内点数量大于己经保存的最大内点数量,则更新模型参数,保留的模型参数始终是内点数量最多的模型参数.步骤4 重复步骤1~步骤3,不断迭代,直到达到设置的最大迭代次数,找到内点个数最多的模型参数,最后用内点再次对模型参数进行估计,从而得到最终的模型参数.针对本研究建筑地板、天花板、墙面和门窗(与墙面不共面)等多平面提取的情况,首先使用RANSAC算法从点云中提取出一个平面,对于剩下的外部点,继续循环RANSAC算法提取平面,直到提取出所有的平面,循环停止的条件由拟合平面数量这一参数控制.2.2 点云水平截面投影为了显现内外结构的轮廓,模仿CAD画图过程,水平截取三维建筑物点云模型中间高度的一段(含门窗等开洞位置),然后投影到拟合平面,即与点云坐标系相同的水平面上.本研究投影生成建筑平面图的过程由Python和Open3D函数实现,三维空间平面的一般方程如式(1)所示.假定不在平面上的三维空间坐标为(x0,y0,z0),其在平面上的投影点坐标为(xt,yt,zt).因为投影点到当前点与平面垂直,根据垂直约束条件,yt和zt与满足下述条件[17]:yt=(B/A)(xt-x0)+y0;(2)zt=(C/A)(xt-x0)+z0.(3)将式(2)和式(3)代入式(1),可得xt=(B2+C2)x0-A(By0+Cz0+D)A2+B2+C2.(4)再将式(4)代入式(2)和式(3),可得:yt=(A2+C2)y0-B(Ax0+Cz0+D)A2+B2+C2;zt=(A2+B2)z0-C(Ax0+By0+D)A2+B2+C2.即可解得三维空间的点投影到某一平面的坐标(xt,yt,zt).在得到投影后的坐标后,使用numpy生成点云,保留点云颜色,最终得到含有建筑结构轮廓线的平面图,如图3所示.10.13245/j.hust.230501.F003图3建筑点云投影示意图3 实例及分析3.1 算法实现本研究使用地面式三维激光扫描仪FARO® FocusS 70 Laser Scanners 采集数据,定位精度为2 mm/10 m,精度误差控制在±1 mm,测量速度为1×106 s-1.结合Python编程语言和Open3D点云数据处理库,实现基于点云分割的建筑平面图智能生成,基本流程如图4所示.10.13245/j.hust.230501.F004图4基于点云分割的建筑平面图生成流程图原始点云数据为某层教学楼,共设置27个扫描站点对各个结构部分进行充分的扫描.每5 m左右设置一个站点,站点的位置须要注意包含所有可以看到的面,包括凸起的柱子和墙的拐角等.连续两个站点之间需要有至少一个平面的重合部分,以方便后续的点云配准工作.扫描完成后将所有站点数据进行点云配准,获得完整的三维模型,如图5(a)所示.为了提高数据处理的效率,同时保留三维结构信息,对原始数据进行下采样.下采样前点云数量为7.700 756×106,下采样后点云数量降为2.800 58×105,如图5(b)所示.10.13245/j.hust.230501.F005图5某层教学楼三维点云模型在获得降采样点云模型后,采用RANSAC算法对建筑不同构件的平面进行分割,阈值设置为0.04,迭代次数为3×104,拟合的平面数量设置为23,并打开点云上色展示.为了防止天花板和地面对投影产生影响(遮挡内部结构轮廓),在算法中不显示找到最多的两个点云平面,即只显示墙面和门窗等开洞位置的点云分割.用蓝色点云表示墙面,绿色点云表示门,窗户由于非漫散射性质显示为稀疏状点云呈现灰色,分割效果如图6(a)所示,分割完成后以点云格式再次保存,如图6(b)所示.10.13245/j.hust.230501.F006图6RANSAC点云分割和平面图生成选取合适的中间高度将分割后的点云模型切片,把所有门窗等开洞位置都包含进去(图6(c)).然后输入点云截面数据,获取待投影平面的系数,构建投影函数,并转换点云三维坐标为数组形式执行投影.为了使生成的平面图中区分墙和门窗等开洞位置,保留投影前的颜色赋值.平面图生成结果如图6(d)所示,图中:蓝色线段代表墙;绿色线段代表门;灰色部分代表窗户.3.2 建筑平面图生成结果分析图7为采用点云分割对建筑点云数据进行处理,自动生成的整个平面图.通过精度、召回率和F1综合评价系数这3个指标[18]对生成结果进行分析,不同构件的分类效果见表1.综合评价指标F1用以权衡精确率和召回率,即F1=2PR/(P+R),式中:P为精度;R为召回率.从表1中可以看出:门、窗开洞位置的识别精度较高,召回率也较高,而部分墙体会被识别成门或窗,放置储物柜等的墙体因为被遮挡所以也检测不出,但总体召回率也超过了85%,F1综合评价系数也较高,整体从三维点云到平面图生成的效果较好.10.13245/j.hust.230501.F007图7点云分割平面图生成结果10.13245/j.hust.230501.T001表1建筑平面图中不同构件的分类效果构件P/%R/%F1墙90.687.889.18门95.310097.59窗94.795.695.15室内墙、门窗等开洞位置和尺寸的精度反映了生成平面图的准确性,也是房屋质量检测关注的对象.其中表示墙壁的线段有44个,表示门的线段有21个,表示开窗的线段有5个,不同构件的点云分割精度不同,本研究将这3种不同构件的点云算法处理后的直线长度与实地测量长度进行对比,由结果可以看出:墙、门、窗的平均尺寸误差分别为2.16%,3.53%和1.14%,表明整体长度误差较小,均控制在4%以内.4 结论a.采用RANSAC算法可以对三维建筑点云模型进行平面分割,并可分割出不同的构件,如墙、门、窗等.门、窗开洞位置的识别精度较高,召回率可以达到95%以上;部分墙体会因为遮挡而检测不出,或被识别成门和窗,总体召回率也超过了85%,综合评价系数也较高.b.通过将分割后的点云水平截面投影,可以得到简易的建筑平面图,包含建筑结构内外轮廓及开洞等位置信息,同时保留点云的颜色以区分墙面、门、窗.结果表明:生成的建筑平面图尺寸精度较高,误差在4%以内.c.本研究使用Python编程语言并结合Open3D点云数据处理库,实现了基于点云分割的建筑平面图智能生成,使房屋质量检测中对未知结构的测绘更加智能化.本研究方法也存在一定的局限性,对于建筑中一些狭小的空间平面,点云的扫描会出现缺漏的情况,进而影响所生成建筑平面图的完整性,且在图中没有标注尺寸信息.后续可对自动标注尺寸进行深入研究,同时优化算法,提高智能生成建筑平面图的精度和完整度.