基于孔洞约束和层次化定位的窗户检测方法

文档序号:36102460发布日期:2023-11-21 19:59阅读:46来源:国知局
基于孔洞约束和层次化定位的窗户检测方法

本发明属于计算机视觉和图像处理方法,涉及基于孔洞约束和层次化定位的窗户检测方法。


背景技术:

1、随着城市规划、数字城市建设、虚拟旅游等领域应用的不断增加,三维建筑重建的需求也日益增长。其中,详细的建筑立面结构是三维建筑重建的重要组成部分。窗户作为建筑立面的主要组成部分,是精细立面模型构建的关键。

2、由于大多数建筑立面中的窗户其玻璃材质的原因无法反映激光束。同时室外场景的复杂性,比如植被等元素的遮挡,严重影响窗户检测的准确性和完整性。除此之外,目前大多数研究学者主要集中在城市地区现代建筑立面上,对具有重复结构和对称特征的矩形窗户进行检测。对于不规则的建筑立面以及农村地区低层住宅(在立面上具有各种形状、大小和非对称位置的窗户)的窗户检测的相关研究较少。


技术实现思路

1、本发明的目的是提供基于孔洞约束和层次化定位的窗户检测方法,解决了复杂立面不同立面结构的窗户检测问题。

2、本发明采用的技术方案是,基于孔洞约束和层次化定位的窗户检测方法,具体按照以下步骤实施:

3、步骤1:对点云原始数据进行滤波和旋转,使场景旋转至地面与水平面平行;

4、步骤2:在步骤1的基础上,去除场景中的地面点,对非地面点进行聚类,通过分析非地面点的特征来提取建筑物点;

5、步骤3:提取出所需的建筑立面;

6、步骤4:在提取的建筑立面中提取主墙面;

7、步骤5:在主墙面上,利用层次化方法提取窗户边界点;

8、步骤6:进行窗户边界优化操作。

9、本发明的特点还在于,

10、步骤1具体为:

11、步骤1.1:对原始点云数据进行混合滤波操作

12、步骤1.1.1,将原始点云数据划分为若干个边长为l的立方体,计算立方体的重心并用该重心点来表示立方体中的所有点,用原始点云数据中距离重心点最近的点来代替重心点;

13、步骤1.1.2,采用半径滤波的方式继续剔除噪声点:判断指定半径球体中近邻点数量是否小于指定阈值作为该点是否是离散点的依据,若指定半径球体中近邻点数量小于指定阈值,则判定该点为离散噪声点并将其删除;反之,则予以保留;

14、步骤1.2:实现场景旋转

15、步骤1.2.1,根据地面点法向量平行于y轴这一特征,对点云数据中法向量与y轴夹角小于的点进行初步提取,并对其进行平面拟合以及求取该平面的法向量n1;

16、步骤1.2.2,给定目标平面的法向量n2;

17、步骤1.2.3,求旋转角度和旋转轴:根据公式(1)计算n1和n2的夹角θ,即旋转角度;旋转轴则是求解垂直于主平面法向量n1与目标平面法向量n2的向量,

18、θ=arccos(n1,n2)          (1);

19、步骤1.2.4,根据旋转轴及夹角θ求解旋转矩阵r,对原始点云场景通过旋转矩阵r进行变换。

20、步骤1.2.1中为10°。

21、所述步骤2具体如下:

22、步骤2.1,将步骤1获得的点云数据进行颠倒,根据设置的格网大小生成初始布料格网,并确定格网粒子数,其中布料的起始位置通常在颠倒点云的最高点之上;

23、步骤2.2,将点云数据与格网粒子投影至同一水平面,搜索每个格网粒子的最近邻点,记录其投影前的高程值ihv;

24、步骤2.3,对于每个格网粒子,若可以移动,则计算其受到外力影响产生的位移,并将位移后粒子所在的位置与其对应的最近邻点的ihv进行对比,若粒子的高度小于或等于高程值,则认为该粒子为不可移动点,并将其高度设置为ihv;

25、步骤2.4,计算格网粒子受到内部因素影响产生的位移距离;

26、步骤2.5,重复步骤2.3和2.4,直至达到设定的最大迭代次数或者所有粒子的移动距离小于预设值时,则停止迭代;

27、步骤2.6,计算格网粒子与其最近邻点之间的距离:若小于距离阈值disg,则认为是地面点,反之为地物点。由此便可获得初步的地面点集合g;

28、步骤2.7,针对集合g,计算其平均高度及每一个点的法向量;

29、步骤2.8,对于集合g中的每一个点,若该点的高度高于平均高度,则计算其法向量与z轴的夹角,当夹角小于设定阈值α时,则跳过;反之将其归入非地面点集合,并从地面点集合中删除;

30、步骤2.9,通过k最近邻knn搜索地面种子点周围属于非地面点的数量;

31、重复步骤2.8和2.9,直至所有种子点均已遍历。

32、所述步骤3具体为:

33、步骤3.1:利用融合维数特征和粗糙度的方法提取出建筑物;

34、步骤3.2:采用改进的ransac方法进一步提取出建筑立面。

35、步骤3.1具体如下:

36、步骤3.1.01,输入由步骤2获得的非地面点集合q={q1,q2,…,qm},m为非地面点的总点数,并创建kd树,通过knn查找搜索点q的近邻点nq;其次计算nq内点云的协方差特征值λ1,λ2,λ3(λ1≥λ2≥λ3);最后通过公式(2)分别计算面状指数λp、发散状指数λs和杆状指数λl,此处统称为维数特征,即计算每一个点qj的维数特征

37、

38、步骤3.1.02,为集合q中所有点标记label,设置label,同时初始化聚类分割块的标记为seglab;

39、步骤3.1.03,遍历所有点,若当前种子点的label等于设置值时,则通过近邻点搜索寻找最近的关联点qnn,并存入数组vq中,通过维数阈值对关联点进行筛选,将与种子点特征不同的关联点从vq中删除,从而得到新的关联点数组vn;

40、步骤3.1.04,遍历数组vn中所有点,如果存在点的label不等于设置值,则找出最小的label值,将其与seglab进行比较,取两者中的最小值赋给minseglab;如果不存在label不等于设置值的点,则直接将seglab赋给minsegla;

41、步骤3.1.05,对数组vn再次进行遍历,如果当前点的标签label大于minseglab,则再次遍历所有点,若点的标签与当前点的标签相同,则将该点的label值重置为minseglab的值;

42、步骤3.1.06,将seglab的值加1,重复步骤3.1.3-3.1.5,直至所有点label的值均不等于设置值,从而完成整个点云的粗分割;

43、步骤3.1.07,将步骤3.1.6得到的每个分割块fi(i∈1,2,…,n),分别通过公式(3)和(4)计算每个分割块的平均高度和粗糙度rs;

44、

45、

46、式(3)和(4)中:——分割块的平均高度;zj——分割块中每一个点的高度;n——分割块中点的个数;rs——粗糙度;n——分割块的个数;

47、步骤3.1.08,将每个分割块视为一个整体,为其添加分类标签,并将第一个分割块作为种子面,由该种子面开始查询;

48、步骤3.1.09,通过空间连通性分析找出该面的所有相邻分割块。当种子面与近邻分割块的相似度阈值不同时,可以认为两者所属分割块类别不同,不能进行合并,则选择下一个相邻分割块;否则就将该相邻分割块标签重置为种子面标签,并对下一个相邻分割块进行判断。相似度阈值是根据点云表面粗糙度程度设定的用来判断不同分割块的相似性;

49、步骤3.1.10,判断是否所有近邻分割块均被遍历,如果还有近邻分割块未被遍历,则重复步骤3.1.9,直至完成所有近邻分割块的合并;否则就将未被访问过的分割块作为种子面;

50、步骤3.1.11,判断是否所有分割块均已访问,如果仍存在分割块未被访问,则重复步骤3.1.9-3.1.10;反之结束合并;

51、步骤3.1.12,合并完成后,根据分类标签对点云数据进行分类;

52、步骤3.1.13,判断合并后每个类簇的点数量,设定一个最大数量阈值max和最小数量阈值min,保留在此范围内的类簇;

53、步骤3.1.14,结合不同地物特征,采用高程和几何特征对保留的类簇进行筛选,将属于建筑物点的类簇进行提取,实现建筑的精确提取。

54、步骤3.2具体为:

55、步骤3.2.1,在步骤3.1得到的建筑物点云数据中,随机选择多个点构成平面,计算该平面模型的参数;

56、步骤3.2.2,计算数据集中所有点到该平面的距离,若在距离阈值dw范围内,则将该点归为局内点,否则归为局外点;

57、步骤3.2.3,重复步骤3.2.1-3.2.2,直至迭代次数达到迭代阈值,则提取出拥有局内点数量最大的平面;

58、步骤3.2.4,统计平面点集总数,当小于阈值snum时,则将其删除,否则将提取出的平面向yoz面进行投影,使所有点形成一条垂直线段,将投影点按照y值从小到大排序,使用公式(5)计算相邻两点之间的距离;

59、

60、式(5)中:

61、pi——立面wj中的点,j=1,2,…,s;

62、k——立面wj中点的数量;

63、步骤3.2.5,通过确定哪些点之间的关联阈值大于3倍的中值距离阈值disy来检测立面中是否存在垂直间隙,其中每个间隙可以将数据分成两个不同的点簇,若存在间隙,则对立面进行二次分割,实现提取结果的优化;反之则跳过;

64、步骤3.2.6,再将提取出的平面向xoz面进行投影,使所有点形成一条水平线段,将投影点按照x值从小到大排序,使用公式(5)计算相邻两点之间的距离;

65、步骤3.2.7,通过确定哪些点之间的关联阈值大于3倍的中值距离阈值disx来检测立面中是否存在水平间隙,其中每个间隙可以将数据分成两个不同的点簇,若存在间隙,则对立面再次进行分割,实现提取结果的优化;反之跳过;

66、步骤3.2.8,重复步骤3.2.1-3.2.7,直至从建筑点云中提取出所有潜在立面,再根据主墙面特征,主墙面特征包括高度、垂直于xoz面特征,从所有潜在立面中提取出所需的建筑立面,并加入集合w中,w={w1,w2,…ws},其中wj表示为第j个立面,j=1,2,…,s,s是提取的立面总数。

67、所述步骤4具体为:

68、步骤4.1:立面投影拟合

69、在空间直角坐标系中,将平面方程一般式写为ax+by+cz+d=0,将平行于xoz坐标面的平面作为投影面;对建筑立面点云数据p={p0,p1,…,pn}进行投影,首先确定点云数据的y轴最小值ymin和最大值ymax,并令y=(ymin+ymax)/2为投影平面;再将点云数据向平面进行投影,求出投影后的点坐标;最后采用最小二乘法估计主墙面位置;

70、步骤4.2:点距约束,根据点到直线的距离将给定阈值范围外的点进行删除;

71、步骤4.2.1,针对投影点集p′={p′0,p′1,…,p′n}中每一个点,计算点到直线的距离;

72、步骤4.2.2,若小于距离阈值dw,则将该点的索引存入数组中;反之跳过,继续判断下一个点,直至所有点都进行判断;

73、步骤4.2.3,根据点索引从原始点云数据p中提取出主墙面点,实现建筑立面的主墙面探测。

74、步骤5具体为:

75、步骤5.1,通过空间栅格划分,初步定位窗户区域

76、步骤5.1.1,根据步骤4得到的主墙面包围盒大小,构建一个可以容纳所有点云数据的3d空间,将3d空间沿x、y和z轴平均划分为m*n*l个小空间栅格,并对每个空间栅格进行编号;

77、步骤5.1.2,依据栅格划分个数分别计算出点云数据沿三个方向的网格边长,并将点云数据填充到空间网格中,获得每个点对应的网格索引,采用公式(6)计算与点(x,y,z)对应的网格索引(i,j,k),计算完成后,同一网格索引的点被置于同一空间栅格中;

78、

79、式(6)中:cellx——空间栅格在x轴方向上的尺寸;celly——空间栅格在y轴方向上的尺寸;cellz——空间栅格在z轴方向上的尺寸;

80、步骤5.1.3,遍历空间栅格,当栅格中无点时,认为该栅格位于潜在窗户区域,并将其标记为1,反之,认为是墙壁,并标记为0;

81、步骤5.1.4,统计潜在窗户区域分别沿x和y方向上的栅格个数,计算其比值和面积,若比值小于设定阈值tr且面积大于阈值ts,则认为该区域是干扰元素,将该区域中的栅格标记为0;否则,认为该区域为窗户区域,记录位于四个角的网格索引;

82、步骤5.1.5,重复步骤5.1.4,直至判断完所有潜在窗户区域,从而获得建筑立面中候选窗户的大致位置;

83、步骤5.1.6,根据得到的初步候选窗户位置,以窗户边界为起点,向四周扩展一个栅格的范围得到候选窗户边界栅格,对于候选窗户边界栅格中的点,将其索引存入数组v,避免全局点云参与检测;

84、步骤5.2,提取窗户的精确边界,并对其进行单体化操作;

85、步骤5.2.1,首先根据步骤5.1得到的索引数组v提取点云子集r,在子集r中任意选择两点p1、p2,绘制过点p1、p2半径为α的圆,逐一判断r中其余点是否在圆内。若圆内不存在点,则认为点p1、p2为边界点。其中半径α由公式(7)和公式(8)计算得到;

86、

87、

88、式(7)和(8)中:k——近邻点的个数;di——近邻点到当前点的距;

89、步骤5.2.2,重复步骤5.2.1,遍历子集r中所有点,则可得到建筑立面中开口的边界点;

90、步骤5.2.3,对步骤5.2.2得到的边界点进行单体化操作,根据边界点集合sin={u0,u1,…,un},计算其质心,并通过knn算法找到与质心距离最近的点,并将该点作为初始种子点;

91、步骤5.2.4,根据公式(9)计算其余点到初始种子点的最近欧式距离,然后利用公式(10)计算其余点被选作下一个聚类中心的概率,将概率最大的点作为下一个聚类中心;

92、d(ci)=min(dist(ci,u1),dist(ci,u2),dist(ci,u3),…,dist(ci,un))(9)

93、

94、步骤5.2.5,不断重复步骤5.2.4,直至得到k个聚类中心或者当前距离变化量小于阈值;

95、步骤5.2.6,计算剩余点与k个聚类中心的距离,将距离中心较近的点划分为同一类;

96、步骤5.2.7,根据更新的分类集合重新计算聚类中心;

97、步骤5.2.8,重复步骤5.2.6和5.2.7,直至达到迭代次数或聚类中心不再发生变化。

98、步骤5.2.9,去除不属于窗户元素的干扰因素,在代码中设置面积阈值γs、长宽比γl,以及设置距离地面的高度阈值γh,将干扰元素进行删除,实现窗户的单体化提取。

99、步骤6具体为:

100、步骤6.1,提取特征点;

101、步骤6.1.1,采用quickhull凸包算法提取特征点,首先初始化由四个坐标极值点组成的四边形,构成初始凸包;

102、步骤6.1.2,将步骤5.2得到的边界点集中位于初始凸包内部的点进行删除,再从剩余点中找出离初始凸包边最远的点,将该点作为新的凸包顶点,重复该过程,直至将所有点处理完毕,由此便可得到所需的特征点;

103、步骤6.2,特征点排序与调整;

104、步骤6.2.1,获得步骤6.1.2的特征点后,首先计算特征点的质心点o;

105、步骤6.2.2,计算每个点到点o的连线与x轴正方向的夹角,根据夹角的大小,从大到小进行排序;

106、步骤6.2.3,根据相邻两特征点间的向量与x轴和y轴的夹角,判断该点位于水平方向还是垂直方向,当位于水平方向时,需要将位置不恰当的点的y值置于当前方向上与x轴夹角最小的点的y值;当位于垂直方向时,则需要将位置不恰当的点的x值置于当前方向上与y轴夹角最小的点的x值;

107、步骤6.2.4,为了防止弧形窗户被变换至矩形窗户,仍需要根据公式(11)计算每个窗户的实际周长与理想周长的比值μ,若μ<0.90,则该窗户是弧形窗户,对于窗户中弧形部分的特征点不进行坐标调整操作;

108、

109、式(11)中:

110、pi——特征点中的一点;

111、n——特征点的个数;

112、maxy、miny——分别是单体窗户点云数据中的最大y值和最小y值;

113、maxx、minx——分别是单体窗户点云数据中的最大x值和最小x值;

114、步骤6.3,等距插点;

115、步骤6.3.1,依据步骤6.2.2点的排列顺序计算两个相邻点之间的距离,根据相邻点间的向量单位和每个新点之间的间距,在该向量上插入新点,达到获取精细化边界提取的目的,最后将边界点两两进行连接,生成窗户轮廓线。

116、本发明的有益效果是:

117、本发明基于孔洞约束和层次化定位的窗户检测方法,首先提取复杂室外场景中的建筑立面;然后借助孔洞思想,对从建筑立面中提取的主墙面通过层次化判断得到精确的窗户边界信息,并通过聚类将窗户边界点单体化;然后针对每个单体窗户边界点,提取其特征点,采用等间距插点的方式将边界点规则化;最后构建窗户线框模型,得到窗户检测结果。本发明解决了复杂立面中由于窗户分布不规律、形状不统一导致的窗户检测不准确的问题,本发明可以实现不同立面结构的复杂建筑的窗户检测,提高了检测的准确度。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1