-1-
中国科技论文在线
基于 VC++的 DEM 图像显示及其基本变换技术的实现
杨红 1,王智 2
1河海大学水利水电学院,南京(210098)
2四川广元测绘有限公司,四川广元 (628000)
摘 要:本文分析了ArcGIS/ArcView的DEM栅格图像的数据存储格式,在此基础上以Visual
C++ 为平台,实现对 DEM图像的显示及基本图像操作功能,如放大缩小、漫游、全图。
而且还实现了 DEM栅格图像的基本变换,如几何变换(旋转,镜像,转置,缩放)、图像邻域
处理(如中值滤波)等。
关键词:VC;DEM;显示;变换
中图分类号:TP302
1 引言
数字地形模拟是针对地形地貌的一种数字建模过程,这种建模的结果通常就是一个数字
高程模型,即 DEM。自从上世纪 50 年代后期开始被采用以来,DEM 受到了极大的关注,
并在测绘、土木工程、地质、矿山工程、农业、规划、军事工程、飞行器与战场仿真等领域
得到了广泛的应用。近年来,由于地理信息系统的普及,在美国、中国、英国和其它国家,
DEM 作为数字地形模拟的重要成果已经成为国家空间数据基础设施的基本内容之一,并已
经进行规模化生产[1,10]。数字高程模型(DEM),是一种对空间起伏变化的连续表示方法。由
于 DTM(数字地形模型)隐含有地形景观的意思,所以,常用 DEM,以单纯表示高程。尽
管 DEM 是为了模拟地面起伏而开始发展起来的,但也可以用于模拟其它二维表面的连续高
度变化,如气温、降水量等。对于一些不具有三维空间连续分布特征的地理现象,如人口密
度等,从宏观上讲,也可以用 DEM 来表示、分析和计算[2]。
DEM 还有许多用途,例如:在民用和军用的工程项目(如道路设计)中计算挖填土石方
量;为军事目的显示地形景观;进行越野通视情况分析;道路设计的路线选择、地址选择;
不同地形的比较和统计分析;计算坡度和坡向,绘制坡度图等;用于地貌分析,计算浸蚀和
径流等;当用其它特征(如气温等)代替高程后,还可进行人口、地下水位等的分析[3,15]。
2 研究现状
目前,许多 GIS 软件均包含有对 DEM 数据的较详细全面的处理功能。在各种 GIS 的二
次开发软件中,以 MapObjects 系列和 ArcGIS 系列的居多。以 MapObjects 和 ArcGIS 为基础
来进行二次开发应用时,有一个很明显的好处就是:能快速上手,开发速度快,应用方便。
常用的方法之一就是在 Visual Basic 环境中直接调用 GIS 软件的各种 Active 控件,并配合
VB 代码开发出基于 VB 和 GIS 控件的二次开发产品。但是,随之而来出现的问题是,以这
种方式进行二次开发所得到的成果,在应用上受到原 MapObjects 或 ArcGIS 系列软件的较大
限制:1、没有相应的版权支持――用上面方法得到的二次开发产品,版权实际上属于已有
的 GIS 软件,应用起来容易出现侵犯知识产权的情况;2、应用成本较高――目前来说购买
GIS 软件的费用还比较昂贵,这将直接导致工程应用中成本的提高。因此,对于大型的工程
项目来说,采用上面的方法,可以用最快的速度进行开发应用,充分利用其功能齐全源代码
丰富的优势开始项目;而对于许多中小型的工程项目来说,则可以使用 Visual C++代码来实
现相应的功能。
-2-
中国科技论文在线
3 系统设计方案
软件建设目标
使用 VC++技术来实现像 ArcGIS 这类 GIS 软件的各项功能,对于中小企业来说是一个
很不错的选择。本系统的实现目标就是以 Visual C++ 为平台,实现对 DEM 图像显示并
进行基本变换的功能,如基本的放大、缩小、漫游;基本变换,如几何变换(旋转,镜像,转
置);图像的邻域处理,如中值滤波等。
系统总体设计
DEM 数据要能由一些高程值转变成图像并显示,必须将这些 DEM 数据值读入到程序
中,然后通过绘图程序来生成相应的图片,最后才能进行一些基本变换处理。所以,本系统
主要分为三个部分,它们之间的关系如图 1:
图 1 系统总体结构图
of the system
本系统的主要数据流程图为图 2:
系统详细设计
DEM 数据的基本格式
DEM 数据的格式一般如图 3:
DEM 数据读取 DEM 图像基本变换处理 DEM 绘图显示
图 2 系统主要数据流程图
DFD map of the system
-3-
中国科技论文在线
图 3 DEM 数据的内容
of DEM data
ncols,nrows 分别表示该组 DEM 数据中代表像元的行数和列数。Xllcenter,yllcenter
分别表示图像左下方的地理坐标。cellsize 表示该 DEM 源数据中像元的分辨率大小。
nodata_value 所对应的数值表示的是 DEM 图像中的空值。余下的许多数字,除 nodata_value
值以外,均为高程值,表示了该数据所代表地区的高程分布情况[4, 11]。
DEM 图像的显示及基本图像操作功能的实现
DEM 数据的读取
DEM 数据的读入采用了 VC/C++语言中的文件操作函数,特别是其中的 fopen、fscanf、
fgets 等来实现读取功能:fp = fopen(文件地址,"打开方式");fscanf(fp1,"格式控制",fp2);
fgets(fp2,读取的字符数,fp1)。
在读取 DEM 数据时,同时进行了存储操作,将头文件中的变量值存入程序中相应的专
用变量中,将 DEM 数据中的高程值存入临时的二维数组中以供整个程序的使用。
DEM 图像的显示
DEM 图像显示的原理是在绘图区域中为每一个 DEM 数据值分配一个像元亮度值以及
颜色。在绘图过程中,主要运用到了 VC++中的 CDC 对象,CBitmap 对象以及视图类中的
onpaint 函数[5]。
将读取的 DEM 数据值转换为 DEM 图像,其程序流程图如图 4:
图 4 DEM 图像显示流程
image display
-4-
中国科技论文在线
DEM 数据被程序读取后,系统将为每个 DEM 高程值分配像元亮度值,以及颜色,并
将结果存入到数组中,供后续的绘图代码调用。系统在成功初始化绘图对象之后,直接从这
个特别的数组中读取已经分配好的像元亮度值开始绘图。
DEM 图像的缩放
DEM 图像的放大缩小主要是通过 VC++中的“重画”功能来实现的。
假设图像 X 轴方向缩放比率是 kx,Y 轴方向缩放比率是 ky,那么原图中点(x0,y0)对
应新图中的点(x1,y1)为:x1=x0*kx;y1=y0*ky。当 kx>1 且 ky>1 时,原图像被放大。由于
放大图像时产生了新的像素,可通过插值算法来近似处理。当 kx=ky=2 时,图像放大两倍,
原图中某一个像素,对应新图中的 4 个像素;当 kx<1 且 ky<1 时,原图将被缩小。例如,
当 kx=ky= 时,图像被缩到一半大小,原图中 4 个像素对应新图中一个像素。此时缩小后
的图像中的(0,0)像素对应于原图中(0,0)(0,1)(1,0)(1,1)像素,依此类推。在
原图基础上,每行隔一个像素取一点,每隔一行进行操作[6]。
DEM 图像的漫游
漫游,是指图像的不同部分连续地显示在屏幕上同一位置,即不断地取出图像数据,取
数位置每次只做微小的改变。当两次显示间隔很短时就产生了动感,好像图像在运动。DEM
图像的漫游主要是通过改变图像显示区域的原点来实现的。程序通过对鼠标拖动距离的感
知,实时移动“原点”,就达到了图像“漫游”的效果[7,13]。DEM 图像的漫游,主要实现
过程如图 5:
图 5 DEM 图像漫游的实现
fig 5. Implementation of DEM image ramble
DEM 图象全图显示
全图显示是许多图像处理软件的一个基本功能,同时也是 GIS 软件一个很重要的功能,
如在 ArcGIS 中全图显示功能可以将已经过多级缩放后的图片重新以一个整体在视窗中显示
出来,非常方便地进行各种操作。
“全图显示”操作的主要实现方法是:计算图像中所有图形元素的边界矩形,得到该整
幅图像的实际范围,然后调整屏幕左下角的实际坐标和图像的显示 比例,使图像中所有的
图形元素都可以显示到视图屏幕的范围内[6]。
该功能的实现过程大概如图 6:
图 6 DEM 图像全图显示的实现流程
fig6. Implementation of DEM image show-all
DEM 数据读取 DEM 绘图显示 改变原点位置 DEM 绘图显示
得到所有图形元素的边界矩形 调整视图屏幕中的基点和比例
“全屏重画”
-5-
中国科技论文在线
DEM 图象的基本变换
几何变换(旋转,镜像,转置)
根据输入图像坐标系与输出图像坐标系之间的对应关系改变图像上各个像素的位置的
变换称为几何变换。图像的几何变换经常应用于校正由于成像系统的误差或摄像位置不正而
造成的几何失真,也常用于产生某种预定的视觉效果。图像几何变换的实质是从原始图像中
取得数据构成一幅新的图像。由于图像的离散性,计算出的坐标值不一定是整数,一般需要
重新进行采样。有多种重新采样的方法,最为常用的是最近邻点法和双线性内插法。
图像的旋转是指以图像的中心为原点,旋转一定的角度。旋转后,图像的大小一般会改
变。同时,它既可以把转出显示区域的图像截出去,也可以扩大图像范围以显示所有的图像。
图像的镜像变换分为两种:一种是水平镜像,另一种是垂直镜像。图像的水平镜像操作
是以原图像的垂直中轴线为中心,将图像分为左右两部分进行对称变换;图像的垂直镜像操
作是以原图像的水平中轴线为中心,将图像分为上下两部分进行对称变换。镜像变换后图的
高和宽都不变。
图像的转置操作(transpose)是将图像像素的 X 坐标和 Y 坐标互换。该操作将改变图像的
宽度和高度,转置后图像的宽度和高度将互换。
图像的几何变换通常采用转换矩阵来实现[7]。具体实现一般分为三个步骤:(1)取得
原图像的数据区指针;(2)开辟一个同样大小的缓冲区;(3)每个像素依次循环[4,16]。
图像邻域处理(如中值滤波)
中值滤波是一种非线性信号处理,通过从图像中的某个采样窗口取出奇数个数据进行排
序,以窗口的中值作为处理的结果。这种算法对于消除脉冲干扰和孤立噪声,同时克服图像
细节的模糊特别有效。它在一定的条件下,可以克服线性滤波器所带来的图像细节模糊,而
且对滤波脉冲干扰及图像扫描噪声最为有效。特别适合用在有很强的胡椒粉式或脉冲式的干
扰时。因为这些干扰值与其邻近的某些像素灰度值有很大差异,因此经排序后取中值的结果
是强迫将此干扰变成与其邻近的某些像素的灰度值一样,达到去除干扰的效果。只是,对于
一些细节多,特别是点、线、尖顶细节多的图像不宜采用中值滤波[16]。
实现中值滤波程序算法流程图如图 7:
图 7 DEM 图像中值滤波操作实现流程
Fig7. Implementation of DEM image Median Filtering
-6-
中国科技论文在线
系统实现的方法及步骤
(1).在 Visual C++ 集成环境中,新建一个工程,工程类型选择为“MFC
AppWizard(.exe)” ;输入工程名后,进入一系列对话框选择设置该工程的各种属性。其中,
在选择“文档类型”对话框时,可以任意选择“单文档”、“多文档”以及“基于对话框文
档”,这里选择“单文档”类型。其它的设置选项可以完全按照 VC++ 的默认设置,直
接点击“完成”。
(2).本系统主要分为 DEM 数据读取部分,DEM 绘图显示部分,DEM 图像的基本变换
处理部分。在 VC++集成环境中做好窗体,然后将源代码粘贴到对应的窗体代码区中。
4 软件运行结果
DEM 图像显示与转换
图 8 显示的是酉水街流域的一部分 DEM 图像。图 9 显示的是经过顺时针旋转 90 度以
后的 DEM 图像,
DEM 图像的转置
图 10,显示的是一张经过转置处理后的 DEM 图像:
图 10 转置处理后的酉水街流域 DEM 图像
Fig10. DEM image transposed in You Shuijie valley
图 9 顺时针旋转 90 度后的 DEM 图像
Fig9. Deasil 90-degree- circumrotated
DEM image
图 8 酉水街流域 DEM 图像
image in You Shuijie valley
-7-
中国科技论文在线
DEM 图像的镜像处理
图 11 显示的是经过垂直镜像处理以后的 DEM 图像,图 12 显示的是经过水平镜像处理
以后的 DEM 图像。
DEM 图像的中值滤波处理
图 13 是一幅含有椒盐噪声的 DEM 图像,图 14 是对图 13 经过中值滤波处理后的结果
图。
图 13 含有椒盐噪声的 DEM 图像 图 14 中值滤波处理后的 DEM 图像
fig13. DEM image include pepper yawp fig14. DEM image which is Median Filtered
5 结论与展望
本系统已经实现的功能有:对 DEM 图像进行显示、放大缩小以及漫游功能;对 DEM
图像的几何变换处理功能,如旋转、转置、镜像功能;最后,还实现了图像邻域处理功能之
一――中值滤波。
能够以 VC++技术来实现的功能还有很多,比如 DEM 图像的锐化、平滑处理以及傅里
图 11 垂直镜像处理后的 DEM 图像
fig11. Perpendicularly mirrored
DEM image
图 12 水平镜像处理后的 DEM 图像
Fig12. DEM image which is levelly mirrored
-8-
中国科技论文在线
叶变换、阈值变换、高通滤波、低通滤波等。
参考文献
[1] 李志林,朱庆.数字高程模型[M]. 武汉,武汉测绘科技大学出版社,2000,p:5~10.
[2] 虞继进. 数字高程模型(DEM)的建立与应用[J]. 江苏测绘,1999,22(3):33~40.
[3] 马振刚,李黎黎. 基于 GIS 和 DEM 的洋河流域水文特征提取方法研究[J].河北北方学院学报:自然科学
版,2008,24(1):36~45.
[4] 张丽梅. DEM 数据压缩方法研究[D]. 北京,北京师范大学,2005.
[5] 徐晓梅,高丽. Visual C ++程序设计[M].北京,科学出版社,2003,p:55~90.
[6] 杨淑莹,边奠英. VC++图像处理程序设计[M].北京,清华大学出版社,2003,p:39~46.
[7] 陆宗骐. C/C++图像处理编程[M].北京,清华大学出版社,2005,p:74~90;p:110~115.
[8] 陈建春.Visual C++开发 GIS 系统―开发实例剖析[M].北京,电子工业出版社,2000,p171~180.
[9] 向世明.Visual C++数字图像与图形处理[M].北京,电子工业出版社,2002,p:151~200;p:279~308.
[10] 周云轩,王磊. 基于 DEM 的 GIS 地形分析的实现方法研究[J]. 计算机应用研究,2002,(l2):50~52.
[11] 张瑞军,杨武年等.数字高程模型(DEM)的构建及其应用[J].工程勘察,2005,5:61~64.
[12] Brivio P A, Marini D. A fractal method for digital elevation model construction and its application to a
mountain region. Computer Graphics forum, 1993,12(5):297~309.
[13] 郎锐. 数字图像处理学---Visual C++实现 [M].北京,希望电子出版社,2002,p:46~126.
[14] 刘鎏,齐舒工作室.Visual C++ 用户界面制作技术与应用实例[M].北京,中国水利水电出版社,1999,
p:179~228.
[15] Chang,K,Tsai, effect of DEM resolution on slope and aspect mapping[J].Cartography and Geographic
,18:69~77.
[16] 高守传,姚领田. VISUAL C++实践与提高――数字图像处理与工程应用篇[M].北京,中国铁道出版社,
2006,p:67-80;p:145~170.
Implementation of DEM Image Displaying and its Basic
Transformation Based on VC++ Language
Yang Hong1,Wang Zhi2
1College of Water Conservancy and Hydropower Engineering,
Hohai University ,Nanjing (210098)
2 Sichuan Guangyuan mapping Ltd, Sichuan Guangyuan (628000)
Abstract
The data storage structure of the DEM in the ArcGIS/ArcView format was analyzed. Based on Visual
C++ ,the article shows how to realize DEM images displaying and its basic transformation in the
integration environment of Visual C++ . Some common functions of DEM images operation were
also implemented,such as Display,Zoom in,Zoom out,Ramble,Show-all;as well as some basic
transformation: geometry transformation (cir-cumrotation,mirror,zoom, transpose);neighborhood
transformation( Median Filtering).
Key words:VC;DEM;Displaying;Transformation