望晓尉,付仲良
(1.武汉大学遥感信息工程学院,湖北 武汉 430079)
实景三维模型的应用经历了以其为基底构筑数字城市、智慧城市、数字孪生城市以及城市信息模型的发展过程[1]。随着应用逐步广泛,针对实景三维模型的技术需求也与日俱增,如倾斜摄影模型单体化技术、点云密度提升技术等。随着深度学习的研究发展,较多学者将模型单体化的研究聚焦到了倾斜摄影模型密集匹配点云上[2-3]。但由于模型精细度以及模型数据量问题,部分较简单的实景三维模型不能满足点云分类分割的要求。在点云密度提升技术方面,Kinder[4]提出了高阶插值函数的多项式插值算法,比双线性插值准确度更高;杨成松[5]提出了一种基于不规则三角网的DEM 表面插值模型,比传统算法更准确。
本文在传统研究的基础上,深入剖析实景三维模型的数据结构,以模型数据产品为基础,逆向获取三维模型的点云数据,计算纹理坐标,重新构筑其顶点索引。本文方法能从简单的实景三维模型析出点云,并利用点云插值增加稠密程度,提升模型精细度,获取能满足点云分类与分割要求的三维模型。
目前的实景三维模型大多以OSGB 格式为主流,这种格式的优势在于应用群体大、数据结构清晰、代码生态原生。OSGB 格式的三维模型对所有基于OpenGL 以及OSG 所开发的三维地理信息系统都有较为良好的兼容性,有着庞大的用户群体;其三维数据具有较强的可读性,结构清晰且易于构建,在数据传输、格式转换、内容压缩方面都有明显的优势;与此同时,该格式的数据结构在逻辑层级满足C++的反射要求,能够较为轻松地从对应的数据格式中解析出其代码结构,从而为后续开发提供便利。本文针对该类型的实景三维模型,从文件结构、网格表示以及数据模型等三方面分别阐述其数据结构。
倾斜摄影测量在使用无人机拍摄的影像进行实景三维建模时,一般会采用区块处理的方式来提高建模效率,故而其原始文件的组织呈现一种空间横向瓦片剖分,层次纵向细节剖分的结构特性。
以四川崇州某区域的实景三维模型数据为例,由于该区域的瓦片文件以Tile_x_y的格式命名,故将其按(x,y)坐标进行展绘可得到如图1所示的横向瓦片切分结构图。该图描述了实景三维模型数据在磁盘空间上的文件组织方式,其中的红色区域为本文实验区域。
图1 实景三维模型横向瓦片切分结构
在层次纵向细节剖分层级上,对单个瓦片文件的内部数据资源调度进行分析,将细节层次模型的第14-21 层级按模型加载顺序由顶向下进行绘制,可得如图2所示的金字塔。
图2 实景三维模型纵向细节剖分金字塔
由上图可知,三维模型数据加载时细节层级模型的调度方式符合四叉树索引结构,在生成点云时可以根据此调用结构找到最适宜生成点云的底层模型;本文以此为基础,进一步研究实景三维数据的三维网格模型表达。
三维模型一般是指空间中物理实体对象的数学表示,其表达方式包括点云表达、体素表达以及多边形网格表达等3种[6]。本文主要研究其中2种,即由三维模型的多边形网格表达转换为点云表达。
三维模型的多边形网格表达是目前计算机图形学中最常用的三维模型绘制方法。其具有易于获取、曲面逼近性好、保留表面信息、形状简单等优点[7],目前最常用的多边形网格为三角形网格。而点云表达通常为生成多边形网格模型的过渡数据表达,一般不具备拓扑结构。
通过本文的研究,可以将三维网格模型转换为密集点云模型,进而借助点云模型的数据特性为后续的点云分割等研究提供技术依托。
以OSGB 格式存储的三维网格模型将纹理信息、顶点坐标信息、三维网格索引信息以及纹理坐标信息均保存在同一个文件中,提取其关键结构并分析可得到OSGB模型(如图3)。
图3 OSGB数据模型
以OSGB 数据模型为例,采用三角形网格进行表达的三维模型包含2 175 个顶点以及5 634 个面片;OSGB数据在保存上述几何信息的同时还存储了2 175个纹理坐标以及相应的纹理图片,以此来提高实景三维模型与真实世界的相似性。
本文所提出的面向OSGB 格式三维模型的实景三维模型点云析出方法主要包括以下3 个步骤:首先,利用节点遍历技术提取实景三维模型最精细一级文件的顶点坐标;随后,利用局部泰森插值对提取的顶点坐标进行点云插值,从而得到密集点云数据;最后,将实景三维网格模型的纹理信息作为图像进行导出。在导出纹理的过程中需要获取插值点的纹理坐标并重建面片索引来输出新的模型,这一方法将在下一章节中进行介绍。
本文针对OSGB 模型的特点,采用节点遍历的方式获取实景三维模型的最底层精细模型的顶点信息、纹理坐标信息以及面片信息,并从中提取出可用的顶点坐标数据进行析出。
实景三维模型数据本身对顶点结构进行了一定程度的简化,以此步骤分析出的顶点坐标信息实际上是一种稀疏点云。为了进一步提高析出数据的可用性,本文采用点云插值算法对稀疏点云进行插值,获取细节更为丰富的稠密点云。
目前的点云插值算法主要包括2 种:经典插值算法插值以及神经网络插值[8-11]。经典插值算法能够很快得到插值结果,但其插值效果与计算量大小密切相关[8];点云的神经网络插值算法具有很好的表现性能,但对原始模型拓扑几何信息的兼容性较差。
本文分析2 种方法的各自特点,针对建筑物实景三维模型的平面性结构,提出面向三角形网格模型的局部泰森插值算法,算法的流程如图4所示。
图4 局部泰森插值算法流程图
本文提出的局部泰森插值算法的主要流程为:
将行列式展开为平面方程的一般形式,即Ax+By+Cz+D=0。由此平面方程确定系数A1,B1,C1,D1,由空间三角形外接圆的性质联立方程确定系数A2,B2,C2,D2以及A3,B3,C3,D3,由此可推圆心O0的坐标为:
3)检查邻域三角面片的拓扑特性,对于非建筑表面的三角面片还需要以邻域泰森多边形角点的坐标作最小二乘法曲面拟合,在上一步求出的圆心坐标O0的基础上做偏移操作,使得泛函误差最小,得到最优化的插值点。
如图5所示,取三角面片F0,则其邻域三角面片集合为{F1,F2,F3,F4,F5,F6,F7,F8} ,作F0的外接圆求得其圆心为O0。通过对其进行邻域拓扑检查,最终确定参与第三步曲面拟合的三角形为F3,F6,F8,得到其圆心坐标O3,O6,O8,则最终的最优化插值点可由4个圆心坐标做协同计算而得到。
图5 插值算法示意图
以OSGB 格式存储的三维网格模型将纹理信息以图片的形式保存在同一个二进制文件中,在通过节点遍历的方式进行稀疏点云析出时可以同步导出模型对应的纹理图片。
在3D 模型的纹理贴图中常使用UV 映射将3D 网格转换到2D 平面便于对其包裹2D 纹理图片,其中U和V指的是2D空间的水平轴和垂直轴。实景三维模型中存储的纹理实际上就是一张执行完UV展开,将三角网格与参数平面建立一一映射后得到的图片(如图6)。
图6 导出的部分模型纹理示意图
输出新的三维模型需要新的面片索引,在插值生成点云数据后,需要根据插值后得到的新三角面片的顶点坐标以及顶点对应的纹理坐标来完成对面片索引的重建。
如上文的纹理导出一节所说,经过UV 展开得到的纹理贴图中3D网格和2D纹理是一一映射的,构成模型的三角网的每个顶点都有自己的纹理坐标,由插值得到的点无法直接从纹理图片中得到其纹理坐标。UV 展开保留了三角面片这一构成实景三维模型的最小单元,以此为原则,本文提出了基于平面单应性转换获取插值点的纹理坐标的方法。
平面单应性转换将一个平面内的点映射到另一个平面,这里的平面是指图像或者三维中的平面表面,由于UV 展开在纹理图片中保留了模型三角面片,利用面片顶点坐标与纹理坐标之间的映射关系以及三角面片本身具有的边对边约束关系,能够较为良好的解决本文所述的插值点的纹理坐标求解问题。
该投影坐标系可以进行任意尺度的缩放,为齐次坐标系,单应性矩阵H的自由度为8。因此通过三对点到点映射以及三角形的边对边约束,可以用直接线性变换法求解(3)式中矩阵H。得到该矩阵后,即可在执行点云插值后,根据插值点的坐标求得其纹理坐标,实现新增的顶点从纹理图片中调度其对应颜色的需求。
经过局部泰森插值算法的处理,原始的三角片面面片F0或其邻域三角面片将以插值点O0为中心裂变3 个新的三角面片,将此过程称为面片索引重建,其操作流程为:
首先,检查圆心O0所在的三角面片;由于三角形外接圆的圆心并不一定会落在当前三角形内,所以需要对此进行判断,若令该圆心落在三角形面片{v1,v2,v3} 中,则该面片即为原始三角形面片F。
接下来,添加外接圆圆心数据到稀疏点云列表中并得到其顶点坐标索引为vk;由此即可将原始三角面片F裂变为3个新的三角面片,分别为F1’={vk,v2,v3} ,F2’={vk,v1,v3} 以及F3’={vk,v1,v2} 。
最后,将新的三角面片F1’,F2’,F3’ 添加到面片索引列表中,并对应删除原始三角面片F,至此,本文完成了对面片索引的重建工作。
对四川崇州某城市区域的OSGB 三维模型进行实验,导出实验结果如图7、8所示。
图7 析出点云示意图
图8 输出模型示意图
本实验遍历原始的三维模型顶点并析出点云,使用的本文提出的插值方法并经过两次迭代的点云插值计算和最小二乘曲面拟合得到插值点云和新的面片,求出插值点的纹理坐标后,对面片索引进行重建,最后输出新的三维模型。
由图9a 和9b 对比看出,通过插值顶点个数从4 284 增加到38 898,切实提升了点云数量和稠密度。从图10a 和10b 对比看出,由实验得到的三维模型较原有模型,精细程度得到提升,地物边界更加明显,纹理的显示效果良好,且析出模型点云也能较好的符合实际情况。
图9 点云插值前后顶点数量对比
图10 插值前后模型细节对比
本文提出的算法能够在不借助倾斜摄影测量原始相片以及点云数据的条件下,保持建筑物原有平面几何结构,生成符合点云编辑、分割以及重建要求的稠密点云数据,并通过实验证明了析出点云构建的模型保持了良好的几何和纹理特性,为实景三维模型基于点云数据的进一步应用提供了理论基础,也为后续模型点云相关工作的展开创造了数据条件。
当然后续工作中还需要改进不足之处,一方面需要改善插值算法的迭代次数与迭代的判断条件,避免场景较大点云过多时插值的计算量太大;另一方面需要发掘更高效的曲面拟合方法,提升不同平面的面片经过曲面拟合后产生的三维曲面的精细度。