人工林地形与树木融合的高效建模

2019-10-31 03:39崔沿沾陈宇拓郭怡旭
中南林业科技大学学报 2019年11期
关键词:插值高斯高程

崔沿沾,陈宇拓,郭怡旭

(中南林业科技大学 计算机与信息工程学院,湖南 长沙 410004)

地形的三维绘建模,是基于地理采样点坐标和高程数据,并结合计算机图形学技术对地形进行三维模拟。80年代前,对地形建模的研究主要集中在插值方法、采样方法以及在工程应用方面,并提出了一些实用的算法,如最小二乘内插法和有限元内插法等[1]。90年代后,随着GIS(地理信息)技术的发展,开始将这些方法广泛应用于地形建模,如利用等高线生成DEM(数字高程模型)[2]。基于大量的理论研究和实践基础[3],岳天祥提出了一种高精度的曲面模型建模方法,并使用真实地形数据对该方法进行验证,该方法与传统的数字高程模型插值算法相比,插值后得到的地形高程值的精度有了较大程度的提高。王家耀[4]提出了一种搜索圆和搜索正方形的方法,该方法通过改变插值算法中对插值点周围已知高程采样点的搜索顺序,来对周围有效数据点进行搜索,极大地提高了插值算法效率。汤国安[5]同样把关注点放在了插值中的搜索过程,其方法考虑了已知高程点对待插值点的方向修正因子,提高了数字高程模型的插值精度。

近30年来国内外的学者提出地形的各种建模方法层出不穷,其理论亦日趋成熟。随着近年来计算机与网络对数据的处理和运算能力大幅提高,为构建和实时呈现大规模地形与场景模型带来契机和需求,如大规模林地场景的综合建模和动态模拟,需要处理的数据量巨大,模型数据结构复杂,因此寻求优化和相适应的建模算法,提高建模效率是必须解决的瓶颈问题。近年兴起的树木生长和森林场景建模研究[6-9],做了大量积极有益的理论探索,取得一批成果,但普遍存在建模效率低、真实感不强和动态效果难以模拟等瓶颈问题,与实际应用还有一段距离。利用Unity3D 三维引擎软件及其二次开发技术,将林地地形与树木、草地等植被模型数据有机融合,实现灵活的智能化、参数化设计,是实现大规模林地场景综合建模,突破这一瓶颈问题的有效途径。

从研究实例对象出发,对大规模林地地形与场景融合的高效建模方法进行研究。研究对象为湖南省衡东县四方山林场一、二工区,林场最高点艳阳峰海拔698 m,最低处海拔60 m,属中低山丘陵地貌,工区位于林场中西部,113°02′~113°04′E,26°57′~26°59′N,区 域面 积 约为2 000 m×2 900 m,境内植被主要为人工竹林(楠竹),分布有少量的杉树和楠木等,图1所示蓝色椭圆圈内的红色轮廓线区域为一、二工区。

图1 衡东县四方山林场林相图Fig.1 Stock map of Sifangshan forest farm in Hengdong county

1 林地数据处理与建模

地形建模的基本理论已经相当成熟,但是由于地表地貌的复杂性和不确定性,以及对于高效、精准、真实感和大规模等建模要求不断提高,使得该项的研究不断地发展,也成为该领域的研究热点。地形建模的研究主要是围绕两个方面展开:一是如何提高建模算法的效率,这是通过建模所选取的曲面函数模型来确定;二是如何改进地形模型的逼真度与精确度,这点通过对模型和精度的参数调整来确定。

1.1 林地地形数据准备

在三维地形建模的过程中,常用数据源为等高线或离散高程点。由于获取到的地形数据通常是大范围的,数据分布离散且不规则,不能保证建模所需要的精度;而增加测量所得的数据量,又会加大人力财力的消耗,且会对计算机硬件提出更高的要求。因此,需要在这些离散数据的基础上通过插值算法,来计算样本点以外其他未知点的高程值。

建模所使用的数据来源于四方山林场提供的林相图(图1),以及与之相匹配的等高线地形图,根据一、二工区地形图中的经纬度与其对应等高线地形图进行地理配准,使工区等高线与该区域实际的空间位置信息相匹配,然后通过ArcGIS 或AutoCAD 软件对该区域等高线进行矢量化并赋予其高程值,图2(a)和(b)分别为等高线矢量化后并等距离获取离散点坐标位置的工区全图和细节图(离散点包含高程值)。根据工区面积构建一个2 000×2 900 网格,每个网格单位为1 m,等高线矢量化后离散的精度设为5 m,等高线之间的高度差为25 m,这3 个参数可根据建模精度的需要灵活配合设置,按给定的参数得到该工区总共7 865个DEM 数据。

1.2 林地地形建模算法

针对大规模人工林具有地形复杂、数据量巨大这一特性,基于规则格网模型研究全新建模算法,替代双线性、三次曲线曲面插值等传统建模方法,目的在于实现林地的灵活高效快捷建模,并能较精准地呈现地貌结构特征效果。建模的算法过程如下:

1.2.1 离散点区域高程值覆盖与补孔

对等高线矢量化后等间距离散点的X、Y 坐标取整数,使离散点落在规则格网点上,高程值不变,对所有的离散点做以下处理:以离散点为中心,向四周扩展取n×n 区域(n 为奇数,大小约为离散点间距的2 倍),用离散点的高程值覆盖该区域内各点的高程值。覆盖原则:如果该区域内的点已经有高程值存在(处理前面离散点驻留的高程值),则用大的高程值替代小的高程值。图3(a) 为对图2(a)离散点区域高程值覆盖结果,覆盖区域大小设为9×9。

图2 等高线矢量化等间距离散点图像Fig.2 Equally spaced discrete points of contour line vectorization

从图3(a)明显看得出,离散点区域高程值覆盖处理后,工区内还存在许多没有被对高程值覆盖的孔域,为此需要对这些孔域进行高程值补孔处理。

补孔算法思路如下所述:

1)对图3(a)工区高程值数据矩阵进行纵横两个方向向中间扫描;

2)对满足前一个点高程值不小于最小高程值,而当前点高程值小于最小高程值,则将当前点高程值用8 邻域的最大高程值替代。

图3 离散点区域高程值替代与补孔Fig.3 Elevation value substitution and hole filling in discrete point area

通过高程值补孔后得到的DEM 数字高程模型平面图见图3(b)(白色区域所有的点具有各自的高程值),由该结果生成的网格模型效果见图4(a),为使网格模型可分辨,图4模型的纵横网格点数量相对图2各缩小了4 倍。该网格模型的构建只需采用邻域高程值覆盖替代和扫描补孔完成,比较文献[2]等生成DEM 方法,大幅减少了建模过程的复杂度和网格点方位搜索与插值的计算量。

1.2.2 基于二次高斯模板的模型平滑处理

采用公式(1)的二次高斯函数构建高斯模板。

图4 建模过程与模型效果Fig.4 Modeling process and model effects

式(1)中,(i,j)表示二次高斯函数表面的点的集合,μ1、μ2、σ1、σ2和ρ都为常数。μ1和μ2表示两个期望值,决定了函数所在的位置。σ1和σ2表示两个方差值,决定了函数分布的幅度:方差值越小,数据分布越集中在期望值相同的情况下凸起的形状越陡峭;方差值越大,数据分布越分散,在期望值相同的情况下凸起的形状越平缓[10]。ρ表示相关系数。由此可知,二次高斯函数形状的确定主要取决于σ1和σ2这两个参数的数值。给定点(i,j)的值,通过设定函数覆盖的范围以及μ1、μ2、σ1、σ2和ρ等参数的值,可以获得以(i,j)为中心,覆盖范围内其他点的数值。赋予公式中的参数不同的值,可以改变图形凸起的平缓程度和凸起最高点的位置。图5(a) 为该二次高斯函数选取一组参数生成的图形曲面,将曲面所有点的纵轴值进行量化,各点的值为原有的值与中心点值的比值,中心点数值为1,从而得到二次高斯函数模板,如图5(b)所示为生成的一个11×11 大小的高斯模板也称高斯算子。从图5可以看出,该二次高斯函数改变参数可得到不完全对称的模板,通过不对称高斯模板和对模板四个方位的角度旋转变换或镜像变换,可以灵活适应林地地形各种变化的平滑建模处理。为讨论方便,下面介绍直接用图5(b)这个基本对称的高斯模板,来实现对图4(a) 网格模型可进行高斯平滑处理的算法过程:

图5 二维高斯函数图形及模板Fig.5 Graphics and templates of quadratic Gaussian function

对图4(a) 的DEM 数据矩阵按照从左至右、从上至下的顺序进行扫描,有高程数据的网格点对应图5(b)模板中心,将模板覆盖区域的高程值乘以一一对应的模板值,求出加权平均值替换扫当前描处理点的高程值,直到扫描处理完成DEM所有网格点和高程值,得到的新的DEM 数据矩阵所生成的模型效果见图4(b)。

通过式(1)构建高斯模板的大小和形态结构是灵活的,本研究针对南方丘陵地区的地貌特征,构建了起伏较平缓的二次高斯经验模板,对一个地形模型只需构建一个模板,平滑处理过程通过模板与模型高程数据的简单算术计算来完成。为更精准地对网格模型数据平滑处理,由式(1)可构建如图6所示具有坡度倾向的高斯模板,根据模板覆盖区域的高程值分布形态,对模板进行四个方向的旋转和两个轴向的镜像变换,这样可从8种模板形态选择一个最合适的模板来进行平滑处理。模板选择的算法是:将模板覆盖区域的高程值量化最大值为1,计算模板四分之一最大值平均值区域和对角区域与相对应覆盖区域的量化高程值均方差,均方差值最小的为选择的模板。当然变换模板的平滑处理算法,提高了建模的精度,但增加了时间成本。大量实验结果表明,经单一高斯模板平滑滤波处理后的模型,在保留模型数据整体特征的基础上,不会造成平滑后的模型太大的误差和失真,构建的地形模型是光滑连续的,能够满足大规模林地地形实际建模效果的需求。在不注重建模效率,而要进一步提升建模精度时,可以考虑选择变换模板的模型平滑处理方法。

图6 式(1)选取不同参数生成的图形Fig.6 The graph is obtained by formula (1) selecting different parameters

1.2.3 建模算法效果分析比较

规则格网模型的建模,常用的算法有反距离加权、线性内插、双线性内插、样条函数内插和移动曲面拟合等算法。图7为本方法与双线性内插法和三次样条函数内插法,对图5(b) 中方框区域构建模型的局部细节效果比较。这些建模方法是由离散型值点插值生成规则格网模型,需要进行复杂的空间插值运算和求解二次或三次联立方程,如利用三次样条函数插值,其本质是基于离散型值点生成由控制点控制的曲面片模型,并通过拼接达到模型表面的光滑。而本方法通过区域高程值覆盖与补孔,得到基础网格模型后,经高斯模板平滑处理一次性得到光滑连续的大规模林地模型,大大降低建模复杂度和提高建模效率。从图7中本方法与双线性插值和三次样条插值的建模效果仔细比较观察,本方法的模型表面呈现更加光滑、连续和自然,既避免了图7(a)中小山包顶部和谷底的平台不自然现象,也消除了图7(b)中的奇异值现象(左下角),很明显本方法整体建模效果优于双线性插值建模效果,但局部建模细节没有三次样条插值模型丰富,这是由于本方法经高斯模板平滑处理后,模型呈现光滑连续形态,但本方法在实现大规模林地高效率建模的前提下,能够较好的满足体现林地模型的基本结果形态结果的需要。本方法与文献[11]将大范围场景划分成小的子块建模方法比较,可在普通PC 机器上实现2 000×2 900 网格点范围顺畅整体建模,而无需分块和拼接。本方法尤其适合基于有限的地形高程点数据,高效地构建符合南方人工林丘陵地貌特征效果理想的大规模模型。

图7 不同算法建模细节效果比较分析Fig.7 Comparison of modeling details of different algorithms

2 人工林林分场景建模

近年兴起的树木生长和林分场景建模,不少研究者做了相关基础研究,但如何实现大规模林地场景的真实感建模和动态可视化模拟及实际应用,一致成为困扰研究者的瓶颈问题。我们利用Unity3D 三维引擎软件及其二次开发技术,将林地地形和树木等植被模型有机融合,实现灵活的参数化设计,是实现大规模林地场景综合建模,提升整体建模效率和效果,突破这一瓶颈问题的有效途径。Unity3D 具有操作简便、功能丰富、各种效果处理组件、跨平台支持、兼容好等特点,尤其适合于大规模三维模型的创建、真实感图形渲染和动态模拟,为目前功能最强的主流三维开发工具之一。

2.1 地形与树木模型导入

2.1.1 地形模型的导入

在Unity3D 中,地形是由Unity3D 中 的Terrain 组件来创建的。Terrain 包含一些属性设置按钮,可以选择升高、降低、平滑等按钮,通过地形刷直接改变地形的高低起伏状况。使用这种方法可以方便、快速地创建一块仿真地形,对于游戏、动画等需要虚拟地形的场景来说是一个便捷高效的方法。但是这种刷出来的地形高度、起伏状况是随机的,且无法准确赋予确定的位置坐标和高程值,对于需要根据真实地形数据来生成地形模型没有帮助。因此需要通过编写Terrain 的脚本读取外部模型数据文件来生成真实地形。

Unity3D 支持读取txt、Xml 和json 等文本格式的外部文件。将前面构建的DEM 生成txt 格式的地形模型数据txt 文本文件,通过编写Terrain的脚本程序,将txt 地形数据赋值给Terrain,在Unity3D 中生成由真实数据模拟的地形模型。具体过程是:首先在脚本中用Resources.Load()方法获取存放地形模型数据的txt 文件,该文件中保存的地形数据,用高程数据所在的行列值分别代表该点的X 坐标值和Y 坐标值。然后将地形高程数据逐行存放到一个二维数组中,二维数组的行列值同样代表着数据点的X 值和Y 值,最后将二维数组中元素的值赋给Terrain 中的地形点,通过编写的Terrain C#脚本代码对txt 文件调用生成的地形模型,如图8所示。

图8 Unity3D 中生成的地形模型Fig.8 Terrain model generated in Unity 3D

2.1.2 树木模型的导入

树木的三维模型的导入源于前期自主研发的树木建模系统[12],图9和图10分别是用该系统构建的竹木和杉木模型。该系统创建的树木模型可以.x 文件格式导出。.x 文件是微软为DirectX3D开发提供的一种3D 交互模型文件格式,包含模型的结构、材质、纹理等信息[13],它还包含一个齐次变换矩阵,通过改变矩阵中的参数,能够控制模型的比例、旋转、位移和倾斜等变换;它同时支持自定义模板结构,可以存储自定义的任何一种数据。.x 文件不能直接被Unity3D 读取,需要进行模型的格式转换,通过Unity3D 的Deep Exploration 模型转换工具,将.x 文件转换为能够直接被Unity3D 读取的fbx 格式,这种格式是一款可跨平台的3D 文件交换格式[14]。

图9 竹木模型Fig.9 Bamboo model

需要注意的是,树木建模系统生成的.x 格式的模型采用的是右手坐标系,在场景显示中z 轴向上,而Unity3D 空间中使用的是左手坐标系,在场景显示中y 轴向上。因此,在进行树木模型转换的时候,需要将树木模型的坐标系进行变换,使之与Unity3D 空间中的坐标系保持一致。将转换后的树木模型保存到Unity3D 的Assets 文件夹下,打开Unity3D 场景,找到Assets 中的树木模型拖入场景中的地形模型上,可以看到地面上“长”出的树木,如图11所示。由于生成的树木模型原始的大小与Unity3D 中所显示的地形大小不匹配,需要对树木模型进行设置。点击Hierarchy 面板中刚拖入的树木模型,可以分别在Inspector 面板的Position、rotation、scale 和其他属性设置中调整其位置、旋转、大小和其他属性信息。在属性设置中按照实际树木与地形的比例对树木模型进行调整。

图10 杉木模型Fig.10 Chinese fir model

图11 Unity3D 中导入的竹木模型Fig.11 Bamboo model imported in Unity 3D

2.2 人工林场景融合生成

一个林分中可能存在成千上万树木,人工把树木模型一株一株拖入场景中生成林分是不现实的,会消耗大量的精力和时间。Unity3D 中自带了批量生成树木模型的功能,可以将该树木模型创建为prefab 资源,并添加到生成树木模型库当中,然后从模型库选择模型,利用Terrain 的地形刷功能将树木模型大批量种植到地形上。但这种构建林分的方式,仍需人工频繁参与,构建林分的灵活性、真实度及自然变化规律受到限制和得不到具体体现。

为提高建模效率和智能化建模程度,我们构建同一树种不同年份特征的几个基础模型的.x 文件,由Unity3D Editor 编辑器创建扩展脚本代码,实现模型批量导入、批量导入设置和批量创建对应的预制体。脚本依据林分样地属性和结构文件参数读取树木的坐标位置、类型、胸径和年龄等,将对应树木基础模型插入林地表面指定位置的同时,控制树木基础模型受约束的随机的几何变换,得到不同比例、方位角度和倾斜角度的树木模型,以免生成的林分模型视觉上过于单一化,使林分建模效果更接近真实林分。脚本根据林分结构循环插入树木,直到插入完成林分中所有树木生产整体林分后结束。脚本在构建林分模型过程中,还可以对Terrain 的Color Variation、Height Variation 和Width Variation 属性值进行改变,分别设置树木模型之间颜色、高度和宽度上允许存在的差异值,以调整批量生成的树木模型的不同形态。图12为Terrain C# 脚本代码自动生成的人工林三维场景模型,图13为局部模型。

图12 人工林三维场景模型Fig.12 Three-dimensional scene of plantation

图13 人工林三维场景局部模型 Fig.13 Three-dimensional scene of partial plantation

人工林场景构建后,利用Unity3D 对大规模三维模型的强大后期处理能力,结合大规模人工林渲染技术[15]、LOD(层次细节化)模型技术,阴影模拟和碰撞检测技术等,从而可实现对人工林景观的高效、真实动态可视化模拟,以及扮演林间角色自由行走清晰查看林场和树木的细节和形态。图14所示呈现了制作的人工林漫游视频其中2 个中间帧的局部视角细节效果。

图14 人工竹林三维场景漫游其中2 帧的效果Fig.14 Effect of 2 frames in 3D scene roaming of man-made forest

3 结论与讨论

本研究采用单一高斯模板平滑滤波处理后的林地模型,在保留模型数据整体特征的基础上,不造成平滑后的模型太大的误差与失真,能够满足大规模林地地形实际建模效果的需求。为提高建模精度,本研究还讨论了变换模板的模型平滑处理方法。本研究提出的大规模林地建模算法,优于双线性插值和接近三次样条插值的建模效果,且构建的模型表面呈现更加光滑、连续和自然。本研究利用Unity3D 三维引擎软件及其二次开发技术,将林地地形和树木等植被模型有机融合,实现灵活的参数化智能建模,在大幅度降低算法过程复杂的同时,有效提高了林地与树木的综合建模效率。对于大规模或超大规模林地与树木植被的自适应高效建模和模型优化,以及提升整体建模的智能化程度和真实感模型场景的动态模拟有待进一步的研究。

猜你喜欢
插值高斯高程
滑动式Lagrange与Chebyshev插值方法对BDS精密星历内插及其精度分析
场景高程对任意构型双基SAR成像的影响
海南省北门江中下游流域面积高程积分的应用
8848.86m珠峰新高程
数学王子高斯
天才数学家——高斯
基于pade逼近的重心有理混合插值新方法
基于二次曲面函数的高程拟合研究
混合重叠网格插值方法的改进及应用
从自卑到自信 瑞恩·高斯林