孙宪龙,韩李涛,2,周丽娟,郭 佳
(1.山东科技大学 测绘科学与工程学院,山东 青岛 266590;2.山东省基础地理信息与数字化技术重点实验室,山东 青岛 266590)
在室内导航服务过程中,房间、廊道、楼梯、门窗等建筑构件是用来导航的重要元素,这些要素的提取为室内定位、路径分析、实时导航等各种室内导航功能的实现提供了数据和模型支持[1]。目前,室内导航要素提取的数据来源主要有CAD建筑设计平面图[2]、CityGML[3]、BIM数据[4]、激光点云数据[5]等。相对于其他数据类型,点云数据能够直接提供被扫描目标的高精度三维坐标信息,而且对室内结构发生变化的室内环境可重新进行数据采集,保证数据信息的现势性。然而,点云数据存在数据量大、冗余信息多、点云间无连接性、无结构化属性、不承载语义信息等问题[6]。因此,从海量点云中提取出建筑物室内可导航元素(房间、门、窗等)是当前室内三维建模领域的研究热点之一。
室内可导航元素提取的第一步是楼层划分[7]。最常用的方法是点云密度峰值分割方法,其主要依据楼层存在的地方会有大量Z值相同的点,利用这一性质提取楼板分割空间[8-9]。在同一楼层中,需要提取房间、门、窗等可导航元素,其中房间的提取最为关键,而墙线提取是房间提取的关键环节。目前,房间的提取大致可分为直接提取方法和间接提取方法。直接提取方法通过聚类的方式,将同一测站的点粗略合并归结为一个房间,合并之后执行迭代重新标记过程来更新指向房间的点[10]。间接提取方法将单个房间视为由墙体围成的独立可导航区域,通过对墙体的提取,将单楼层中大片的可导航区域划分为一个个独立的房间。Oesau[11]通过直方图对空间进行划分,利用垂直点分布定位水平结构,并通过Hough变换检测垂直墙体结构,最终通过图割公式提取曲面。Ochmann[12]利用墙段的分段性检测垂直平面作为墙面的候选面,然后将它们投影到水平面上,投影后的直线即为墙线,该方法可以获得墙壁厚度和房间面积,并且可以用于门窗识别。Fichtner[9]首先利用八叉树结构划分子空间,通过点云密度峰值图检测出楼层,然后在单一楼层中利用墙面处点云密度会在垂直方向形成峰值提取墙体。刘明蕾等[13]将墙视为由两个墙面及中间不被扫描的墙体组成,利用区域生长算法获取墙面角点,从而获得房间内部的更精细边缘,但该方法不适用于弧形墙面或墙角不为直角的墙面。
基于现有研究,本文结合建筑物点云几何特征,通过数据降维简化建筑几何特征提取复杂性,提出一种基于室内点云数据提取建筑物墙线的方法。即先利用特定方向投影点云数据直方图进行点云分割,然后对分割出来的墙体点云利用Hough变换进行直线检测,并将检查出来的直线与墙体点云二值图进行叠加,完成墙线的准确提取。提取的墙线为后续房间的识别提供了基础。
对于建筑物室内点云数据,Okorn等[8]认为天花板、地板等水平结构在扫描时会产生大量高度相同的样本。基于这种思想,将点云向Z轴投影生成点云密度直方图,天花板、地板等水平结构就会显示为点云密度直方图的峰值,由此分离出天花板和地板数据。如图1所示,纵坐标表示点的数量,横坐标表示点的高度(Z坐标分量),将点云数据按照0.1 m间隔生成点云统计直方图。提取直方图峰值所在点的索引,就可以得到构成天花板面、地板面的点云。
图1 天花板和地板点云分割
在单层楼中,去除天花板和地板数据,就可以得到墙体和门窗的点云数据,如图2所示。从图中可以看出,仍有少许地板面和天花板面数据存在,但由于其数量较少,向地面竖直投影后对整体房间的影响可忽略不计。
图2 墙体和门窗点云
Hough变换可用于提取图像中特定形状的特征,运用两个坐标空间之间的变换,将图像空间中具有相同形状的直线或曲线,映射到另一个参数坐标空间的一个点上形成峰值,从而把检测任意形状的问题化为统计峰值的问题[11]。然而,Hough变换提取出的仅仅是图像中的直线特征,且噪声较多,没有包含语义信息。因此,当利用墙体点云数据来提取墙线时,本文提出首先利用Hough变换进行直线检测,然后对提取的直线特征进行交点计算和墙体语义识别,从而准确提取墙线。
首先将墙体点云数据向地面投影分块,生成点云分布矩阵;然后将点云分布矩阵转化为灰度图,并进行二值化处理;最后,基于二值图利用Hough变换进行直线检测。流程图如图3所示。
图3 Hough变换提取直线流程
算法实现的详细步骤如下:
1)读入墙体点云数据,存储为N行两列的矩阵A,一二列存储点云X,Y坐标,N表示点云数量;
2)利用矩阵A中存储的个点的X,Y坐标,计算X和Y方向的最大值和最小值,并确定分块个数;
3)统计各分块区域的点云数量,根据各分块区域的点云数量,生成点云分布矩阵,获得点云分布图;
4)将点云分布矩阵转化为灰度图像,为获取更加简洁的点云分布描述,设定阈值对灰度图像进行二值化处理,对于高于阈值的区域存储其值为1,其余存储为0,生成点云分布二值图;
5)对二值图利用霍夫变换算法检测直线。其中,霍夫变换峰值点阈值的选择尤为重要,只有大于该阈值的点才认为可表示直线或曲线,霍夫矩阵H是以峰值点为元素组成的矩阵,峰值点阈值默认取该矩阵内最大元素的1/2,即0.5Hmax。
墙线识别的原理:将2.1中提取的直线特征(直线方程)进行求交,从而获得交点分割的直线段作为备选墙线,这些备选墙线有些与墙线重合,有些介于两墙之间的房间内部,因此本文提出将备选墙线与墙线二值图进行叠加,剔除非墙线线段,从而识别出真正的建筑墙线,如图4所示,图中绿色直线段为被剔除备选墙线。
图4 墙线识别原理
算法实现的详细步骤如下:
1)计算2.1中检测出的各直线方程,并求取直线交点。
2)依次连接位于同一直线上的各交点组成直线段,作为备选墙线。
3)将获取的备选墙线与墙线点云二值图叠加,若备选墙线两端点间无点云存在,则该备选墙线上的各像素点坐标在二值图中的值应为0。因此,将各备选墙线逐级二等分,本文中分为三级,取各分段处像素点坐标,判断该坐标在二值图中的值。若皆为0,则剔除该备选墙线,反之保留为最终墙线。
本文选用国际摄影测量和遥感协会提供的公共基准数据集TUB2(Technische University Braunschweig, Germany)[14]进行实验验证。原始点云如图5所示,共包含21 991 918个点,其中地板、天花板等水平面与XOY平面平行,墙面与XOZ,YOZ平面平行。建筑的一层有14个房间、23扇门和8个窗户,二层有10个房间、28扇门和13个窗户。
由于点云数据量较大,实验利用CloudCompare软件对点云数据进行分块和抽稀处理,并选取较为复杂的2部分区域对本文方法进行验证。实验区域如图6所示,各部分点云可视化如图7所示。
图5 原始点云
在单层楼中,根据2.1中的方法,将利用第1节方法分割出的墙体点云数据向地面进行投影,利用Hough变换提取直线。实验选择3种形状不同的房间,这3个房间边缘细节各不相同,代表性较强。如图8所示,房间1形状较为规整,且点云信息完整,二值图与原始房间差异较小,峰值点阈值选取默认值,提取的直线与房间墙线吻合。
图6 点云分块示意图
(a)房间激光点云(b)二值图(c)直线检测结果
如图9所示,房间2内部被分割为3部分,每部分间由门连通,在数据采集过程中,打开的门会遮挡墙体,造成墙体信息采集错误(二值图中的红色标记部分)。对此,不同峰值点阈值的选择对实验结果影响较大,如表1所示。从表中可知,当墙体数据较为复杂时,阈值过大会造成墙体直线检测不足,阈值过小会造成过度检测,二者均会导致最终的提取结果不理想,在本次实验中峰值阈值取0.2Hmax。
图9 房间2数据
表1 不同阈值对线段检测的影响 m
如图10所示,房间3墙体点云有大范围孔洞,且内部存在障碍物,房间的门处于打开状态(二值图中的红色标记部分)。如房间2中对峰值点阈值进行讨论,具体情况如表2所示。从表中可以看出,当墙体点云有大范围孔洞时,应选取较小的阈值,尽可能的获取缺失点云处的墙体细节,在本次实验中峰值点阈值取0.1Hmax。
图10 房间3数据
表2 不同阈值对线段检测的影响
对上述检测到的直线根据2.2中方法即可得到各房间墙线提取结果,如表3所示。最终得到的是围成各房间的直线段。结果表明即使墙面点云存在缺失,本文方法仍能较为准确的完成房间墙线提取。
表3 房间墙线提取结果
基于上述分析,对所选区域进行实验,此处绘制出结构较为复杂的第二部分第一层房间墙线提取结果,如图11所示。从表中可以看出,最终的提取结果能够较为完整的实现对原始点云墙线的表达。
(a)原始点云(b)二值图(c)墙线提取结果
ISPRS为确保建模结果测试和对比公平,没有公布参考模型实际尺寸[15]。因此,本文利用CloudCompare手动对图11中1~6号房间面积进行人工量算,将本文算法自动提取房间面积与量算结果进行对比。表4为算法提取墙线围成的房间面积与人工量算房间面积的对比,从中可以看出本文方法能够较准确、有效地提取建筑物墙线,且精度较高。
表4 墙线提取结果精度评定 m2
本文针对室内点云数据,首先通过直方图统计法分离出天花板、地板以及房间墙面数据,然后利用Hough变换从墙线二值图中提取直线,最后将获取到的备选墙线与墙线二值图叠加获得最终建筑墙线。实验结果表明:即使墙面点云存在部分缺失,当选取合适的变换阈值时,Hough变换仍然能够有效地提取出直线,进而完成建筑墙线的准确提取。本文提取的建筑墙线信息可用于室内三维建模、室内导航网络生成以及室内导航模型的构建等工作,后续将进一步研究门、窗等室内导航元素的提取,从而为室内导航模型提供更完整的导航信息。