利用MATLAB实现DEM可视化方法研究 | [PDF全文] |
在人类社会发展的整个过程中,人们一直致力于三维空间的合理表达,并在不同的历史时期尝试了不同的方法[1]。例如,早期的地图上主要采用写景的方法表示地貌形态,后来才出现了等高线、分层设色、晕渲法等表现手段。20世纪80年代以后,随着计算机的发展与普及,人们广泛使用数字高程模型(digital elevation model, DEM)来表现地形特征,利用计算机图形图像的知识来表达现实世界[2],尤其是多媒体、网络、虚拟现实技术的高速发展以及数字地球的建设,为DEM的可视化研究提供了极为广阔的发展空间[3]。
DEM的可视化是根据DEM产生地球表面逼真的显示,并能实时模拟飞行员观察地面的动态情况。在计算机中实现DEM可视化最简单的方法是生成三维景观图,实现三维景观的过程依次为:三维线框透视图、模拟灰度景观图和真实景观图。模拟灰度图是DEM透视图经过隐藏线、面的消隐处理之后,再用明暗度公式计算和显示可见面的亮度的效果;而真实景观图是在透视图的基础上,对每一个像素赋予一个实地的真实灰度值,即把数字正射影像图(digital orthophoto map, DOM)叠加到透视图上得到的效果[4]。
MATLAB是由美国MathWorks公司推出的用于数值计算、图形处理、系统控制和程序语言的科学计算系统环境[5]。从1984年DOS版本的MATLAB 1.0到今天的MATLAB 8.0,该版本中包括信号处理、图像处理、通信、定点运算、小波分析、高阶谱分析、地理信息系统、数理统计、偏微分方程、样条、优化、系统辨识、控制系统、鲁棒控制、模型预测、模糊逻辑、非线性控制设计等18种工具箱,这些函数能用于各种学科的数学计算和处理[6]。
在数据处理上,DEM和DOM有一个共同的特点是它们都按行列顺序存放数据,与矩阵的形式十分相似,因此,利用MATLAB工程设计软件处理有其独特的优势[7, 8]。
1 利用MATLAB实现DEM的可视化 1.1 DEM的格式在测绘领域,通常所用的DEM格式包括BIL格式的栅格型二进制文件、JX-4A全数字摄影测量系统的DEM文件[9]、VirtuoZo摄影测量系统的DEM文件[10],以及国家标准交换NSTD格式的brd文件等。后面3种DEM文件是文本格式的,可以用写字板打开来了解其文件格式,这3种格式基本上是相似的,都包含一个文件头和DEM数据。文件头通常含有起始点位置、格网间距、行列值等信息。这里讨论JX-4A全数字摄影测量系统的DEM格式,并利用MATLAB来实现其三维效果。
文件中格网点高程值是实际高程值的一个倍数(高程放大因子),该因子一般为1 000,这意味着实际高程值精确到毫米级。图幅外的无效数据一般赋予非法值予以区别,在JX-4A系统中,非法值为-99 999。
DEM的数据存贮从左上角格网点起,采取由西向东、再由北向南的方式,形成m(行)×n(列)的二维矩阵存放其高程。这样,只要给出起始点的X、Y坐标以及行数m、列数n,便可很容易地得到任一点的X、Y、Z坐标。
1.2 数据输入MATLAB的文本输入函数是fscanf和sscanf, 在使用该命令前,首先使用fopen打开该文件。具体命令如下:
>>[fid, message]=fopen(‘d:\0a6.dem’, ’r’);
>>[A, count]=fscanf(fid, ’%d’, [ynum, xnum]);
第一条命令将DEM文件以只读方式打开,输出值fid是文件的句柄值,输出变量message中包含了打开文件操作结果的有关信息,可以缺省,如果该文件不存在,则句柄值fid返回为-1,message的值为字符串“No such file or directory”。第二条命令将fid指代文件的有关内容读入到xnum×ynum矩阵A中,“%d”表示数据按十进制数据进行转换。此时矩阵A中的内容就是该DEM的数据。
1.3 三维显示mesh和surf等命令可以进行DEM的三维表面的显示。mesh进行三维网格图形绘制,surf进行三维表面图形绘制。最简单的调用命令如下:
>>mesh(A);
>>surf(A);
利用mesh命令绘制出的效果如图 1所示。为了得到更好的效果和图形表现,可以调用MATLAB大量的图形绘制函数来实现,如使用shading设置渲染模式,colormap进行调色板设置,brighten进行图形亮度调整,diffuse进行漫反射处理,lighting进行光照模式设置等等,也可以对各种图形对象(包括坐标系对象、图形窗口对象、曲面对象、图像对象、文字对象、光源对象等)进行设置。另外,MATLAB的图形窗口figure提供一些简单的操作,如属性编辑、文件保存输出,根据鼠标进行图像的缩放、实时旋转等。
1.4 纹理叠加
在MATLAB中,使用warp函数可以将纹理图像叠加到DEM曲面上。在进行纹理叠加之前,应使用imread函数将正射影像读入至一个影像矩阵中,具体程序如下:
I=imread(‘D:\0a6.tif’);
Warp(I, A);
第一条命令将DOM影像文件0a6.tif读入到矩阵I中,imread命令支持的影像格式有BMP、HDF、JPG、PCX、TIF、XWD。第二条命令将影像矩阵所包含的纹理信息贴到DEM模型上。
1.5 等高线生成在测绘行业,等高线一直是非常重要的产品,也是传统纸质图上表现地形地貌的唯一通用而有效的表示方法。在数字测绘时代,DEM逐渐取代等高线的应用领域,但等高线还是纸质地形图最重要的地貌表现。从DEM内插等高线的算法是非常复杂的,但在MATLAB中这个过程变得极为简单,contour命令即能完成这种算法,具体命令如下:
contour(A, 20);
或[C, h]=contour(A, 20, LineSpec)
第一条命令是简单的调用函数,A是记录DEM数据的矩阵,20为生成等高线的条数,图 2就是利用该命令生成的等高线图。第二条函数较为复杂,C是函数返回的等高线矩阵,利用等高线矩阵C还可以进行等高线高程注记,h是返回的图形句柄,LineSpec定义绘制等高线的线型和颜色等属性。
在等高线应用中,还有其他几个应用函数,如contourf进行等高线填充绘制,contours进行三维等高线的生成,surfc进行带等高线的三维表面绘制,meshc进行带等高线的三维网格绘制,clabel进行等高线高程注记等。
1.6 影像显示与影像数据一样,DEM的数据大多通过栅格表示,因而用影像表示DEM也是实现其可视化的一种有效方法。影像显示的具体含义是根据DEM所表示的地形高程进行颜色赋值,一定的高程用一定的颜色值表示。由于在数字图像中,每一像元灰度值通常定义在0~1之间,为了合理地表示DEM影像,应该将表示的高程数据通过线性变换公式规划至0~1之间,也可利用非线性变换公式突出某一高程区域的细节。MATLAB使用image和imshow等函数来实现DEM的影像显示,函数中有一项参数指明所使用的颜色表,如hsv、hot、cool、gray、copper、bone、jet等,也可以自己定义颜色表矩阵。图 3是使用灰度色表gray显示的某一地区的DEM数据。
1.7 三维景观的动画显示
MATLAB提供动画功能,用户可通过存储一系列图片,然后将这一系列图片用movie函数播放出来。系列图片必须用getframe来制作,并可使用moviein来检测并生成存储系列图片的矩阵变量,并分配足够的内存空间。
2 结束语在测绘行业中,我们不但要进行大量的数据分析,还要进行大量的图形图像处理,如GPS数据的处理、地理信息系统的建设、遥感影像的信息提取、各种系统的数据和标准的统一等,MATLAB对此是一个十分优秀的软件。本文所采用的方法可快速、高效地实现DEM产品的可视化,为满足市场对数字化地图的需求开辟了一条快捷、有效的技术路径。
[1] | 李志林, 朱庆. 数字高程模型[M]. 2版. 武汉: 武汉大学出版社, 2000 |
[2] | 齐晓飞, 王光霞, 崔秀飞, 等. DEM误差可视化方法分析与研究[J]. 测绘科学, 2011, 36(3): 169–171 |
[3] | 朱长青, 王志伟, 刘海砚. 基于重构等高线的DEM精度评估模型[J]. 武汉大学学报·信息科学版, 2008, 33(2): 153–156 |
[4] |
常小林, 李明峰, 李熹微. 基于MATLAB的DEM数据处理研究[C]. 华东六省一市测绘学会学术交流会, 南京, 2011 |
[5] | 伯晓晨, 李涛, 刘路. MATLAB工具箱应用指南——信息工程篇[M]. 北京: 电子工业出版社, 2000 |
[6] | 赵书兰. MATLAB建模与仿真[M]. 北京: 清华大学出版社, 2013 |
[7] | 张祖勋, 张永军. 利用国产卫星影像构建我国地理空间信息[J]. 测绘信息与工程, 2012, 37(5): 7–9 |
[8] | 张春, 刘晓峰. MATLAB在测绘工作中的应用[J]. 华北国土资源, 2011, (1): 61–62 |
[9] | 刘小明, 李悦丽, 郭福生, 等. 基于全数字摄影测量系统的数字正射影像图的制作[J]. 测绘科学, 2010, 35(s1): 198–199 |
[10] | 郭微. 基于VirtuoZo的正射影像图制作与精度控制研究[J]. 测绘与空间地理信息, 2014, 37(12): 196–197 DOI: 10.3969/j.issn.1672-5867.2014.12.064 |