实景三维的单体化模型重建
2021-10-20王凯松刘增良董志海
王凯松 刘增良 董志海
(1. 北京市测绘设计研究院, 北京 100038; 2. 城市空间信息工程北京市重点实验室, 北京 100038)
0 引言
倾斜摄影测量技术是近年来测绘领域逐步发展起来的新型测绘技术,通过在同一飞行平台上搭载多台传感器,可以同时从多个角度采集影像,获得近地高分辨率的建筑立面信息,大大降低城市三维建模的成本[1]。通过联合空中三角测量、影响匹配,可以获取地物全方位的点云数据,再利用点云数据构建三角网模型,通过纹理映射快速完成三维实景模型的构建,商业软件Context Capture、Street Factory等基于以上技术路线能实现全自动建模[2-3]。这类软件生成的实景三维模型是“全要素、全纹理”的可测量的Mesh模型,但是Mesh模型是“一张皮”,没有针对地物进行划分,同时由于倾斜摄影的特点,会导致遮挡严重的部分,尤其是模型底部会存在纹理和结构扭曲的问题。单体化是指将三维模型中各类地物划分为单独的对象,具有矢量数据特性,只有单体化后的三维模型才能够实现每个地物作为一个实体进行选择、显示、查询、管理[4]。
当前三维模型单体化的方法分为两大类,第一类是逻辑上的单体化,其核心思想是不改变Mesh模型的结构和纹理,只在展示时将地物对应的三角网做特殊渲染,具体实现方式有:实体编码(Identity Document,ID)单体化,利用三角面片中每个顶点额外的存储空间,将对应地物的ID值进行存储,可以实现地物的查询和高亮显示[5];动态单体化,在倾斜模型进行展示时,通过间接方式实现矢量范围内的三维模型高亮显示,从而实现单体化的目的[6]。这一类单体化方法的优点是不破坏Mesh模型的结构,地物分类方式可以根据不同业务灵活改变,但是不能解决Mesh模型的扭曲问题。第二类单体化方法是物理上的单体化,具体实现方式有:切割单体化,通过对Mesh三角网进行切割,将地物提取成单独模型[7],这种方式会破坏Mesh模型三角网结构,同时由于三维模型数量增多,三角网数量未减少,会降低在三维平台的渲染效率;重建单体化:以倾斜摄影测量数据为基础数据源,通过对地物模型进行重构实现模型的单体化,重建方式又分为基于点云数据的重建、基于立体像对的重建、基于Mesh的重建,其中基于点云的重建是自动化的,但是由于使用的点云数据往往是机载数据,点密度低会导致模型结构还原度不好,只能达到LOD2级别,基于立体像对和Mesh的方法是半自动化的,模型结构通过手动建模方式获得,贴图从航片中自动进行映射,代表性的商业软件有武汉智觉空间(SVS)的SVSModeler、武汉天际航的DP-Modeler,通过这两种方式重建的模型可以解决Mesh模型底部扭曲问题,同时可以大幅减少模型三角面数量。
本文的研究路线采用了基于Mesh模型的重建单体化方式,对地物进行重建。
1 总体框架
基于Mesh模型的重建单体化的建模技术路线是:直接在倾斜摄影测量获得的Mesh模型上进行三维特征点拾取,由点构面,由面形成体,获得单体化三维模型结构信息;基于空三中航片的内外方位元素,利用共线方程筛选和计算模型各个面的纹理,获得单体化三维模型的纹理信息。从而得到重建后的单体化三维模型。总体技术路线如图1所示。
图1 技术路线图
2 数据准备
本文基于实景三维模型、空三文件、倾斜摄影航片、手持拍摄照片进行三维模型重建,其中前三种文件可以在商业软件中一次性生成。
对于通过倾斜摄影采集的航片,首先,进行预处理,排除掉有缺陷的数据,再进行匀光匀色操作,确保航片色调一致;其次,进行空中三角测量,获得多视影像的高精度外方位元素,再基于多视影像密集匹配,获得高密度三维点云;再根据点云构建TIN网;最后,根据空三结果,为TIN中每个三角形进行纹理计算、贴图;最终生成实景三维模型[1]。
在生成实景三维模型后,将空三成果、实景三维Mesh模型、无畸变的倾斜摄影航片进行输出,作为模型重建的数据源。
3 模型结构重建
3.1 Mesh模型坐标拾取原理
Mesh模型在三维环境中加载,显示时是在以视点为原点的观察坐标系(View Coordinate System,VCS)中,屏幕显示为屏幕空间,用户通过点击屏幕上某一点,返回得到该屏幕点当前显示的三维坐标。其算法是:点击屏幕坐标,得到客户区坐标;由客户区坐标变换得到该点的VCS坐标A;从观察点发出射线,指向A,计算该射线与三维空间中所有物体的交点,本文的拾取方法只需要返回距观察点最近的一个交点B,此时B为VCS坐标系下的三维点,需要通过坐标变换,求得B点在世界坐标系(World Coordinate System,WCS)下的坐标B′并返回,即完成Mesh模型的坐标拾取[8]。本文使用OSG(Open Scenen Graph)实现Mesh模型的加载、显示和坐标拾取。关键代码如下:
osg::Vec3d getPos(osgViewer::View* view,const osgGA::GUIEventAdapter& ea)
{
osgUtil::LineSegmentIntersector::Intersections intersections;
if(view->computeIntersections(ea, intersections))
{
osgUtil::LineSegmentIntersector::Intersections::iterator iter
= intersections.begin();
return iter->getWorldIntersectPoint();
}
return osg::Vec3d(0.0,0.0,0.0);
}
3.2 基于Mesh模型进行结构重建
以实景三维模型作为底图,加载到建模软件中,根据地物的特点,每个地物重建时可以拆分为多个基本类型地物分别建模,每种基本类型地物根据其各自特点使用不同功能进行重建,以建筑物为例,其基本类型主要有:平顶房、屋脊房、女儿墙等,重建过程中辅助以不同模型加工功能,如:切割、挤出、拖拽等。重建过程中,普通楼房可以作为多边形平定房屋进行建模,首先确定房屋基准面,即楼房顶面,在建模软件中,可以对实景模型进行点击拾取操作来确定坐标,确定基准面后,将视角切换至顶视图,以垂直向下的正射视角绘制房屋轮廓线,绘制完毕后,生成轮廓面,再向下挤出生成楼房主体,一般挤出至地物附近Mesh模型的最低点,这样可以保证重建后的模型不会与地形模型存在缝隙。主体绘制完毕后,针对阳台等部件,对主体进行切割和挤出操作。由于是在软件中叠加实景模型作为底图,因此,可以实时观察重建模型与实景模型是否吻合,同时还可以切换至航片视角,叠加航片进行对比,保证模型的还原度和精度。针对楼房顶部的电梯房等附属结构,可把它视作小的平顶房屋进行建模,建模完毕后,将部件与主体进行合并,生成一个完整的建筑物模型。在实际操作中,为每个作业员分配一个测区进行建模,根据固定的编号规则为每个独立地物分类编号命名。
4 模型纹理重建
由于重建模型是基于实景三维模型建立的,因此,可以直接利用倾斜航片根据空三成果对重建模型进行自动映射。重建模型是由多边形构成的,只需要对模型的每个多边形分别进行纹理映射即可。
4.1 纹理来源筛选
首先由于倾斜摄影的重叠度较高,模型的每个点都能对应多张航片,因此,需要对纹理进行优选。优选的原则有以下几个方面:(1)像素数量,即该面在各个航片的投影,以面积最大的为优;(2)角度,以航片的朝向与面的法向量夹角,约接近180°者为优;(3)遮挡情况,以遮挡最小者为优。实际生产中,三个条件有可能出现矛盾,遮挡最小的航片有可能与面的法向量夹角较小,所以需要针对不同航摄情况,对贴图规则进行配置[9]。
4.2 纹理映射
纹理映射主要利用了共线方程
(1)
式中,x,y为像点的像平面坐标;x0,y0,f为影像的内方位元素;XS,YS,ZS为摄站点的物方空间坐标;XA,YA,ZA为物方点的物方空间坐标;ai,bi,ci(i=1,2,3)为影像的3个外方位角元素组成的9个方向余弦[10]。
针对单体化模型上某个面,已知面上的某点空间坐标A(X,Y,Z),利用共线方程,可以计算出该点在航片上的投影a(x,y),从而可以计算出该点的像素值。针对整个面,首先根据航片分辨率,计算该面的最优贴图尺寸,先生成空白贴图,并计算该面各个节点的纹理坐标。针对空白贴图上的每个像素点P(u,v),先计算出该点对应的WCS坐标系下的坐标P′(X,Y,Z),再利用共线方程求得其对应的航片像素坐标p(x,y),获取到像素值后赋给像素点P,循环遍历贴图的每个像素可得该面完整的贴图信息,对单体化模型的每个面进行上述计算,可完成整个单体化模型的纹理映射。
纹理映射自动完成后,需要人工进行检查,将遮挡严重的纹理进行人工筛选,或调用Photoshop等图像处理软件进行修饰[11-12]。
4.3 纹理修饰
倾斜摄影近地面部分常常存在遮挡,因此,在重点地区,如商业街、步行街、特色街区等,需要使用手持拍摄的照片进行人工纹理替换。在替换时应注意由于手持拍摄的照片拍摄距离近,其分辨率要远高于倾斜摄影航片,因此,需要在不影响清晰度的同时,将手持拍摄图片的纹理分辨率进行适当降低,以免出现模型纹理过大的情况。此外还需要对手持拍摄的纹理进行颜色调整,使其色调、饱和度等接近航片,以免造成视觉上的突兀感。
5 实验与分析
本文采用某街区作为实验区,采用地面分辨率为5 cm的倾斜摄影数据,使用本文的方法针对城市中常见的居民楼、写字楼等建筑物进行三维模型重建,实际单体化三维模型重建效果如图2所示,单体化模型成果与倾斜影像对比如图3所示。
图2 单体化模型成果
图3 影像与模型对比图
通过单体化模型重建,能够较好地解决建筑底部结构和纹理扭曲问题,图4展示了同一建筑的实景模型与单体化模型,左侧的实景模型存在大面积的结构扭曲和纹理变形,右侧的单体化模型通过重建有效解决了此问题。
图4 模型对比图
本技术基于实景三维模型进行模型特征点采集,相对于传统建模技术,作业人员可以直接观察到三维实景,可观察到的实景细节更多,采集的特征点更为丰富。传统建模技术中,内外业分开进行,外业先进行建筑物底面轮廓采集、纹理信息采集,内业人员对照建筑物图纸、轮廓信息、实拍图像进行建模,建筑物的顶部结构在测量中无法采集,因此,常常和现实情况不相符,侧面结构如阳台、飘窗等,也和现实尺寸有出入,并且丢失许多细节;采用本文技术,基于实景三维进行单体化模型重建可以很好地避免以上问题,并且可以获得更多的模型细节,建筑物的女儿墙、电梯间、老虎窗、房檐的结构都得到了精确地表达。在本实验中,采用本文的建模方法构建单体化三维模型,相比传统三维建模方式,在生产效率上提高了3倍左右,精度和还原度大大提高,经过检验,模型平均平面套合精度可以达到±0.20 m,高程套合精度达到±0.12 m。满足LOD3级别模型的要求。
6 结束语
本文从生产实践出发,以实景Mesh模型为基础,以倾斜航片为主,辅以地面拍摄照片,探索出了半自动的单体化三维模型重建方法。实验表明,该方法实现地物的单体化模型重建,同时能够解决实景Mesh模型底部结构扭曲纹理不清晰问题。相较传统手工建模方法,模型精度和还原程度更高,同时由于贴图采用自动化方式,效率也比传统手工建模有所提高,所生产的模型能够满足LOD3级标准。该方法精度和效率较高,具有一定的实用价值。
本方法还有以下几个方面需要进一步深入研究:
(1)模型建模效率可进一步提升:针对简单结构模型,如平房、规则楼房等,需要研究参数化建模方式,在保障模型精度的情况下,利用规则库进行自动化建模,减少一部分人工操作工作量。
(2)贴图遮挡问题需进一步解决:本方法中重建模型由多边形构成,纹理映射也是针对每个面进行映射,纹理映射时存在一定比例遮挡的情况,需要研究自动化算法,减少或避免纹理遮挡情况,能大大减少人工修改,进一步提升效率。