本发明属于虚拟现实技术领域,涉及三维点云处理技术及三维模型建模技术,具体是指一种面向复杂三维建筑物点云屋顶及侧面的优化重建方法。
背景技术:
三维建模技术在工业、游戏、影视及虚拟现实等相关领域的应用需求越来越广泛。真三维地形建模旨在通过对三维地形场景进行三维重建在虚拟环境中复现逼真的三维地形环境,这一技术在国内外均取得了一定的研究成果。随着“数字城市”等相关概念的提出,对真三维地形建模的要求也越来越高,如何建立逼真的三维城市环境成为了一个研究的主流方向。
三维城市环境中不仅包括基础的地形环境,还包含了大量的建筑物、植被及车辆等人文信息。对于三维建筑物而言,其为三维城市环境中除地形外最为广泛存在且最为复杂的对象,能很好的反映虚拟三维城市环境建模的效果。目前,随着激光雷达采集技术、无人机倾斜摄影技术、slam技术(simultaneouslocalizationandmapping,即时定位与地图构建)等的不断发展,使得我们能够获得大量的三维建筑物表面点云,由此而言,研究如何对三维建筑物点云进行建模有着重要的意义和前景。三维建筑物点云存在着数据量大、点云分布不规则的特点,故实现三维建筑物屋顶及侧面优化重建涉及到三维点云处理及三维模型建模等多方面的相关技术。
技术实现要素:
本发明针对现有的三维建筑物点云建模技术存在的问题和不足,设计实现一种面向复杂三维建筑物点云的屋顶及侧面优化重建方法,通过将三维建筑物点云屋顶及侧面分割,对分割后的每一部分单独进行重建,建立保留原始建筑物屋顶及侧面信息的逼真三维建筑物模型。本发明所述的优化重建方法首先对建筑物原始点云进行预处理,调整建筑物点云垂直方向,对预处理后的点云分割提取建筑物屋顶和侧面点云;对分割得到的建筑物屋顶和侧面点云分别采取适合的建模方式进行建模;最后融合建筑物屋顶模型和侧面模型,对坐标进行修正,得到优化重建后的三维建筑物。
本发明提供的所述面向复杂三维建筑物点云的屋顶及侧面优化重建方法,具体包括如下步骤:
步骤一、对建筑物原始点云进行预处理建立地形分类模型,调整建筑物点云垂直方向,对预处理后的点云分割提取建筑物屋顶和侧面点云;
步骤101、获取三维建筑物点云,对原始点云进行统计学滤波及体素化滤波预处理,移除噪声和离散点云;
步骤102、建立标准坐标系,对预处理后点云平面切片,根据平面切片对三维建筑物点云进行旋转,校正点云垂直方向;
步骤103、对校正后得到的点云进行数据分割,得到建筑物侧面点云和建筑物屋顶点云,分别用于步骤二和步骤三进行建模。
步骤二、采用分层重建方法,对建筑物侧面点云进行处理,对三维建筑物侧面进行优化重建,具体包括如下步骤:
步骤201、点云平面提取、分割及聚类,对三维建筑物点云进行分割聚类;
通过p-linkage算法等一系列处理对侧面点云进行平面提取、分割,对分割得到的点云进行平面拟合,计算平面法向量,根据距离和法向量对点云平面分块进行聚类,将三维建筑物点云分割聚类为前后层、左右层及上下层点云。
步骤202、前后层平面拟合修正,对前后层点云进行优化调整;
将前后层点云投影至左右层点云平面,使用直线拟合方法对前后层平面进行拟合,根据拟合后的前后层平面将前后层平面分块进行初步聚类,结合邻近点云平面分块归属对聚类结果进行调整,重新投影,并将同一类别点云分块投影至同一平面,得到优化后的前后层平面点云;
步骤203、基于分层重建的方法对优化后的前后层平面点云进行处理,重建前后层平面点云对应的三维模型,即前后层平面模型;
步骤204、采用基于切片分层的方法构建前后层之间的垂直连接关系,建立前后层垂直连接模型,采用基于投影的方法构建前后层水平连接关系,建立前后层水平连接模型;
步骤205、对步骤203和步骤204中分别得到的前后层平面模型、前后层垂直连接模型和前后层水平连接模型进行拼接融合,得到融合模型;对得到的融合模型移除重复点,对面片进行调整,得到完整的建筑物侧面三维模型。
步骤三、采用分块重建方法,对建筑物屋顶点云进行处理,对三维建筑物屋顶进行优化重建,具体包括以下步骤:
步骤301、根据建筑物侧面点云主方向,对点云进行旋转,旋转后的点云投影至xoy平面并进行插值,转换为屋顶投影图片;
步骤302、对屋顶投影图片,利用canny算子检测屋顶投影图片轮廓,对检测到的轮廓线,基于霍夫变换提取直线;
步骤303、对提取到的直线进行优化调整,将屋顶点云进行分块;
步骤304、遍历所有分块,提取其中的底部平面区域进行建模;
步骤305、遍历其它分块,对每一分块进行建模。
首先新建一个点集,该点集水平和竖直方向点数与步骤301中插值得到的图片宽和高一致;对建筑物屋顶点云进行均匀采样,遍历点集中的每一个点,基于kd树的搜索算法查找圆形邻域范围内屋顶点云的极大值;对每一分块,查找其分块区域内点z值分布,根据z值分布调整其几何结构,完成分块内顶部建模;根据每一分块前后左右四个方向分块结构建立其侧面结构,完成分块侧面建模。
步骤四:对步骤二和步骤三重建得到的三维建筑物屋顶和侧面点云进行拼接融合,并进行移除重复点操作,对面片进行调整,得到完整的建筑物三维模型。
本发明的优点在于:
(1)该发明对建筑物侧面和建筑物屋顶点云分别进行建模,更大程度的保留了原始建筑物的几何信息。
(2)该方法在建模过程中对原始点云进行了一定程度的修正,建立模型逼真程度高,能够更好的描述三维建筑物几何外形。
(3)该方法建立的三维建筑物模型点数及模型三角面片数目相比传统的建模方法极大减少,但模型精度相比传统的建模方法有很大程度提高,在仿真过程中占用资源少,能满足大场景仿真的基本需求。
附图说明
图1是本发明的优化重建方法实现流程图;
图2(a)~(d)是垂直方向校正前和垂直方向校正后的建筑物点云对比示意图;
图3(a)和图3(b)是建筑物侧面点云和屋顶点云分割结果;
图4(a)和图4(b)是点云平面分块分割和平面分块聚类结果;
图5(a)和图5(b)是直线拟合及优化级前后层点云平面拟合结果;
图6(a)和图6(b)是前后层平面聚类及聚类调整结果表示结果;
图7是优化重投影后前后层点云;
图8是前后层点云单层旋转之后的点云;
图9(a)和图9(b)是前后层单层点云投影插值得到的图片及图像闭运算后的图片;
图10是前后层单层点云直线提取结果;
图11(a)和图11(b)是前后层单层点云模型建模结果,包括点集和三角面片;
图12(a)和图12(b)是前后层点云模型建模结果,包括点集和三角面片;
图13(a)和图13(b)是前后层点云垂直连接模型建模结果,包括点集和三角面片;
图14(a)和图14(b)是前后层点云水平连接模型建模结果,包括点集和三角面片;
图15(a)和图15(b)是建筑物侧面三角面片模型和三维重建模型结果;
图16是建筑物侧面模型和原始点云叠加后结果;
图17(a)和图17(b)是建筑物屋顶投影图和直线提取插值拟合后结果图;
图18(a)和图18(b)是建筑物屋顶三维建模结果;
图19(a)和图19(b)是建筑物完整的三维重建模型结果。
具体实施方式
下面将结合附图对本发明做出详细的说明。
本发明针对现有建模方法中侧面信息缺失,建筑物模型逼真度不高的情况,提出了一种面向复杂三维建筑物点云的屋顶及侧面的优化重建方法。本发明所述的优化重建方法首先对原始建筑物点云进行预处理,滤除噪声点和离散点,并调整原始建筑物点云垂直方向,对预处理后的点云分割提取建筑物屋顶和侧面点云。对分割提取得到的建筑物侧面点云,通过p-linkage算法进行平面提取、分割,通过计算平面法向量对平面进行聚类,将三维建筑物点云聚类为前后层、左右层及上下层点云;基于直线拟合的方法对前后层平面进行拟合,根据拟合结果将前后层点云分块进行重新聚类,并将同一类别点云分块投影至同一平面,得到优化后的前后层点云;使用基于分层重建的方法对前后层点云平面进行处理,重建前后层平面模型,进一步采用基于切片分层的方法构建前后层之间的垂直连接关系,建立前后层垂直连接模型,采用基于投影的方法构建前后层水平连接关系,建立前后层水平连接模型;然后对前后层平面模型、前后层垂直连接模型和前后层水平连接模型进行融合,得到完整的建筑物侧面模型。对分割得到建筑物屋顶点云,首先将屋顶点云投影转换为图片,利用canny算子检测图片轮廓,在上述轮廓基础上利用霍夫变换检测提取直线,通过对直线进行优化调整,将屋顶平面分割为块,对每一块分别进行建模,得到建筑物屋顶模型。最后融合建筑物屋顶模型和侧面模型,移除重复点集并调整三角面片,即可得到最终建筑物完整的三维模型。
如图1所示流程,本发明提供的所述的优化重建方法具体包括如下步骤:
步骤一、对点云进行预处理建立地形分类模型,调整建筑物点云垂直方向,对预处理后的点云分割提取建筑物屋顶和侧面点云;
步骤101、获取三维建筑物原始点云,对原始点云进行统计学滤波及体素化滤波预处理,移除噪声和离散点云;
步骤102、建立标准坐标系,对预处理后点云进行平面切片,根据平面切片对三维建筑物点云进行旋转,校正点云垂直方向;图2(a)(b)中给出的是校正前点云,图2(c)(d)中给出的是校正后的点云;
(102-1)首先建立标准坐标系,其中x轴为水平(左右)方向,y轴为竖直(前后)方向,z轴为垂直(上下)方向;
(102-2)对预处理后的点云计算其质心位置p及其外包围盒的极大值点pmax和极小值点pmin;
(102-3)按照xoz平面方向分别在y=py+1/3(pmaxy-pminy),y=py-1/3(pmaxy-pminy),y=py处,对建筑物侧面点云进行切片,将切片内点云投影至xoz平面,进行直线提取及拟合,确定原始点云垂直轴方向
(102-4)按照yoz平面方向分别在x=px+1/3(pmaxx-pminx),x=px-1/3(pmaxx-pminx),x=px处,对建筑物侧面点云进行切片,将切片内点云投影至xoz平面,根据对切片内点云进行直线提取及拟合,确定原始点云垂直轴方向
(102-5)根据
其中,两次旋转的旋转轴分别为
步骤103、使用cloudcompare软件对校正后得到的点云进行数据分割,得到建筑物侧面点云和建筑物屋顶点云,分别用于步骤二和步骤三进行建模,分割后的点云如图3(a)和3(b)所示。
步骤二、采用分层重建方法,对建筑物侧面点云进行处理,对三维建筑物侧面进行优化重建,具体包括如下步骤:
步骤201、点云平面提取、分割及聚类,对三维建筑物侧面点云进行分割聚类;
(201-1)通过p-linkage算法对建筑物侧面点云进行平面提取及分割,将建筑物侧面点云分割为小的平面分块,分割结果如图4(a)所示;
(201-2)对分割得到的平面分块进行平面拟合,分别计算平面分块法向量;
(201-3)根据距离和法向量对点云平面分块进行初步聚类,提取三维建筑物的三个主方向,并将分块最多的方向作为前后层的主方向;
(201-4)根据三个主方向,将建筑物点云平面分块聚类为前后层、左右层及上下层点云,结果如图4(b)所示。
步骤202、对前后层点云进行平面拟合,根据拟合平面对前后层点云分块进行聚类、结合邻近点云分块归属对聚类结果进行优化,得到优化后前后层平面点云;
将前后层点云投影至左右层点云平面,基于ransac算法进行直线拟合,拟合前后层平面,根据拟合后的前后层平面将前后层平面分块进行初步聚类,结合邻近点云平面分块归属对聚类结果进行优化调整,将同一类别平面分块投影至同一平面,得到优化后的前后层点云,具体步骤如下所述:
(202-1)提取左右层点云,计算左右层点云平面基本参数mlr(alr,blr,clr,dlr),即为投影平面基本参数;
alrx+blry+clrz+dlr=0
dlr=-(alrxc+blryc+clrzc)
其中,(alr,blr,clr,dlr)是描述平面空间特征的常数,(alr,blr,clr)是左右层点云平面集合plr的法向量,(xc,yc,zc)是建筑物侧面点云集合质心点,(x,y,z)是左右层点云集合中点的坐标。
(202-2)将前后层点云集合pfb投影至平面alrx+blry+clrz+dlr=0上,得到投影后的平面点集pfb2lr;
(202-3)基于ransac随机抽样一致性算法对投影得到的点云循环进行直线拟合,直至剩余点云不满足拟合直线的要求,得到一组直线拟合方程;
(202-4)提取上下层点云,根据建筑物侧面点云集合质心点(xc,yc,zc),计算上下层点云平面基本参数mud(aud,bud,cud,dud);
(202-5)对步骤(202-3)中得到的直线拟合方程分别计算和上下层点云平面的交点,得到直线和平面的交点集合pp2p;
(202-6)计算交点集合pp2p中任意两点的距离中的最大距离作为基准距离dmax,分别计算任意两条直线间距离和其对应的点云数目,若满足下式,则认为其属于同一条直线,即属于同一前后层平面,对直线进行合并,移除距离相近且点云数目相差过大的直线,对前后层点云平面进行调整;
其中,dij为第i条和第j条拟合直线的距离,ni为属于第i条拟合直线包含的点云数目,nj为第j条拟合直线包含的点云数目;
(202-7)利用前后层点云法向量
利用校正之后的前后层平面对前后层点云平面分块进行重新聚类,针对聚类存在错误的情况,使用基于距离和邻近平面分块归属的优化方法对聚类结果进行优化,修正错误聚类,对聚类之后的点云进行重投影,投影到与之对应的前后层平面,即可得到优化处理后的前后层点云,具体步骤如下:
(202-a)遍历所有的前后层点云平面分块,分别计算每一平面分块bi(i=1,2……m,m表示当前前后层点云平面分块的数目)和重新拟合后得到的平面集合中平面p(p=1,2……n,n表示拟合得到的前后层平面的数目)之间的距离dip,计算公式如下:
其中,(xave,yave,zave)为平面分块内所有点坐标值的均值,(a,b,c,d)为拟合得到的平面方程参数;
(202-b)基于距离dip对平面分块进行聚类,根据距离大小进行排序确定每一分块其所属的前后层平面,聚类结果如图6(a)所示;
(202-c)遍历所有的前后层点云平面分块,对每一分块bi,使用基于kd树的搜索算法查找与当前分块bi相邻且并非位于bi上方的分块bj,(i,j=1,2……n,i≠j,n表示所有前后层点云平面分块的总数目);
(202-d)若bi和bj属于同一前后层平面,则继续遍历下一分块bi+1;若bi和bj不属于同一前后层平面,则将bj所属的前后层平面序号更改调整为bi所属的前后层平面序号;
(202-e)遍历所有拟合后的前后层平面,对每一平面提取所有相关的平面分块bi,将每一分块bi投影至其所属的前后层平面,将投影后得到的点集添加到新的前后层平面点云集合中;
(202-f)当所有的前后层平面遍历完成后,即可得到优化后的前后层平面点云集合pfb。
基于距离和邻近分块归属的优化方法优化聚类结果的效果如图6(b)所示,同一灰度值描述的点云属于同一个前后层,重投影之后得到的优化处理后前后层平面点云如图7所示。
步骤203、基于分层重建的方法对优化后的前后层平面点云进行处理,重建前后层平面模型;
传统的表面重建方法,如poisson表面重建,模型表面存在着崎岖变形的问题且模型点数面片数相对较多,在大场景仿真过程中会占用大量资源,实际仿真过程中并不适用。本发明给出了一种模型表面重建方法,该方法采用基于分层重建的方法重建前后层平面模型,首先对前后层平面点云集合中的每一平面点云分别进行投影并插值,转换为图片;通过lsd算法对图片中直线进行提取、聚类,将平面点云分割为矩形集合;对每个矩形分别判断其对应区域内是否存在前后层点云,将平面转化为若干矩形线框集合,进而将矩形线框剖分为相对应的三角形面片集合,即为前后层平面模型,具体实现步骤如下:
(203-1)分别提取前后层平面点云中的每一层平面点云以及前后层平面点云的法向量
其中,
(203-2)投影插值:新建一张黑色图片,对每一个像素点pi的像素坐标为pi=(ui,vi),遍历以pi为中心的圆形邻域,若邻域内存在点云,则将点pi的像素值置为(255,255,255),即为白色;
(203-3)对步骤(203-2)得到的图片进行形态学闭运算,能够消除图片中的细小空洞,同时对边缘进行一定的平滑处理;
图8中给出的步骤(203-1)旋转之后得到的点云结果,图9(a)中给出了投影插值得到的图片,图9(b)中给出的是闭运算之后得到的图片结果。
(203-4)对步骤(203-3)中得到的图片进行直线的初步提取,使用的方法为lsd算法,对提取出的直线移除与水平或竖直方向偏差过大的直线,只保留近似于水平或者垂直方向的直线,提取的结果如图10所示;
(203-5)建立极坐标系,分别计算每条直线在极坐标系下坐标,具体公式如下:
k=(b-d)/(a-c)
i=b-k·a
r=a·cosθ+b·sinθ
其中,(a,b)和(c,d)分别为直线两个端点在图像坐标系中的坐标,k为直线的斜率,i为直线在y轴上的截距,(r,θ)为该直线段在极坐标系下的坐标,图像坐标系指以图像左上角为原点建立以像素为单位的直角坐标系,极坐标系是指在平面内由极点、极轴和极径组成的坐标系,其极点为图像的中心点。
(203-6)对满足下列公式的直线进行聚类,对同一类的直线进行加权平均,获得聚类之后的平面内直线,将直线划分为水平方向和竖直方向直线;
其中,dθ为两条直线之间的极坐标角度差值,dr为两条直线之间的极坐标半径差值,δθ及δr分别为极坐标角度差值和距离差值的阈值,该方法中取δr=5,δθ=10°;
(203-7)利用步骤(203-6)得到的水平方向直线和竖直方向直线对二维图像进行分割,将二维图像分割为(m+1)×(n+1)块,其中m,n分别为水平方向直线和竖直方向直线数目;
(203-8)遍历检索每一分块图像,若图像分块内白色像素点数目远大于黑色像素点数目,则认为该块为有效分块,将该分块所对应的四个像素点转换至点云坐标系下,其中点云坐标系指的是右手三维坐标系,并将对应的四个像素点添加至前后层平面模型点集中,添加顺序按照先上后下,先左后右,继续遍历下一分块;遍历所有图像分块,即可得到完整的前后层平面模型点集vfb,结果如图11(a)所示;
(203-9)对前后层平面模型点集中每一个分块剖分为两个三角形面片,进而可以得到前后层平面模型三角面片集合,结果如图11(b)所示。
前后层平面模型建模得到的完整点集如图12(a)所示,三角面片集合如图12(b)所示,可以得出,相比传统的表面重建方法,本方法能在满足模型真实感的前提下极大程度减少顶点和面片数目。
步骤204、采用基于切片分层的方法构建前后层之间的垂直连接关系,建立前后层垂直连接模型,采用基于投影的方法构建前后层水平连接关系,建立前后层水平连接模型;
相比前后层点云,左右层及上下层点云存在更多缺失、失真情况,且点云较分散,缺少前后层点云的规则性,无法采用与前后层点云建模相同的方法。本方法采用了基于切片分层的方法构建前后层之间的垂直连接关系,在得到建筑物前后层平面模型并完成xz坐标修正后,首先依据不同的x值对点云进行切片,分别对不同切片进行网格化,构建前后层平面模型之间的垂直连接关系。针对y方向点云稀疏较少的情况,本方法采用基于投影的方法构建前后层水平连接关系,依据不同的y值对点云进行切片,分别提取切片内的水平线段,选择合适的前后层平面进行投影,构建前后层平面模型之间的水平连接模型;
(204-1)分别提取不同的x值,按照x值进行排序,分别检索不同的值,将前后层平面模型点集vfb延x轴方向进行切片,分别提取对于切片内所有点构成切片包围点集,获取包围点集内所有点构成的外包围边界集合e;
(204-2)分别提取切片包围点集的y坐标序列{yi|i=1,2,…,m}和z坐标序列{zi|i=1,2,…,n},将切片分割为(m+1)×(n+1)块;
(204-3)遍历检索分块bi,若bi∈e,则执行步骤(204-4),否则检索下一分块,完成所有分块的遍历后执行步骤(204-5);
(204-4)对分块bi查找在左右层平面点云集合plr中查找最近邻平面,若最近邻平面满足下式,则将分块bi的四个顶点添加到前后层垂直连接点集vfbv中,并将该分块剖分为两个三角形面片,并添加至前后层垂直连接三角面片集合中;
其中,di为分块bi和最近邻平面的平均距离,δd为满足条件的最大距离阈值,ni为最近邻平面点云数量,δn为满足条件的最小平面点云数量;
前后层垂直连接点集vfbv结果如图13(a)所示,前后层垂直连接三角面片集合如图13(b)所示。
(204-5)遍历所有的前后层平面,对每一个前后层平面提取前后层平面的外包围边界集合w;
(204-6)分别提取不同的z值,按照z值大小进行排序,得到z值集合{zi|i=1,2……β};
(204-7)分别检索不同的z值,对上下层点云延z轴方向进行切片,分别提取切片内所有点构成点集,获取包围点集内所有矩形的外包围边界集合w;
(204-8)遍历切片内的所有水平直线段,分别向前和向后检索其它前后层平面,若该水平直线段位于某前后层平面外包围边界内,则认为该水平直线段可以进行投影,执行步骤(204-9),否则继续遍历下一直线段;
(204-9)将水平直线段向前后层平面进行投影,可以得到一个矩形区域,若该区域位于当前切片的外包围边界w内,则执行步骤(204-10),否则执行步骤(204-8),检索下一直线段;
(204-10)对矩形区域,在上下层点云集合pud中查找最近邻平面,若最近邻平面满足下式,则将水平直线段两个顶点和其投影的两个顶点添加到前后层水平连接点集中,并将该块剖分为两个三角形面片,并添加至前后层水平连接三角面片集合vfbh中;
其中,di为分块bi和最近邻平面的平均距离,δd为满足条件的最大距离阈值,ni为最近邻平面点云数量,δn为满足条件的最小平面点云数量;
(204-11)检索下一个z值,重复执行步骤(204-3),直至检索完成,得到最终的前后层水平连接点集中水平连接三角面片集合;
前后层水平连接点集vfbh的结果如图14(a)所示,前后层垂直连接三角面片集合如图14(b)所示。
步骤205、对步骤203和步骤204中分别得到的前后层平面模型、前后层垂直连接模型和前后层水平连接模型进行拼接融合,移除重复点,对面片进行调整,得到完整的建筑物侧面三维模型。
分别将前后层平面模型、前后层垂直连接模型及前后层水平连接模型对应的点集添加至最终输出模型点集中,拼接前后层平面模型、前后层垂直连接模型及前后层水平连接模型,完成整个建筑物的三维建模。同时移除点集中重复顶点数据,根据调整后点集调整三角面片,如图15(a),顶点数目210,面片数目294,最终的建筑物侧面三维模型重建结果如图15(b),将建筑物侧面模型和原始点云叠加后结果如图16所示。
步骤三:采用分块重建方法,对建筑物屋顶点云进行处理,对三维建筑物屋顶进行优化重建;
对分割得到建筑物屋顶点云,首先将屋顶点云投影转换为图片,利用canny算子检测图片轮廓,在上述轮廓基础上利用霍夫变换检测提取直线,通过对直线进行优化调整,将屋顶平面分割为分块,对每一分块分别进行建模,得到建筑物屋顶三维模型。
步骤301、根据建筑物侧面点云主方向,对点云进行旋转,旋转后的点云投影至xoy平面并进行插值,转换为图片,其中旋转轴方向向量和旋转角由下式给出;
其中,
步骤302、对屋顶投影图片,利用canny算子检测图像轮廓,对检测到的轮廓线,基于霍夫变换提取直线,具体步骤如下所述:
(302-1)将旋转后的点云投影至xoy平面内;
(302-2)新建一张黑色图片,遍历图片内的每个像素点,利用基于kd树的查找算法查找其邻域范围内是否存在点云中的点,若存在,则对邻域内点的rgb值求加权平均值,若不存在,则继续遍历下一个点,直至完成所有像素点,插值得到的图片如图17(a)所示;
(302-3)对上述步骤得到的图片,利用canny算子检测图像轮廓并进行轮廓线提取;
(302-4)对检测到的轮廓线,利用霍夫变换进行直线提取。
步骤303、对提取到的直线进行优化调整,通过遍历所有直线,计算直线在极坐标系下的坐标,计算方式同步骤(203-5),根据计算结果只保留近似水平或者近似竖直的直线段,同时对距离很近的直线段进行加权合并,对合并后的直线段调整其方向角θ为水平或者竖直方向,将屋顶点云进行分块,分块结果如图17(b);
步骤304、遍历所有分块,提取其中的有效区域及底部平面区域,并对底部平面区域进行建模;
遍历步骤303中得到的所有分块,对每一分块内像素点数进行统计,若有效像素点(非黑色)远大于黑的像素点数目,则认为该分块为有效分块区域,将分块对应的标志位置为1,将只对有效分块区域进行建模;遍历所有的有效分块区域,检索每一个分块内z极值和z均值及其平面性,若其近似为屋顶底部平面,将分块对应的标志位置为2,直接将该分块四个点添加至屋顶模型点集vd中。
步骤305、遍历其它分块,对每一分块进行建模。
(305-1)首先新建一个点集,该点集水平和竖直方向点数与步骤301中插值得到的图片宽和高一致;
(305-2)遍历点集中的每一个点,利用基于kd树的查找算法查找圆形邻域范围内原始点云若存在点云,则将邻域范围内点z的极大值作为该点z值,若不存在点云,则将屋顶点云z极小值作为该点z值;
(305-3)对每一分块,判断其分块区域内点z值分布,根据z值分布调整其几何结构基本方向;在分块内检索其z极大值,若极大值靠近分块边界,则直接进行建模,添加分块对应的四个顶点至屋顶模型点集vd中,否则执行步骤(305-4);
(305-4)若极大值远离分块边界,则需要在极大值处补充添加点,将原始的四个顶点和补充添加点一并添加至屋顶模型点集中vd中,完成分块内屋顶建模;
(305-5)遍历步骤(305-3)和(305-4)中建立的每一分块,根据每一分块前后左右四个方向分块结构建立其侧面结构,将侧面对应点集添加至屋顶模型点集vd中,遍历完成所有分块后,即可完成建筑物屋顶的三维建模。
最终建立的建筑物屋顶模型如图18(a)所示,其中图18(b)表示的是模型与原始点云叠加之后的结果。
步骤四:对步骤二和步骤三重建得到的三维建筑物屋顶和侧面点云模型进行拼接融合,移除重复的顶点数据,并根据移除重复点后得到的点集对原始三角面片进行调整,得到完整的建筑物三维模型,最终得到的模型效果如图19(a)和图19(b)所示。