?? ?? ??IDL?ENVI???????????????????????? by 8TUgK1

VIEWS: 21 PAGES: 74

									分类号                          密级

UDC                          编号




       中国科学院研究生院

             硕士学位论文


基于 IDL 和 ENVI 二次开发技术的遥感软件系统
         开发方法与开发实例研究


                    汤泉



指导教师   牛   铮   研究员       中国科学院遥感应用研究所

申请学位级别 理学 硕士 学科专业名称 地图学与地理信息系统

论文提交日期     2008 年 5 月   论文答辩日期    2008 年 6 月

培养单位            中国科学院遥感应用研究所

学位授予单位             中国科学院研究生院




                    答辩委员会主席




                二零零八年六月
           中国科学院遥感应用研究所
         学位论文原创性声明和使用授权说明


               原创性声明


  本人郑重声明: 所呈交的学位论文,是本人在导师的指导下,独立进行研
究工作所取得的成果。除文中已经注明引用的内容外,本论文不含任何其他个人
或集体已经发表或撰写过的作品或成果。对本文的研究做出重要贡献的个人和集
体,均已在文中以明确方式标明。本声明的法律结果由本人承担。


           论文作者签名:        日期:    年   月   日




            学位论文使用授权说明


  本人完全了解中国科学院遥感应用研究所关于收集、保存、使用学位论文
的规定,即:
  按照学校要求提交学位论文的印刷本和电子版本;
  研究所有权保存学位论文的印刷本和电子版,并提供目录检索与阅览服务;
  研究所可以采用影印、缩印、数字化或其它复制手段保存论文;
  在不以赢利为目的的前提下,研究所可以公布论文的部分或全部内容。


  (保密论文在解密后遵守此规定)



           论文作者签名:       导师签名:

              日期:    年   月   日
基于 IDL 和 ENVI 二次开发技术的遥感软件系统开发方法与
                开发实例研究
                     (摘要)

  遥感软件系统开发是遥感技术得以应用的重要手段和软件实体化的过程。中
国科学院遥感应用研究所全球变化研究室长期所积累的成功遥感应用,既需要系
统地实现为一个软件集成实体,而又不能使科研人员的工作重点偏离遥感应用研
究而转移到纯粹的编程和软件开发上。在目前,遥感软件系统的开发平台和方式
方法有很多,各自具有优缺点,应该根据实际的情况和需要做出正确的选择。关
于这方面的研究并不多,且缺乏相互对比。

  本研究剖析了遥感软件系统的几种主流开发平台和相应的方式方法,并对比
了它们之间的优缺点。考虑到系统的开发周期和需要将来易于接手与扩展,本研
究最终采用 IDL 语言和 ENVI 二次开发技术相结合的方法进行系统集成工作。本
研究在分析该平台的特性和关键技术后,对课题组的科研成果开展系统设计和开
发工作。具体内容包括系统的需求分析、软件设计、可扩展重用的可视化公共模
块和类的设计与实现以及遥感基础应用的编写与实现等。

  本研究主要获得如下成果:

  1) 调研遥感软件系统开发的几种主流平台和方法论,并在这些平台的基础
    上做了一些前期的程序编写和开发工作;

  2) 重点学习研究 IDL 与 ENVI 二次开发技术相结合的开发方式以及用于遥
    感软件系统开发的关键技术,并确定为最终的开发平台和开发方式;

  3) 完成系统需求分析,开发构建可重用的可视化公共类和模块(包括遥感影
    像的读取、显示、漫游和彩色合成等),为后继开发奠定重要基础;

  4) 设计和完成(在上述可视化公共模块的基础上)人机交互界面,并实现用
    于几何精纠正的重采样算法和监督分类算法。

  本研究还为将来从事遥感软件系统开发的科研人员和开发人员提供了一个
开发方式方法选择的依据和帮助。

关键词:二次开发,GDAL,ERDAS,ENVI,IDL, MVC


                      I
        Research on remote sensing software system development
methodologies and cases using IDL & ENVI redevelopment technology

                                      (Abstract)

             Tang Quan (Cartology and Geographic Information System)

                             Directed by Prof. Niu Zheng

           Institute of Remote Sensing Applications, CAS, Beijing (100101)



     Building remote sensing software system is an important progress and method to
implement remote sensing technology applications. Various remote sensing researches
were done by personnel in Global Change Research Group in Institute of Remote
Sensing Applications, Chinese Academy of Sciences. Scientific applications
accumulated need be integrated to a uniform system entity without distracting
researchers’ focus from scientific research to pure coding and software development.
There exist several methodologies and development platforms with their respective
advantages and disadvantages. The selection of them should be made based on
practical use and request. Research on this issue is rare, or lack of generalization and
comparison, if any.

     In our research, several current development platforms and methodologies for
remote sensing software system development are presented and compared. The
combination of IDL language and ENVI redevelopment technology is chosen as the
final solution, using which the remote sensing software system is under construction
and we are making progress on the task of the scientific results’ system integration.

     We have accomplished the results in our research as follows.

1) Review various methodologies and platforms for remote sensing software system
    development, based on which some programs were written and some initial
    development result was accumulated;

2) Learn and study remote sensing system development methodologies using IDL
    language and ENVI redevelopment technology;

                                           II
3) System demand analysis and build visualized common modules for the entire
    system (including image access, display, pan, color-composition, etc) , they are
    solid basis for further development;

4) Designed interactive geographic user interface based on above visualized
    common modules, implemented resample algorithm for geo-correction and
    supervised classification.

    This thesis also serves as reference of methodology and platform selection for
remote sensing software system development for future researchers and developers.




Key Words: Redevelopment,GDAL,ERDAS,ENVI,IDL, MVC




                                           III
中国科学院遥感应用研究所硕士学位论文                                                                                                                                            目录




                                                                      目               录
第一章           引      言 ...................................................................................................................................... 1

   1.1 遥感应用系统开发目的和意义 ................................................................................................... 1
   1.2 遥感应用系统开发现状 ............................................................................................................... 2
      1.2.1 国内现状 ................................................................................................................................ 2
      1.2.2 国外现状 ................................................................................................................................ 4
      1.2.3 研究难点 ................................................................................................................................ 7
   1.3 论文研究内容和结构安排 ........................................................................................................... 8

第二章 遥感应用系统开发平台 .......................................................................................................... 10

   2.1 开发平台 ..................................................................................................................................... 10
      2.1.1 GDAL 和 Visual C++ ........................................................................................................... 10
          2.1.1.1 GDAL (Geospatial Data Abstraction Library) ................................................................................ 10
          2.1.1.2 双缓冲技术(“双 DC”技术) ...................................................................................................... 13
      2.1.2 ERDAS 二次开发.................................................................................................................. 15
      2.1.3 IDL + ENVI 二次开发 .......................................................................................................... 19
   2.2 平台比较和选择(系统软件平台设计) ....................................................................................... 20

第三章           IDL 和 ENVI 二次开发技术 ................................................................................................ 21

   3.1 IDL ............................................................................................................................................... 21
      3.1.1 IDL 简介 ............................................................................................................................... 21
      3.1.2 IDL 的关键技术 ................................................................................................................... 24
          3.1.2.1 构建 GUI(图形用户界面) ............................................................................................................ 24
          3.1.2.2 事件响应和 Xmanager ................................................................................................................. 24
          3.1.2.3 IDL 的对象图形系统 .................................................................................................................... 26
          3.1.2.4 两种漫游定位和缩放的方式 ....................................................................................................... 28
          3.1.2.5 总结 .............................................................................................................................................. 32
   3.2 ENVI 二次开发............................................................................................................................ 34
      3.2.1 ENVI 二次开发方式 ............................................................................................................. 34
      3.2.2 ENVI 二次开发的辅助特性 ................................................................................................. 35
   3.3 总结 ............................................................................................................................................. 37

第四章 两个遥感基本应用——几何纠正和监督分类 ...................................................................... 38

   4.1 点对点几何精纠正算法 ............................................................................................................. 38
      4.1.1 灰度重采样 .......................................................................................................................... 38
      4.1.2 算法实现 .............................................................................................................................. 41
   4.2 监督分类算法 ............................................................................................................................. 45
      4.2.1 分类方法 .............................................................................................................................. 45
      4.2.2 最短距离算法实现 .............................................................................................................. 46

第五章 系统的设计与实现 .................................................................................................................. 48

   5.1 系统总体设计 ............................................................................................................................. 48


                                                                                 I
中国科学院遥感应用研究所硕士学位论文                                                                                                                                       目录


    5.2 系统的 MVC 结构 ...................................................................................................................... 50
    5.3 系统安装和环境 ......................................................................................................................... 52
       5.2.1 系统安装 .............................................................................................................................. 52
       5.2.2 运行环境 .............................................................................................................................. 52
       5.2.3 系统特性和其他 .................................................................................................................. 52
    5.4 系统运行 ..................................................................................................................................... 53

第六章 总结与展望 .............................................................................................................................. 56

    6.1 主要结论 ..................................................................................................................................... 56
    6.2 展望 ............................................................................................................................................. 56
       6.2.1 扩展开发 .............................................................................................................................. 56
       6.2.2 系统展望 .............................................................................................................................. 59

参考文献 ................................................................................................................................................ 60

附        录 .................................................................................................................................................. 63

致        谢 .................................................................................................................................................. 65




                                                                              II
中国科学院遥感应用研究所硕士学位论文                         第一章 引言




                  第一章       引   言


1.1 遥感应用系统开发目的和意义


  遥感是一门应用型学科,它的理论正在逐步地得到完善。遥感学科从上世纪
七八十年代初期的陆地海洋资源监测和定性研究,发展到现在的更为复杂的地学
参数反演、全球变化、生物物理建模与可视化等定量研究学科。遥感学科也开始
在其他各个学科之间交叉。目前,越来越多的用于大气、水文、土壤、植被、海
洋和农业生态的定量模型和反演算法正在被人们研究和开展,全球很多高等学府
和研究院的地理系、地球系、大气科学系、海洋系和农业生态系等也有大量的遥
感领域的研究工作者,这些领域的科学家们也一直使用遥感技术作为一个手段和
工具来用于他们各自领域中的研究。遥感数据的获取、处理、分析以及和反演技
术已经不仅仅是遥感科学家要研究的问题,遥感技术的应用更是如此,而这种应
用往往以软件系统为载体。

  遥感科学研究的主体和客体都在不断的扩展和细化,积累的研究成果也是各
学科之间高度交叉和复杂的。作者所在课题组(中国科学院遥感应用研究所的全
球变化研究室)的科研人员一直致力于植被遥感(包括碳通量模型、植被生化组分
定量反演、植被光能利用率)、全球变化遥感(包括土地利用变化、土地覆盖)、土
壤遥感、大气遥感,遥感图象处理和遥感虚拟现实方向等多个方向的研究,并积
累了很多优秀的研究成果。如,蒋耿明研究了 MODIS 数据几何纠正算法和条带
噪声消除算法,并使用 Visual C++编写了 MODIS 数据处理系统[1];陈方采用 IDL
语言研究和实现了遥感图像模拟[2];李世华则使用 IDL 进行 NPP 生态模型的估
算和研究[3];袁金国、董晶晶等使用 Matlab 和 SPSS 软件研究植被遥感模型[4,5];
王力主要采用 IDL 和 Matlab 辅助土地变化检测研究[6];吴朝阳广泛使用 Matlab
和一些已有植被模型软件从事 PRI、叶绿素反演和光能利用率关系的研究工作[7]。
遥感应用系统的软件开发是一种将理论和成果转化成为软件实体得以应用的重
要过程和手段。由于以前不同科研人员编程验证、实现这些成果时所采用编程语
言及平台的不统一,使得多语言多平台开发出来的零散程序的通用性和相互之间
的耦合性受到了很大的限制,工作人员毕业或离任以后,有的程序往往搁置而无

                        1
     论文题目: 基于 IDL 和 ENVI 二次开发技术的遥感软件系统开发方法与开发实例研究



人能够使用,后继研究的不容易开展,成果的实用性也受到很大影响。

   作者所在的全球变化课题组于国家十一五期间,申请的 863 计划(国家统计
遥感前沿技术研究与示范应用的高光谱遥感作物信息提取方法研究),院重大(多
源遥感数据协同反演与信息融合关键技术)项目等很多都涉及到算法和应用,研
究的成果也需要转化成实用的软件。很多从事遥感应用的研究室科研人员都希望
将自己的成果发表为高水平的学术论文,同时也编写出相应的应用程序和软件。
随着研究的深入和取得新的进展,相应的软件应用系统也逐步得到扩充和完善,
这是一个发展和积累的过程。所以为了很好的集成前人的研究成果到应用系统
中,为了以后长期发展一个稳定高质的应用系统,统一的系统设计和统一的开发
语言和平台显得既有意义也很重要,一个实时扩展和发展完善的遥感技术应用系
统也显得不可多得。


1.2 遥感应用系统开发现状


   科研工作者的主要工作是使用现有的数学和数据分析可视化的手段和工具
进行科研,在遥感应用或是其他研究中,Matlab 和 IDL(后者在遥感中用的更加
普遍)是最常用的可视化和编程工具,因为它们的语法简单并在系统内部实现了
大部分的数值分析的算法,最重要的是,它们已经提供可以读取图像和实现高效
率的数据和图像分析、处理功能。Matlab 甚至在这方面提供了大量的可视化工具
模块。在 Matlab 和 IDL 的帮助下,科学工作者可以把他们的注意力放在领域内
研究对象的具体问题上和遥感应用算法逻辑上而不是编程的细节上。从这个层面
上来说,做遥感数据分析和可视化的都是编程的专家,但是这种编程是科研层面
上的编程,不需要用户界面,也很少具有人机交互;多半是数据批处理,目的主
要是为了验证科研思想和辅助科研。这和从事软件开发的编程完全不同。遥感应
用系统的软件开发编程则需要遵照软件工程的思想,根据需求分析设计出友好的
用户界面和交互方式,编写出可复用的函数和完成可视化人机交互的公共模块,
并提供详细的程序注释和文档。

1.2.1 国内现状


   国内从事 GIS 软件开发和服务的公司有很多,而从事遥感软件开发的公司
和科研单位却相对较少。以下介绍的几个遥感软件是国内主流的遥感应用平台级

                          2
中国科学院遥感应用研究所硕士学位论文                                 第一章 引言



软件,在历年来国产遥感软件的软件测评中频频获得优胜奖。

   IRSA 6.2 遥感图像处理系统为中国科学院遥感应用研究所、国家遥感应用工
程技术研究中心和北京国遥万维信息技术有限公司联合开发的最新的科技成果。
采用独特优秀的算法优于其同类产品,特别针对我国资源二号卫星图像特点的专
用算法。IRSA 6.2 集处理模块、纠正模块、融合模块、分类模块、复原模块、流
程模块、制图模块、高分辨率模块于一身,并提供了二次开发库函数[8]。

   北京东方泰坦科技有限公司开发的 TITAN v6.5 软件体系面向整个 3S 行业,
包括 TITAN Image、TITAN GIS、TITAN GPS、TITAN DM、TITAN WebServer
等。其中 TITAN Image 是遥感图像处理软件,它拥有丰富的遥感图像处理算法,
支持 90%的整景数据算法,能够支持 PCI Pix、Tiff、Geotiff、Bmp、Jpeg、Raw
等通用数据格式。TITAN Image 也提供了灵活的 API 开发函数库,支持 Microsoft
Visual C++、Borland C++、Delphi、PowerBuilder 等开发环境的二次开发,帮助
用户搭建专业的应用系统。TITAN 软件在雷达、高光谱以及高几何分辨率上功
能完善[9]。

   CASM ImageInfo v3.0 遥感数据处理系统,是由中国测绘科学院自主研发的
                   是
定量化和智能化遥感影像一体化处理平台, “十五”国家 863 重大科技成果(遥
感数据处理平台与应用(2002AA133010)项目支持),也是我国西部无图区 1:5
万地形图空白区测图工程的专用软件。CASM ImageInfo v3.0 以多源、多时态、
多尺度的遥感图像为基础,系统功能完善,影像处理高速有效,支持多源数据无
缝集成,支持包括我国大地坐标系在内的 80 种投影类型和 40 种椭球参数与参考
大地基准。CASM ImageInfo v3.0 的主要功能模块有多格式的数据导入导出、图
像编辑、增强、滤波、变换、特征分析、辐射纠正、几何纠正、数据融合、配准
镶嵌、投影变换、图像分类、变化检测、三维可视化和虚拟景观、正射影像图制
作、雷达图像处理、高光谱图像处理、高分辨率卫星影像立体测图 Sat DEMaker、
DRG 自动精纠正和拼接[10]。

   GEOWAY IS(ImageStation)由北京吉威数源信息技术有限公司自主研发,是
新一代开放式遥感影像处理专业平台。GEOWAY IS 平台以高分辨率、高光谱卫
星遥感影像处理为目标,支持数字影像产品制作、空间信息提取以及影像分析等
多层次的遥感应用。GEOWAY IS 平台采用组件化设计、插件式管理机制,降低
平台耦合性和运行负荷,提高了系统的稳定性、可扩展性及运行效率,并为二次

                             3
       论文题目: 基于 IDL 和 ENVI 二次开发技术的遥感软件系统开发方法与开发实例研究



开发提供支持。有别于通用的桌面遥感数据处理软件,通过对遥感数据处理特点
进行分析,GEOWAY IS 平台面向大规模遥感数据处理提供网络化生产调度管理
服务,能够有效降低其复杂度,极大地提高大规模遥感数据生产的整体效益[11]
(http://www.geoway.com.cn/Article/ShowClass.asp?ClassID=156)。

    上述几个遥感应用平台级软件在国内 3S 行业的软件测评中一直保持着良好
业绩。这些开发公司和科研团体大多是借助与 Microsoft Visual C++平台和开源的
图像读取库 GDAL 进行开发,开发的规模和难度都很大,开发人员是专业的程
序员。不适合以科研人员为主体的大众化开发。

    其他的遥感应用软件还有,如,中国科学院遥感应用所高光谱研究室研制的
面向高光谱数据的专业图像处理与应用系统 HIPAS v1.0[12,13],环境遥感监测系统
REMS v1.0[14],以及微波遥感研究室研制的通用雷达分析计算平台软件 GRACE
v1.0 等[15],还有更多的其他的遥感系统将放在论文第二章作进一步介绍。

1.2.2 国外现状


    相对中国,国外的遥感应用系统软件功能和市场较为强大。比较常用的有美
国 ITT VIS 公司的旗舰产品 ENVI(Environment for Visualization Images),这是一
套被广泛使用的功能齐全的遥感图像处理系统,它是处理、分析并显示多光谱数
据 、 高 光 谱 数 据 和 雷 达 数 据 的 高 级 工 具 ; 加 拿 大 PCI 公 司 开 发 的 PCI
Geomatica(PCI 的旗舰产品 Geomatica,目前已经集成了遥感影像处理、GIS/空间
分析、制图和桌面数字摄影测量系统,成为一个独立的生产工作平台);莱卡公
司的 ERDAS IMAGINE(代表了未来发展趋势的遥感图像处理软件);澳大利亚
Earth Resource Mapping 公司研发的 ER Mapper(大型专业遥感图象处理软件,图
象压缩,数据网上发布);还有搜索引擎巨商 Google 公司开发的遥感数据无缝集
成服务客户端软件 Google Earth,现在在互联网上是人们关注的热点。

    ENVI 的最初开发商是 RSI 公司,该公司连同 Eastman Kodak Company 的遥
感系统部门(RSS division)于 2004 年 3 月一同被美国 ITT 公司并购,这是一家
致力于图像可视化和图形分析的商业公司。ENVI 的最新版本为 4.5,它的主要
面向对象是高光谱应用。ENVI 软件主要由 IDL 语言实现,IDL 是一个容易上手
的第四代语言。它的缺点是运行效率相对低,处理速度相对慢,不适合做大规模
的工程性应用,其优点是可扩展性强,开发人员可以直接在 IDL 语言中调用 ENVI


                                     4
中国科学院遥感应用研究所硕士学位论文                              第一章 引言



的二次开发模块。类似 Matlab,IDL 语言在科研机构(尤其是图像处理,可视化
研究)应用很广。在遥感方面,ENVI 软件还有很多附加的插件模块,如用于大气
纠正的 FLASSH,还有专门用于处理 DEM 和 SAR 影像数据的模块等。目前 ITT
公司正在致力于加强 ENVI 的 GIS 方面的处理功能,增强其与 ArcGIS 软件的互
操作性[16]。

   ERDAS IMAGINE 软件由美国 ERDAS 公司开发,该公司建立于 1978 年。
ERDAS 公司于 2001 年被瑞士老牌公司 Leica 公司收购,归并到 Leica Geosystems
Geospatial Imaging 子部门。在得到 Leica 资金的帮助后,ERDAS IMAGINE 软
件的发展步伐更加有利与快捷,更多的新功能与算法加进到新版本中,ERDAS
软件目前的最新版本为 9.2。ERDAS 软件在全球遥感处理软件市场排名第一,在
GIS 软件市场排名第九。ERDAS 软件功能全面,涉及遥感图像处理各个流程,
具有较强的建模功能,大部分模块使用模型搭建,同时提供 EML 建模语言,对
开发人员要求不高,可以快速上手。结合批处理功能,ERDAS 可以实现处理的
自动化。另外 ERDAS CToolkit 提供 C/C++接口的 API 调用;在对 GIS 的支持方
面,ERDAS 具有较全的 GIS 功能,有专门的 GIS 模块做简单的 GIS 分析、栅格
矢量叠加显示和编辑,支持主流的矢量格式;ERDAS IMAGINE 面向不同需求
的用户,对于系统的扩展功能采用开放的体系结构以 IMAGINE Essentials、
IMAGINE Advantage、IMAGINE Professional 的形式为用户提供了低、中、高三
档产品架构,并有丰富的功能扩展模块供用户选择,使产品模块的组合具有极大
的灵活性[17]。

   PCI 是一家加拿大公司,建立于 1982 年,该公司致力于地球空间领域的以
图像为中心的软件开发和应用。该公司的产品 PCI Geomatics 软件以面向雷达应
用为主,是雷达数据处理领域的软件霸主。PCI 的最新版本为 10.1.2。PCI 软件
支持上百种地空影像数据格式,可以用于工业生产,支持可视化建模和 C/C++
接口的 API 调用。该软件可以用于遥感图像处理的各个领域。但是批处理及建
模功能不及 ERDAS[18]。

   ER-MAPPER 由澳大利亚一家制图公司开发,现在也并购到了 Leica 公司的
ERDAS 部门。ER-MAPPER 软件功能全面,能完成遥感图像处理基本流程。该
软件主要特点是拥有一个属于公司专利的 ECW(Enhanced Compression Wavelet)
压缩算法[19],具有很高的压缩比例,可以同时快速的以不同的分辨率访问压缩


                           5
          论文题目: 基于 IDL 和 ENVI 二次开发技术的遥感软件系统开发方法与开发实例研究



文件中的任何一个部分,并且在此基础上推出海量图像的管理和浏览模块。
ER-MAPPER 还支持 JPEG2000 压缩,ERMAPPER 的这些特性使得它处理的数
据占硬盘的空间小,速度也很快。此外,ER-Mapper 的影像镶嵌与合并的一些处
理算法也使得它使用更少的 CPU 时间和更小的硬盘空间[20]。

        Google Earth 的雏形最初来源于 Keyhole 公司的旗舰软件——“上帝之眼”
[21]
       ,该公司是美国一家名气不大的卫星影像公司,成立于 2001 年。2004 年 Keyhole
公司被比它大 4 岁的互联网搜索引擎巨商 Google 公司收购,Google 公司在 2005
年 6 月推出了 Google Earth 软件,该软件中的卫星影像大多来源与商业卫星“快
鸟”和一些航拍数据,用户只需要安装客户端,就可以在任何一个连接英特网的
地方免费浏览到高清晰的海量遥感影像数据。小到小学生,大到政府官员,Google
Earth 有着大量的客户群体。此外,Google Earth 还提供了标注功能,照片上传功
能和一些 GIS 的分析功能,已经冲击了传统的网络电子地图行业。随着 Google
Earth 的推出,互联网也由雨后春笋般地涌现出卫星地图服务,中国随后也推出
不少类似的网络或软件平台。但是 Google Earth 的出现也引起了诸如安全、隐私
等有争议的话题。总的来说,Google Earth 还是给人们带来观察地球和数据共享
的全新理念,其中的利弊讨论甚至放在了第五届全国青年遥感辩论赛的辩题中。




 (a) ER Mapper                 (b) PCI                 (c) ENVI




           (d) ERDAS IMAGINE                   (e) Google Earth
                               图 1-1 国外遥感类软件



                                         6
中国科学院遥感应用研究所硕士学位论文                                  第一章 引言



   这些国际著名的遥感软件按照数据存储的形式又可以分成两大流派 [22],一
是以 ENVI 为代表的影像数据和地理编码信息分离存储的形式,一是以影像数据
和地理编码信息相结合的存储形式,前者则易于管理,但是一旦地理编码信息文
件丢失,则会造成灾难性的损失,后者则统一存储,但是识别理解能力差,对软
件的要求更高。

   为了推动民族软件的发展和军工等一些敏感行业的应用,国产的企业平台级
软件在省、市、部级项目和军工敏感项目上得到很高的重视和使用。如,在
2006~2010 年内展开的国土资源第二次调查中,ImageInfo 软件系统发挥了重要
的作用。作为国产遥感软件之首的 IRSA 系列软件,也是主要通过二次开发的方
式使用在一些国家军工等敏感的项目中;而在以各大高校和研究院为主体的科研
单位,国外的软件凭着它们出色而稳定的性能仍然占有市场和主导地位。

1.2.3 研究难点


   相对 GIS 系统开发来说,遥感系统的开发更为复杂, 主要体现在三个方面。

   第一,在 GIS 领域有大量可调用的第三方组件,这些组件往往提供可视化编
程接口和模块化的函数,从而很大程度上降低开发难度,节约开发成本,缩短开
发周期[23,24]。如国际上著名的 ESRI 公司的 MapObjects、ArcObjects 以及 MapInfo
公司的 MapX 等,这些组件都遵循 COM 协议,在 Visual Basic、Visual C++、
Java、.NET 平台上都可以使用,开发人员可以根据自己的喜好和能力自由选择
适合自己的开发平台。很多单机或基于网络的 GIS 应用系统都在它们的基础上
搭建而成。有了这些第三方的组件,构建这些 GIS 的应用系统甚至可以像搭积
木一样简单,这也是“组件”名字的由来。同时也有大量的官方文档和相关技术
手册,详细介绍和剖析了这些组件的结构,继承关系和接口关系等,关于这些组
件以及相应开发方式和案例的书籍在 GIS 类书籍市场也很常见。国内也有自己
主权的软件和相应的可视化二次开发组件如 SuperMap、MapGIS 和 GeoBean 等,
而在遥感软件开发领域没有这样的可视化组件;

   第二,遥感系统的开发涉及到各种影像数据格式的读写,除了 Windows 操
作系统下常用的 bmp、jpg、tiff 等格式外,更多的要涉及到遥感卫星接收站接收
的专业数据格式如 img、geotiff、dat、raw、pix、大气科学研究采用的 netCDF
格式以及 MODIS 传感器使用的科学数据存贮格式 hdf、hdf-eos 等几十种格式的


                             7
   论文题目: 基于 IDL 和 ENVI 二次开发技术的遥感软件系统开发方法与开发实例研究



读写。这些特殊格式的文件不仅存储了遥感影像的灰度数据,还带有成像卫星参
数、投影、坐标、辐射校正系数等元数据各种信息,每一种文件格式都要花大功
夫去研究和解析。不解决复杂繁多的遥感数据格式的读取问题,遥感应用系统的
软件开发就无从谈起。

  第三,遥感影像的浏览和图像处理涉及到更多的人机交互,所以这些系统软
件对图形用户界面的要求很高。遥感影像大多为象元尺寸很大的文件,动辄上千
万个象元,这样大的影像是无法在屏幕上全部显示的,需要有很多漫游、缩放、
定位的操作,这些操作最为基础,几乎所有的遥感应用都要用到它们。

  针对以科研为目的的开发,从底层一一实现各种数据格式的读写是舍本逐末
没有必要的,充分利用已有的一些栅格影像读取库和现有不多的二次开发平台是
以科研为目的遥感系统开发的较佳选择。




1.3 论文研究内容和结构安排


  针对上述的难点,本文的研究开展如下工作。

  为了实现所追求的大众化开发和人人参与,科研人员在从事遥感研究中就应
该保持一个系统开发的思想,并随着科研的进展来安排程序的编写、调试和修改
等,研究工作结束时,撰写论文,同时整理自己研究过程中使用的程序等并集成
到统一的应用系统中。这需要开发的语言不能象 C/C++语言一样的低层,而必须
是一个封装了的高层语言,语法上简单,并且可以模块化和具有可扩展性,同时
也需要系统最初的设计人员要对系统有一个良好的设计和编写一些可重用的可
视化公共模块,这正是本文作者研究的重点。

  开发系统平台的选择是一个首要的问题。关于这方面的文章是少之又少;即
使有,也只是介绍某一种平台,缺乏横向的对比。本研究不仅对比和了解遥感系
统软件的几种主流的开发平台和相应的方式方法论,还对比了它们各自的优缺
点,最后选择最适合笔者课题组需求和实际情况的 IDL+ENVI 平台进行系统集
成开发。本研究完成一个遥感影像读取显示的可视化公共模块,并在其基础上抽
象出监督分类和点对点几何精纠正的特性,派生出两个子模块,这些模块为后人
的开发提供实用的基础。本文还研究和实现了监督分类和点对点几何精纠正的灰

                        8
中国科学院遥感应用研究所硕士学位论文                  第一章 引言



度重采样算法,完成了遥感软件系统基础应用的构建。本研究同时也能给从事遥
感系统集成的科研工作同行们一个遥感系统开发平台和方法的选择依据和帮助。

  鉴于此,本论文的后继内容主要包括下列部分:

  第二章介绍各种遥感软件系统的开发平台和相关难点技术,以及作者在这些
平台上做的一些早期工作;

  第三章重点选择和介绍了 IDL 和 ENVI 二次开发相结合的方法的特性以及用
以完成遥感软件系统开发的关键技术,IDL 和 ENVI 二次开发相结合的方法也是
本研究最终所采用的开发方式;

  第四章则详细介绍点对点几何精纠正(灰度重采样)和监督分类算法;

  第五章介绍自主开发的遥感技术应用系统软件的结构设计和基本功能;

  最后一章为总结与展望,总结已经取得的成果及存在的问题,探讨下一步工
作的发展方向。




                     9
        论文题目: 基于 IDL 和 ENVI 二次开发技术的遥感软件系统开发方法与开发实例研究




                    第二章 遥感应用系统开发平台

    本章详细介绍几种遥感软件系统的主流开发平台及其方式方法,并将它们之
间的优缺点做了对比。在比较的基础上结合课题组的实际情况选择最终的开发平
台与方式,本章也可以给从事遥感系统集成的科研工作同行们一个遥感系统开发
方法论的选择依据和帮助。


2.1 开发平台

2.1.1 GDAL 和 Visual C++


    GDAL 和 Visual C++的结合方式对于开发企业级的遥感软件来说用得比较
普遍,比如在国内比较有名的由中国科学院遥感应用研究所和北京国遥万维信息
技术有限公司联合自主开发的 IRSA 系列软件就是采用这种开发方式。这种开发
方式较为复杂,难度较大,需要专门的软件工程师进行开发,不适合课题组的大
众化开发。论文的早期工作是围绕这个平台展开的,并积累了一些成果,后来因
为需要将来发展到大众参与开发与开发周期的原因,我们不得不转移到别的系统
开发平台上。

2.1.1.1 GDAL (Geospatial Data Abstraction Library)


    GDAL(http://www.gdal.org)是一个跨平台并开源的图像读写库[25],它支持好
几十种栅格格式图像的读写(http://www.gdal.org/formats_list.html)。GDAL 给用户
提供很大的利用和扩展空间。GDAL 以动态和静态链接库的形式封装了读取遥感
影像波段灰度数据和属性信息(如投影信息、坐标系统、头文件、辐射纠正系数
等)的类和函数,并附带范例和说明文档。软件开发人员可以在 Windows 程序设
计语言中如 Microsoft Visual C++、Visual Basic 等中借助 GDAL 进行遥感应用软
件系统的开发。

    GDAL 的功能很强大,很多比较成熟的软件都是借助它的功能开发的[26],
如现在互联网上比较热门的 Google Earth;GIS 领域中在国际中使用最广的软件
ESRI ArcGIS 9.2+,遥感软件 ER Mapper,以及 IRSA 6.3 遥感图像处理软件系统

                                       10
中国科学院遥感应用研究所硕士学位论文                    第二章 遥感应用系统开发平台



等都无一例外地使用了 GDAL。由于 GDAL 也支持 HDF 格式的文件,所以一些
国内自主的 MODIS 数据处理系统也常常使用 GDAL 作为其影像读取的关键函数
库。但是 GDAL 只是一个函数库,它没有自己的编程语言,所以使用 GDAL 需
要开发人员熟练掌握一种开发语言,如 Visual C++、Visual Basic 或 Python 等。
也正是由于这一点,使用 GDAL 开发的程序可以完全的打包和部署,不需要任
何平台软件的存在,没有任何限制。

   GDAL 是一个开源的库,开发人员可以直接在其官方网站上下载源代码。这
意味着我们可以观察、研究和剖析其源码,甚至可以根据需要去修改。GDAL 也
不是一个完美无瑕的产品,它受到来自全世界的智慧人士的考验和检验。先后已
经有一些 bug 被人们发现和修改,中国科学院遥感应用研究所的图像处理研究室
在使用 GDAL 开发 IRSA 系列软件的时候就发现了一些投影方面的 bug,并做了
相应的调整。源码意味着需要在其操作系统下编译才可以使用,这里仅仅介绍在
Windows 操作系统下编译 GDAL 1.3 版本的例子,目前最新的版本为 GDAL 1.4.。

   编译之前要对编译定义文件 nmake.opt 进行修改,它在 gdal 源代码文件夹的
根目录下。将其中 GDAL_HOME 参数修改为 gdal 待安装路径,不改也可以。
如果需要添加 python 支持,需要将 PY_INST_DIR 路径参数设置为 python 安装
路径下的 Lib\site-packages 文件夹,将 PYDIR 参数设置为 python 的安装路径。
最后在 MS-DOS 窗口下切换到 GDAL 源代码的根目录,然后依次运行:
nmake /f makefile.vc
nmake /f makefile.vc install
nmake /f makefile.vc devinstall

   操作系统会用一段时间对 GDAL 源码进行编译,会在 GDAL_HOME 参数
指定的文件夹下生成文件。其中生成的 include 和 lib 文件夹对编程人员是最重要
的,它们包含了 GDAL 重要的头文件和库文件。GDAL 的源代码文件夹有一些
demo,如在 cpps 文件夹下可以找到一些用 C 语言写成的源文件,可以使用编译
以后生成 include 和 lib 文件夹设置 Visual C++的编译环境,对这些文件进行编译
和链接以生成可执行文件。其实,在编译 GDAL 的源代码的时候,这些文件同
时会自动被编译和链接,生成的可执行 demo 程序存储在$(GDAL_HOME)\bin 文
件夹下。比如:gdalinfo.c 是完成遥感影像系统读取的 C 源文件。




                           11
     论文题目: 基于 IDL 和 ENVI 二次开发技术的遥感软件系统开发方法与开发实例研究



   如下是使用编译生成的 gdalinfo.exe,输入一个带有坐标和投影文件的 tiff
文件产生的关于文件信息的输出,内容十分详尽。

   在 MS-DOS 环境中键入 gdalinfo   F:\遥感数据\地貌分布图 bjlocaltif.tif,程序
会输出如下结果。
Driver: GTiff/GeoTIFF
Size is 10268, 6819
Coordinate System is:
PROJCS["unnamed",
    GEOGCS["unnamed",
       DATUM["unknown",
           SPHEROID["unretrievable - using
WGS84",6378137,298.257223563]
       PRIMEM["Greenwich",0],
       UNIT["degree",0.0174532925199433],
       AUTHORITY["EPSG","-1"]],
    PROJECTION["Transverse_Mercator"],
    PARAMETER["latitude_of_origin",39.865767],
    PARAMETER["central_meridian",116.350253],
    PARAMETER["scale_factor",1],
    PARAMETER["false_easting",500000],
    PARAMETER["false_northing",300000],
    UNIT["metre",1,
       AUTHORITY["EPSG","9001"]]]
Origin = (355662.826954, 439250.030684)
Pixel Size = (30.00000000,-30.00000000)
Metadata:
  AREA_OR_POINT=Area
  TIFFTAG_XRESOLUTION=100
  TIFFTAG_YRESOLUTION=100
Corner Coordinates:
Upper Left (355662.827, 439250.031)
Lower Left (355662.827, 234680.031)
Upper Right (663702.827, 439250.031)
Lower Right (663702.827, 234680.031)
Center      (509682.827, 336965.031)
Band 1 Block=10268x1 Type=Byte, ColorInterp=Red
Band 2 Block=10268x1 Type=Byte, ColorInterp=Green
Band 3 Block=10268x1 Type=Byte, ColorInterp=Blue

   在这个 demo 中,虽然没有图形用户界面,但是 gdalinfo.exe 查询了该 tiff 文
件的元数据信息,包括投影参数、椭球参数、波段设置、坐标范围、影像分辨率

                              12
中国科学院遥感应用研究所硕士学位论文                   第二章 遥感应用系统开发平台



等,用户可以浏览和学习 gdalinfo.c 源文件的内容,从而对 GDAL 提供的这些查
询函数有更深刻和感性的认识。基于 Visual Basic 的例子也可以在 GDAL 源代码
文件夹下的 vb6 文件夹下找到。

  GDAL 还可以和 python 语言相结合,可以通过 import gdal 语句来在 python
语言中使用 GDAL。可以看得出,GDAL 是一个不可多得的图像库,这也是它得
到广泛使用的原因。

2.1.1.2 双缓冲技术(“双 DC”技术)


  论文的早期工作建立在 GDAL 和 VisualC++平台基础上,并在该平台上解决
了遥感影像漫游的闪烁问题,为了简单起见,不失一般性,早期影像的读取采用
了 Windows 操作系统默认的 bmp 位图格式文件。

  在 MFC 视 图 类 中 , 每 一 个 WM_PAINT 消 息 都 会 自 动 调 用 虚 函 数
CView::OnDraw(),任何用户自定义的视图的更新都需要重载这个函数。该函
数会首先自动调用 CView::OnEraseBkgnd()函数,顾名思义,这是一个擦除
背景的虚函数。由于背景是白色的,每次重新绘制的时候都要将背景擦成白色再
重新绘制视图。遥感影像的漫游实际上就是通过响应鼠标的 WM_MOUSEMOVE
消息,反复地调用 CView::OnDraw()和 CView::OnEraseBkgnd()来实现
的,由于反复地在屏幕上擦屏和写屏,会不可避免地产生严重的闪烁。

  一个似是而非的方法是将默认被调用的基类 CView::OnEraseBkgnd()
函数注释掉,那样背景便不再擦除,闪烁现象是消除了,可是漫游的时候影像重
叠在一起,无法正常浏览。

  绘图上下文(Device Context) 是 Windows 编程环境中重要的数据结构。MFC
全面地封装了绘图上下文。窗口,打印设备,甚至内存(统称为图形设备接口 GDI)
都有相应的绘图上下文,这样可以在绘图的时候使用统一的代码,而不用考虑待
绘制的图形是要绘制在窗口中还是内存中;MFC 将底层完全透明化,而提供了
一个统一的接口给程序员。利用设备上下文,程序员可以在对应的窗口、或打印
设备、或内存中进行点、线、面的绘制以及位图的贴图操作。设备上下文的公共
基类是 CDC。它的子类有不同的作用,CclientDC 类是窗口客户区的设备上下文;
CWindowsDC 类是整个窗口(包括客户区和非客户区)的设备上下文。CPaintDC
类也是窗口客户区的设备上下文,它和 CClientDC 类的区别在于前者会自动生成

                          13
     论文题目: 基于 IDL 和 ENVI 二次开发技术的遥感软件系统开发方法与开发实例研究



和释放相关句柄。CView::OnDraw()函数的输入参数就是其 View 类窗口客户
区域对应的 DC 指针。

   我们回到刚才的问题。为了消除闪烁,相关视图子类中对其基类的函数
CView::OnEraseBkgnd()的调用是一定要注释掉的。我们需要做的额外操作
是要在内存中重新定义一个空白的 DC,这相当于完成了擦除屏幕的过程,然后
在内存中的 DC 中绘制好漫游后的影像,最后将整个 DC 拷贝到 CView 派生类对
应的绘图 DC 上,由于擦除屏幕的过程是在内存的 DC 中实现的,而不同 DC 之
间的拷贝操作是 Windows 操作系统定义的 API 函数,执行效率很高,便解决了
闪烁的问题。人们常称之为“双缓冲”技术,是指内存中设置一个缓冲区(设备
上下文),其实说成是“双 DC”技术更加贴切一些。如下是“双 DC”技术实现
无闪烁漫游的关键代码。

//首先定义一个显示设备对象,内存空白 DC
CDC MemDC;
MemDC.CreateCompatibleDC(NULL);
MemBitmap.CreateCompatibleBitmap(pDC,rect.Width(),rect.He
ight());
//得到绘制的图像数据
CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);
//设置内存 DC 的背景色为白,相当于擦除操作,但是不会引起闪烁。
MemDC.FillSolidRect(0,0,rect.Width(),rect.Height(),RGB(25
5,255,255));
// BitBlt 是 CDC 最重要的成员函数,可以在不同 DC 之间复制和裁剪。
MemDC.BitBlt(leftpoint.x,leftpoint.y,bmp.bmWidth,bmp.bmHe
ight,&dcCompatible,0,0,SRCCOPY);

   论文的前期工作是建立在 GDAL 和 VisualC++平台基础上的,但是由于后期
扩展的开发难度不适合科研人员的大众化开发,周期太长,从而放弃了而采用后
来的 IDL 和 ENVI 二次开发方法相结合的方式。在前期工作中,我们实现了 bmp
图像的打开显示与漫游等,该软件雏形美其名曰“BmpViewer”。可以通过使用
GDAL 函数库读取影像的信息和灰度数据,使用 Windows API 函数将灰度数据
的二维矩阵转化成为 Windows 编程的 BITMAP 数据结构,这样也就可以继续开


                            14
中国科学院遥感应用研究所硕士学位论文                           第二章 遥感应用系统开发平台



展以后的开发工作。图 2-1 是 BmpViewer 的主界面截图。




                    图 2-1 BmpViewer 软件屏幕截图

   类似于 GDAL 的图象库还有 jai(Java Advanced Imaging)[27]。jai 是一个基于
java 平台的高级图像库,支持的文件格式相对有限。jai 也是可以扩展的库,它
已经封装了如分块、象元插值、仿射变换、边界扩展等图像操作算子,用户可以
自己改写这些在遥感图象处理中的常用操作,也可以设计出新的操作算子并注册
来完成开发人员的某些自定义的功能。目前,基于 java 平台的遥感软件很少,jai
的使用也不是很广。

2.1.2 ERDAS 二次开发


   ERDAS 是遥感工作者常用的软件之一,它在提供了强大的遥感数据处理功
能的同时,也提供了二次开发的平台以方便用户定制自己的程序界面和应用功
能。ERDAS 采用 EML(ERDAS Macro Language)语言设计 GUI 图形界面[28],并
在 C Developer’s ToolKit(简称 C Toolkit)中封装了 C API 供程序员使用[29]。ERDAS
软件的系统界面本身就是由 EML 语言以 eml 文件的形式定义的,eml 文件是一
个文本文件(扩展名为 eml),该文件详细描述了图形界面的配置。用户可以更改


                               15
     论文题目: 基于 IDL 和 ENVI 二次开发技术的遥感软件系统开发方法与开发实例研究



ERDAS 系统的 eml 文件或是自己编写 eml 文件以自定义 GUI 图形界面,同时利
用 C++语言编程实现具体的算法[30]。

   安装完 CToolkit 以后,ERDAS 的主程序面板上会生成 ToolKit 面板,其中
可以调用随 CToolkit 安装而附带安装的 demo 程序。ERDAS 软件的根目录下会
生成 Imagine870tk 文件夹,用户自定义的 eml 文件需要放在其\root\scripts 下;用
户编写的 C++程序工程文件等需要放在\sources\文件夹下;可执行程序需要放在
\root\bin\NTx86 下。安装的 demo 程序也会自动被分散安装在相应的目录下,用
户可以使用 toolkit 面板调用,也可以在 session->command 下 load 相应的 eml 文
件。图 2-2 是安装 CToolKit 以后 ERDAS 软件的主界面截图。




                     图 2-2 ERDAS 主界面

   如下是一个 EML 文件的具体内容,图 2-3 是其定制生成的 GUI 界面。
   frame imageCopyFrame
      {

         title "图像反色";/*对话框标题*/
         button okb;
         button cancelb;
         button helpb;
         filename infile;
         filename outfile;

        button okb
        {

             title left center "反色";
             geometry 15, 66, 75, 25;

           on mousedown
           {

                job "imageConvert"      /*exe 文件名*/
                 -input $infile
                 -output $outfile;

                             16
中国科学院遥感应用研究所硕士学位论文                           第二章 遥感应用系统开发平台


             }
         }

         button cancelb
         {

                 title left center "退出";
                 geometry 139, 66, 75, 25;
                 on mousedown
             {
                    unload;
             }
     }




                        图 2-3 图像反色 GUI 截图

  上述 EML 文件指明了 imageConvert 函数是实现图像反色的函数及其函数原
型。

  ERDAS 还提供了 SML(Spatial Model Language)空间建模语言,它和 ERDAS
模型生成器提供了 23 类共 200 多个函数和算子[31],可以操作栅格数据、矢量数
据和矩阵等。它类似于 ArcGIS 中的 ModelBuilder 功能,可以像绘制模型的流程
图一样来定制处理数据的流程,甚至可以不用写一行代码。这对科研工作来说是
很有实用价值的。空间建模工具本身就是 ERDAS 的一个模块。如图 2-4,这是
一个遥感影像的主成分分析的数据流程,涉及到的算子有求波段协方差矩阵,求
矩阵特征值,矩阵运算等,这些都被 ERDAS 的 Moduler 功能和 SML 所支持,
数据的输入输出和中间流程很清楚明了。




                               17
    论文题目: 基于 IDL 和 ENVI 二次开发技术的遥感软件系统开发方法与开发实例研究




                  图 2-4 主成分分析建模



  由于 CToolkit 提供的一些方便的影像读取和算子的功能,ERDAS 二次开发
技术被广泛地使用在科研和系统开发应用中,北京师范大学的谢华美等(2005)使
用 ERDAS 二次开发功能实现自己的云检测和图形用户界面[32];中国国土资源航
空物探遥感中心的赵玉灵等(2005)使用 ERDAS 实现地质信息提取模块[33];中国
林业资源研究所的刘清旺等(2007)采用 ERDAS 实现了基于 TM 影像森林病虫害
检测系统[34];中国科学院遥感应用研究所的张维胜等(2005)使用 ERDAS 构建三
维虚拟地理环境 [35] ,中国国土资源航空物探遥感中心的范景辉等(2004) 采用
ERDAS 开发地质调查遥感信息处理分析系统中“波谱分析”模块[36]。



                         18
中国科学院遥感应用研究所硕士学位论文                           第二章 遥感应用系统开发平台




                 表 2-1   ERDAS 二次开发(2004~2007)
人员          单位             时间               系统
谢华美       北京师范大学           2005             云检测
        中国国土资源航空物
赵玉灵                        2005        地质信息提取模块
           探遥感中心
刘清旺     中国林业资源研究所          2007     基于TM影像森林病虫害检测系统
        中国科学院遥感应用
张维胜                        2005        三维虚拟地理环境
            研究所
        中国国土资源航空物                   开发地质调查遥感信息处理分析
范景辉                        2004
           探遥感中心                      系统"中"波谱分析模块"

   由于缺乏第三方的集成开发环境来定制 ERDAS 二次开发的图形用户界面,
所以 ERDAS 的二次开发中 EML 文件的设计和编写是一件繁琐的事情。ERDAS
二次开发的另一个局限在于 CToolkit 不是免费的,而且运行使用 ERDAS 二次开
发技术的程序或应用系统需要预先安装和部署 ERDAS 软件。

2.1.3 IDL + ENVI 二次开发


   ENVI 是遥感领域中很受欢迎的软件,目前最新的版本是 ENVI 4.5,它有一
套属于自己的开发语言——IDL 语言和二次开发包。 是一个完全面向对象的,
                         IDL
支持 GUI 开发的 4GL 语言,ENVI 软件就是使用 IDL 语言开发的。原则上可以
说,只要用 ENVI 可以实现的,用 IDL 也同样可以实现,可见 IDL 语言的潜力
是很强大的。ENVI 二次开发包对 IDL 进行了进一步的封装,如 IDL 读取影像
的函数和支持的格式有限,但是用 ENVI 二次开发的函数可以读写几乎所有格式
的遥感影像,并且可以分块读取。

   使用纯 IDL 语言开发的应用程序可以脱离 ENVI 软件运行。部署此类 IDL
程序只需要在打包的时候将 IDL 的虚拟机同时打包就可以了,部署和运行也没
有其他的限制和要求;而运行和部署调用了 ENVI 二次开发包的程序或应用系统
则需要预先安装和部署 ENVI 软件,但是在程序或应用系统执行的时候不需要运
行 ENVI 软件。

   由于本研究采用了 IDL 和 ENVI 二次开发相结合的平台,所以关于该平台的
方法论的有关内容我们放在下一章专门讨论。




                               19
      论文题目: 基于 IDL 和 ENVI 二次开发技术的遥感软件系统开发方法与开发实例研究



2.2 平台比较和选择(系统软件平台设计)


   以上我们讨论了 3 种开发方式和平台的选择,各自具有优缺点。GDAL 是底
层的开发库,它可以不借助任何遥感软件平台而开发出独立的应用程序。但是开
发周期较长,即使是读取影像,也没有遥感软件提供的二次开发包好。GDAL 本
身不是一个语言,需要一个宿主语言才能发挥作用,这对编程人员又提出了高要
求。ERDAS 和 ENVI 都是遥感影像处理软件,它们都提供了各自的二次开发平
台,但是部署最终程序或应用系统的同时需要安装 ENVI 或 ERDAS 软件作为基
础平台;而在 GIS 领域,部署最终程序或应用系统的时候不需要安装任何 GIS
软件,如利用 ArcGIS Engine 就可以开发出只需要运行时[17](Runtime)就能运行的
程序,将 Runtime 一起打包后,安装和部署应用程序时就不再需要安装 ArcGIS
软件,这也从另一个方面反映出目前遥感系统软件开发相对于 GIS 系统开发的
困难和不足。表 2-2 是几种开发方式的总结对比。
                  表 2-2   遥感软件开发平台对比
开发方式         开发周期         读取影像      资金成本   宿主语言   部署要求
完全独立开发       很长           很难        无      需要     无
GDAL         长            一般        无      需要     无
ERDAS二次开发    一般           简单        有      需要     安装ERDAS
IDL + ENVI   一般           简单        无      不需要    安装ENVI

   本研究最终确立的平台是 IDL 语言和 ENVI 二次开发相结合的平台,因为
IDL 本身是一个功能强大的语言,它比 C、C++语言等更容易掌握,适合从事科
研而不是专门程序开发的人员使用,加上 ENVI 二次开发能力的配合完全可以开
发出功能强大的遥感系统。




                               20
中国科学院遥感应用研究所硕士学位论文                   第三章 IDL 和 ENVI 二次开发技术




               第三章   IDL 和 ENVI 二次开发技术

   通过上一章的分析和对比,我们采用 IDL 和 ENVI 二次开发相结合的方法来
集成开发我们的遥感技术应用系统。本研究的开发主要工作是设计编写可视化公
共模块和类,设计图形用户界面,并利用经过测试的公共模块和类构建遥感基础
应用。为了最终实现这个目标,本章详细研究了 IDL 和 ENVI 二次开发平台的方
法论以及一些关键的技术。


3.1 IDL

3.1.1 IDL 简介


   IDL(Interactive Data Language)是面向矩阵,语法简单的跨平台语言[37],遥感
影像的多波段灰度数据在计算机内存中以二维或多维矩阵的形式存储,正好适合
IDL处理。IDL处理矩阵的能力很强大,在国外,很多科研人员都将它看成是可
以和Matlab相媲美的数据可视化工具。IDL是一个独立的语言,和C++一样,它
语法更简单。IDL对矩阵和图像的强大处理能力使IDL成为科学数据可视化和分
析的高级处理工具。IDL集可视化、交互分析、大型商业开发为一体,提供完善、
灵活的开发环境。IDL的客户和基于IDL的产品也是数不胜数,凡是用到图象处
理和可视化的地方,IDL都是一个很好的帮手。在医学图像成像和处理分析上,
IDL已经成为一个不可或缺的辅助工具[38,39,40,41]。IDL可以胜任从简单快速的科研
式的交互分析到大规模的商业应用。

   IDL还将其数据可视化的强大功能扩展到了互联网上,这就是ION(IDL On
Net)。它有两种方法实现,分别是IDL Script和基于Java Applet的IDL Java。IDL
和Java都是可跨平台的语言[42]。ION有助于大规模的网络数据共享。

   自从1977年发布以来,IDL已经成功地为用户提供了超过28年的科学可视化
软件服务。目前,IDL的最新版本为7.0,已经广泛应用于海洋、气象、医学、空
间物理、地球科学、教育、天文学和商业等各个领域。Los Alamos National Lab
的生物专家利用IDL开发了MRIViewer,该软件可以用于观察人大脑的核磁共振
图;NASA一直是IDL的忠实用户,IDL被它用来作为航空器开发的模拟工具;
NASA还利用IDL编写系统来辅助监测海洋和大气,并在互联网上为科学家提供

                           21
          论文题目: 基于 IDL 和 ENVI 二次开发技术的遥感软件系统开发方法与开发实例研究



遥感数据共享的平台;宾西法尼亚大学的地球科学系使用IDL开发了World
Topography Viewer,它可以完成DEM的地形构建和飞行观察[43]。

        在国内,航天星图科技(北京)有限公司是国内 IDL 和 ENVI 软件的总代理公
司,该公司一直致力于基于 IDL 的软件产品的开发,包括动态视频信息处理系
统、海量数据信息管理系统、气象数据处理系统、三维电磁可视化系统、溢油遥
感监测系统和天地洋三维可视化系统等(http://www.imagetekinfo.com/),IDL 同样
被广泛地用来开发系统和辅助科研。北京航天航空大学电子工程系的李春升等
(2000)使用 IDL 开发了 SAR 图像处理及质量评估系统[44];上海交通大学图像处
理与模式识别研究所的于志强等(2001)使用 IDL 进行水声声场的数据可视化研究
[45]
       ;中国科学技术大学的刘建平等(2001)使用 IDL 开发了高光谱数据处理分析软
件系统[46];中国矿业大学的李玉芳等(2002)使用 IDL 进行煤田地震数据可视化研
究[47];辽宁工程技术大学的吉长东等(2002)使用 IDL 实现了 V-GIS 三维视觉环境
[48]
       ;国家海洋局的黄建波等(2003)使用 IDL 完成了 HY-1 卫星 CCD 遥感器海岸
带动态监测应用示范系统开发 [49];广东气象卫星地面站的何全军等(2004)使用
IDL 进行地形的三维可视化[50];国家海洋局的李安虎等(2004)使用 IDL 和 ION
并结合 WebGIS 搭建了海洋科学数据共享平台 [51] ;华中科技大学的张晓宇等
(2005)使用 IDL 开发语言完成基于网络的三维地理信息系统[52],电子科技大学的
王宇(2005)在其硕士论文中使用 IDL 开发设计了火力发电厂三维地理信息系统
[53]
       ;长江勘测规划设计研究院的霍建军等(2006)使用 IDL 实现三峡永久船闸三维
可视化系统[54];中国科学院中国遥感卫星地面站的王黎明等(2007)使用 IDL 平台
实现遥感影像大气与地形校正方法[55]。中国科学院寒区旱区环境与工程研究所
的郭建文(2007)等使用 IDL 实现分布式 GIS 系统应用研究[56];成都理工大学的阚
瑷珂等(2007)使用 IDL 进行考古地层空间数据挖掘研究[57]。
                    表 3-1   IDL 客户(国际公司和科研单位)
  科研单位或公司实体                            使用IDL的系统
Los Alamos National Lab   MRIViewer[],可以观察人大脑的核磁共振图
         NASA           辅助监测海洋和大气,         并在互联网上为科学家提供遥
                                      感数据共享的平台
 宾西法尼亚大学地球科 World Topography Viewer,它可以完成DEM的地形构
         学系                            建、飞行观察等
         NASA              NASA的火星飞越航空器的发展使用软件技术
   2000年悉尼奥运会            澳大利亚综合预报系统 Australian Integrated
                                     Forecasting System


                               22
中国科学院遥感应用研究所硕士学位论文                             第三章 IDL 和 ENVI 二次开发技术


 澳大利亚空间预报中心                           IPS Radio
Zurich苏黎世大学GIS实                   交互式地形数据可视化系统
       验室
   保时捷汽车公司              Developers utilized IDL’s ActiveX to integrate
                               company’s external Delphi code
European Space Agency             地中海地区监测海上泄油污染
       欧空局
 海洋科学研究院 巴塞                     VADO 海洋学数据的可视化及分析
     罗那-西班牙
 NASA/Goddard Space                    SeaWiFS 数据分析系统
    Flight Center

              表 3-2     IDL 在国内的科研单位客户(2000~2007)
  人员            单位              时间                 系统
           北京航天航天大学电
李春升等                            2000     SAR图像处理及质量评估系统
               子工程
           上海交通大学图像处
于志强等                            2001       水声声场的数据可视化
           理与模式识别研究所
刘建平等        中国科学技术大学            2001     高光谱数据处理分析软件系统
李玉芳等         中国矿业大学             2002        煤田地震数据可视化
吉长东等        辽宁工程技术大学            2002         GIS三维视觉环境
                                       HY-1卫星CCD遥感器海岸带动态监
黄建波等           国家海洋局            2003
                                              测应用示范系统
何全军等       广东气象卫星地面站            2004         地形的三维可视化
                                       使用IDL和ION并结合WEBGIS完成海
李安虎等           国家海洋局            2004
                                            洋科学数据共享平台
张晓宇等         华中科技大学             2005     基于网络的三维地理信息系统
王宇等          电子科技大学             2005     火力发电厂三维地理信息系统
           长江勘测规划设计研
霍建军等                            2006     三峡永久船闸三维可视化系统
                究院
           中国科学院中国遥感
王黎明等                            2007      现遥感影像大气与地形校正
              卫星地面站
郭建文等       中国科学院寒区旱区
                                2007       分布式GIS系统应用研究
            环境与工程研究所
阚瑷珂等         成都理工大学             2007      考古地层空间数据挖掘研究

   IDL 支持混合编程,它可以作为一门语言进行独立地开发,它也提供了
ActiveX 组件将其功能以 COM 动态链接库的形式被任何一种遵循 COM 协议的
宿主语言如 Microsoft Visual C++、Visual Basic、.NET 等调用[58,59,60,61,62],这又体
现了 IDL 灵活的拓展性。IDL 为 Windows 开发环境提供了称为 IDL DrawWidget
的 ActiveX 组件,该组件的 dll 库位于 IDL 系统安装目录的“bin\bin.x86\idl32.dll”。


                                  23
      论文题目: 基于 IDL 和 ENVI 二次开发技术的遥感软件系统开发方法与开发实例研究



通过使用 IDL 的 ActiveX 控件,我们可以结合 IDL 所具备的强大的数据可视化
特性和更加主流的编程语言和开发环境的综合优势。

   本研究中的系统开发选择了 IDL 独立开发而不使用任何其他的宿主语言。

3.1.2 IDL 的关键技术

3.1.2.1 构建 GUI(图形用户界面)


   IDL 编写的 GUI 中都含有一个顶层的框架基底(TLB),它将作为包含其他基
底和用户界面组件的顶层架构,从而形成一个自顶向下的层次结构。实现图形用
户 界 面 的 组 件 的 名 字 大 多 以 WIDGET_ 开 头 , 以 组 件 的 功 能 结 尾 , 如
WIDGET_BUTTON 是一个按钮组件。在创建 IDL 的 GUI 时,先是构建一个全
GUI 的框架基底(TLB),这是唯一的没有父基底的组件,然后再不断分支,建立
下级的 GUI 组件,最后形成一个完全由开发人员自己定义出来的 GUI 组件层次
家谱。IDL 提供了 IDLDE 开发环境来定制用户界面,这点和 Visual Basic 一样方
便快捷,IDL 适合 RAD(快速应用程序开发),开发者在 IDLDE 中可以拖拽各种
组件到框架基底中。不过 IDL 本身不能再使用第三方 COM 组件。利用 IDL 面
向对象语言的特性,图形用户界面可以模块化,以类的形式封装。本研究就是借
助 IDL 这样的特性,构建了一个模块化的 GUI,并且支持用户交互。图 3-1 是一
个典型的 GUI 层次结构。



                              TLB


          Base1                                     Base3
                            Button1


  Base2           Button2           TextField1
                                                    Base4




                                         Slider1   Droplist1


                   图 3-1 IDL 的图形用户界面层次结构

3.1.2.2 事件响应和 Xmanager

                               24
中国科学院遥感应用研究所硕士学位论文                            第三章 IDL 和 ENVI 二次开发技术



     IDL 的事件相应由 Xmanager 处理[63],它在组件程序中扮演重要的角色。
每个用户操作都会产生一个事件交给 Xmanager 来处理。Xmanager 则委托每个事
件给一个称为事件处理器的函数(回调函数)来处理事件。Xmanager 的工作机制和
Windows 下编程的消息循环的方式是类似的,它以循环的方式时刻等待事件的发
生,再从窗口系统中取得事件,将一包数据传送待事件处理器。图 3-2 表示了
Xmanager 的链接组件和事件处理器之间的关系。

         创建组
                                               事件处理器
         件程序




                            XManager



                    图 3-2    IDL 的 Xmanager 和消息循环

     每个事件会返回一个 event 变量,它是一个结构体,包含了事件的全部信
息,这些信息包括事件的产生者 id、保持此组件的顶层基底和引发该事件组件的
其他特殊信息如产生时鼠标的状态和位置、       表
                   键盘的状态等。 3-3 是一个对照表,
左边是 Widget_Draw 组件可以产生的消息事件,该事件的 tag 域包含事件产生时
鼠标和键盘的状态信息。右边是使用传统的 Visual C++编程的 MFC(微软基础类
库)对应的各种消息事件,从该表中我们可以看出,IDL 完全具备用于实现人机
交互的事件消息响应机制。
                     表 3-3     IDL 和 MFC 的对应关系
             IDL 语言                      对应 Windows 编程中事件或类
         Widget_draw 部件                        CView 基类(MFC)
           Event.type = 1                     MOUSEMOVE 事件
         Event.release = 1                   MOUSE_DOWN 事件
          Event.press = 1                      MOUSE_UP 事件
 Event.left =1 & Event.release = 1            LButtonDown 事件
Event.right = 1 & Event.release = 1          RButtonDown 事件
 Event.left = 1 & Event.press = 1               LButtonUp 事件
Event.right = 1 & Event.press = 1              RButtonUp 事件



                                   25
     论文题目: 基于 IDL 和 ENVI 二次开发技术的遥感软件系统开发方法与开发实例研究



   每一个GUI组件还可以设置用户自定义的用户变量,可以在事件处理器中获
得这些用户变量的值。这种GUI可视化控件和变量信息的绑定机制的好处是既可
以使得事件处理器能够分辨出某一事件到底是由哪一个组件产生的,也可以在不
同的函数(尤其是事件处理回调函数)中传递信息。IDL的GUI系统的这个特性在
本研究的系统开发中被广泛使用。

3.1.2.3 IDL 的对象图形系统


   IDL 提供两种图形系统:直接图形系统和对象图形系统。其中对象图形系统
采用了面向对象的编程技术,它有一组内置的类组成。利用这些类可以生成高质
量、交互式、可重用的二维和三维图景。它采用先进的图形生成技术,包括硬件
图形加速以及 OpenGL 技术。IDL 的对象图形系统可以出色地完成遥感影像的显
示。

   使用图形对象系统使得对象图形常驻内存并且可以对它进行操作。组成 IDL
对象图形系统的类大约 30 多个,有 5 种类型:容器、原子、目标对象、属性、
符合体。命名的格式为 IDLgrXxxx。开发最常用的是容器和原子。

   构建 IDL 图形对象系统是一个多步骤的过程,必须创建出所有的必需对象
并将其送至目标对象。IDL 对象图形系统也是层次结构,原子可以加到容器当中。
如图 3-3,为了创建一个图形对象系统必需创建出所有的容器和原子并且建立它
们之间的等级关系。


      Graphic atom      Graphic atom        Graphic atom   Graphic atom




                     Model                     Model          Model


                              View                           View



                                               Scene

                      图 3-3   IDL 图形对象系统等级图




                                       26
中国科学院遥感应用研究所硕士学位论文                                第三章 IDL 和 ENVI 二次开发技术



    其中 Scene 是场景的容器,View 是模型的容器,Model 是原子的容器。利用
原子组成模型,构建场景,渲染成视图最后显示。典型的显示容器如
IDLgrWindow , 模 型 容 器 如 IDLgrView , 原 子 容 器 如 IDLgrModel ; 原 子 如
IDLgrAxis、IDLgrImage、IDLgrLight、IDLgrPolygon、IDLgrText、IDLgrPolyline、
IDLgrPlot,命名很好地反映了每个图形对象的功能。上层的容器或原子可以加
到下层的容器当中,最终构成一级一级的显示场景等级图。

    能够使用的 IDL 图形对象系统的对象见表 3-4。
                      表 3-4   IDL 图形对象系统中的各种类

IDLgrAxis      IDLgrBuffer     IDLgrClipboard    IDLgrColorbar   IDLgrContour

IDLgrFont      IDLgrImage      IDLgrLegend       IDLgrlight      IDLgrModel

IDLgrPalette   IDLgrPlot       IDLgrPolygon IDLgrPolyline        IDLgrPrinter

IDLgrScene     IDLgrSurface    IDLgrSymbol       IDLgrTessalator IDLgrText

IDLgrView IDLgrViewGroup IDLgrVolumn             IDLgrVRML       IDLgrWindow


    本研究中使用的 IDL 图形对象可以在上表中找到(粗体字部分,这些也是最
常用的 IDL 图像对象)。下面是我们在实现山地数据可视化时,利用 IDL 对象图
形系统渲染的 TIN(不规则三角形网)场景,数据源为一个文本文件,里面记录了
33 个三角形的顶点和高程,实现的代码结构很清晰明了。渲染的效果如图 3-4。
oWindow = obj_new('IDLgrWindow')                // window for display
oview = obj_new('IDLgrView')                    // Container for models
oModel=obj_new('IDLgrModel')                    //Container for atoms

oWindow->add, oModel
oModel->add, oView

result = read_ascii(‘c:\data.txt’) //read triangle data file
for i=0L, 98, 3 do begin
    otrigon=obj_new('IDlgrpolygon', $
         data = result.field1[*,i:i+2] , $
         color = [255,255,255])      /// Build atom
    oview->add, otrigon   //put atom to container for render
end

    oWindow->Draw                                             //render

                                   27
       论文题目: 基于 IDL 和 ENVI 二次开发技术的遥感软件系统开发方法与开发实例研究




                      图 3-4 IDL 图像对象系统渲染的山地场景

    任何一个遥感影像的多波段或多波谱的灰度数据都可以构建成一个
IDLgrImage 原子。构建该原子对象时需要输入一个二维或三维的 data 数据作为
参数,这正好来自内存中的遥感影像灰度数据。



3.1.2.4 两种漫游定位和缩放的方式


    遥感应用软件的浏览操作颇为复杂,因为遥感影像不同于普通照片,遥感影
像的长宽动辄上千万个象元,全部显示在屏幕上是不可能的,必须实现漫游、定
位和缩放的功能。这又是一个琐碎开发难点。

    解决这个问题在于“IDLgrView”对象,它代表了用户的视角,定义了观察
者可以看见的范围。它的构造函数中有一个最重要的参数 Viewplane _ rect ,
Viewplane _ rect  [ Xoffset ,Yoffset , Xsize,Ysize]

     Viewplane _ rect 决定了映射入可视区的 X 和 Y 边界,位于边界外的对
象或对象的一部分不会被绘出。通过正确设置和更改 Viewplane_Rect 的值,既可
以使得系统自动完成裁剪,同时也能实现遥感影像的漫游和缩放。见图 3-5。

                                     28
中国科学院遥感应用研究所硕士学位论文                                        第三章 IDL 和 ENVI 二次开发技术




     待渲染的原子(如 IDLgrImage)
                                                               Graphic atom
                               Xsize
                                                               (IDLgrImage)
                 真正的可视区,由                         Ysize
                 Viewplane_Rect 参
   Xoffset       数定义
                                                           View (IDLgrView)

                           Yoffset




             一般是 Widget_Draw 组件或是一
             个图形对象的 Window 窗口。显
             示的内容由 IDLgrView 的参数
             Viewplane_Rect 定义的可见视区
             投影而来。                                                 Window

                 event.x                                       (IDLgrWindow)
                                        event.y




                                图 3-5     IDL 的视窗说明图

   从前文的等级结构图中我们可以知道 IDLgrView 中包含 Model,Model 又包
含 Image 原子,我们没有必要将遥感影像都显示在屏幕中,更没有必要将影像全
部都读取到内存中。XOffset 和 YOffset 对应视区在 IDLgrImage 中的位置,Xsize
和 YSize 对 应 视 区 的 宽 度 和 高 度 , 最 后 将 视 区 中 的 内 容 投 影 到 显 示 组 件
WIDGET_DRAW 上渲染。

   将图像或其一部分读取到内存,并以此构建 IDLgrImage 对象,在其上构建
IDLgrView 对象,设置相应的 Viewplane _ rect 参数显示相应的感兴趣部分,
这样其中 XOffset 和 YOffset 参数实现漫游。Xsize 和 Ysize 则实现缩放。当 Xsize
和 YSize 设置为正好和 WIDGET_DRAW 窗体大小一样的时候,图形正常大小显
  当
示, Xsize 和 Ysize 设置为 WIDGET_DRAW 窗体的两倍大小的时候,相当于原

                                             29
          论文题目: 基于 IDL 和 ENVI 二次开发技术的遥感软件系统开发方法与开发实例研究



影像的更多部分显示在同一个大小的窗口中,影像则缩小一倍被显示了,反之则
反然。Event.x 和 Event.y 则是 WIDGET_DRAW 的事件相应中 event 事件结构体
中的最重要的 tag。结合影像的投影信息和坐标信息,通过坐标换算,可以得到
鼠标所在位置的坐标。

      本文研究和实现了两种漫游定位和缩放的方式,分别是拖拽式和点击式。 前
者是 ArcGIS 类软件和 ERDAS 软件的定位漫游方式,ENVI 软件主要采用后者。
无论是哪种方式,实现的关键都是靠正确设置Viewplane _ rect 参数的值。

         拖拽式

      关键在于公式推导来计算 XOffset 和 YOffset,以实现影像的漫游和缩放。为
了不引起定位混乱,要求这种缩放方式下的缩放之后鼠标的点对应的位置不发生
变化。如图 3-6。即 [ XOffset  event.x / zoom,YOffset  event. y / zoom] 是
一个固定的坐标,即鼠标所在点在整个遥感影像中的象元坐标。(zoom 变量的含
义下文有解释。在下图1中,该固定点的位置在湖中正方形小岛的右上顶点。该
顶点正好为用户在点击放大时,鼠标所在的位置。虽然经过三次放大,该点在屏
幕窗口的位置一直没有发生变化,这是用户所期望的结果。)




                       图 3-6(a) 原始图像(放大前)




1
    该影像为 IKONOS 卫星于 2001 年拍摄的颐和园昆明湖一景。

                                30
中国科学院遥感应用研究所硕士学位论文                              第三章 IDL 和 ENVI 二次开发技术




                           图 3-6(b) 第一次放大




                            图 3-6(c) 再次放大

  对于缩小的情况,根据位置不发生变化得到方程:

  XOffset (前)  event.x / zoom  XOffset (后)  event.x /  zoom *2
  YOffset (前)  event. y / zoom  YOffset (后)  event. y /  zoom *2
  其中 zoom 是缩放系数,为 2 的整数次幂。



                                   31
       论文题目: 基于 IDL 和 ENVI 二次开发技术的遥感软件系统开发方法与开发实例研究



   计算得到 X(Y)Offset 迭代公式为:

   XOffset  XOffset  event.x /  zoom *2
   YOffset  YOffset  event. y /  zoom*2
   然后修改缩放系数, zoom  zoom *2



   对于放大 2 倍的情况,方程则相应变成:

    XOffset (前)  event.x / zoom  XOffset (后)  event.x /  zoom / 2
    YOffset (前)  event. y / zoom  YOffset (后)  event. y /  zoom / 2
    计算得到 X(Y)Offset 迭代公式为:

    XOffset  XOffset  event.x /  zoom
    YOffset  YOffset  event.y /  zoom
   然后修改缩放系数, zoom  zoom / 2




   最后设置视区对象的参数:

   Viewplane _ rect  [ XOffset ,YOffset , Xsize * zoom,Ysize * zoom]

      点击式定位

   这是 ENVI 软件主要的定位方式,不通过拖拽的方式漫游,而是使用鹰眼窗
口和细微窗口来实现 3 种尺度的影像观察。ScrollWindow 隔 N 行 ( N                      1) 采样成
影像全貌(鹰眼窗口),ImageWindow 显示 Scroll 窗口的感兴趣区域,不用将整个
影像读取到内存,ZoomWindow 显示 ImageWindow 的感兴趣区域,不用重新读
取影像,直接设置新的 Viewplane _ rect 就可以,数据源是一样的。如图 3-7。

3.1.2.5 总结


   以上四个小节分别介绍了采用 IDL 进行用户图形界面的定制、事件响应机
制、遥感影像的显示和人机交互的特性,剩下的难点——遥感影像读取则通过调


                                    32
中国科学院遥感应用研究所硕士学位论文           第三章 IDL 和 ENVI 二次开发技术



用 ENVI 二次开发包的函数来完成。




图 3-7(a) 软件屏幕截图,本研究实现的用于定位的鹰眼窗口,红色方框为用户感兴趣区域。




 图 3-7(b) 软件屏幕截图,本研究实现的影像窗口,放大显示上图红色方框的内容。


                      33
        论文题目: 基于 IDL 和 ENVI 二次开发技术的遥感软件系统开发方法与开发实例研究



3.2 ENVI 二次开发

    ENVI 是使用 IDL 开发出来的软件,ENVI 的二次开发函数包对 IDL 进行了
很大程度的封装,ENVI_OPEN_FILE 和 ENVI_READ_DATA 等通用的函数就可
以完成各种格式的影像读写,还支持分块读取和处理以提高效率和节约内存。

3.2.1 ENVI 二次开发方式


    ENVI 二次开发的方式有两种,               和
                    一种简单的方法是修改系统菜单。 ERDAS
一样,ENVI 软件的系统菜单也是由文本文件(扩展名为 men)来描述的,位于系
统根目录“ENVI\menu\envi.men”,用户可以根据需要进行修改和定制。使用这
种方法还可以汉化 ENVI 软件的英文界面。一个典型的 ENVI 系统菜单描述文件
有如下内容:

0 {File}
   1 {Create New Vector Layer...} {new vector layer} {disp_event}
   1 {Save As Display Group...} {output display group} {disp_event} {separator}
   1 {Restore Display Group...} {restore display group} {disp_event}
   1 {Save Image As} {separator}
      2 {Postscript File...} {output postscript} {disp_event}
          2 {Image File...} {output image file} {disp_event}

每一行的菜单有如下的结构:
      菜单等级 {按钮名称} [{用户名} {处理事件名}] [{separator}]

    处理的事件也是由IDL语言编写的文件,这些文件放在ENVI系统根目录的
add_save文件夹下,以混合模式启动ENVI的时候(即以ENVI+IDL的方式),该文
件夹下的所有文件都会自动被编译,用户可以像使用ENVI内置的功能一样使用
扩展后的菜单的各个选项,如果能使用ENVI提供的各个小部件(见3.2.2节),使用
这种方式扩展用户菜单形成的新的ENVI系统可以和原系统无缝结合。

    在这种开发方式中,常用的做法是用 IDL 开发小的应用程序模块,然后修
改 men 文件以扩展系统菜单加以调用,相应的 IDL 程序模块的源文件则拷贝到
ENVI 系统根目录的 add_save 文件夹下就可以了。扩展系统菜单可以使 ENVI 软
件具有自己的特色。为了节约程序员的工作量,ENVI 提供了一些小部件以完成
和用户交互[57],它们非常类似于 Windows 程序设计中的公共对话框。开发人员
可以自己调用这些小部件,使程序保持界面风格和 ENVI 软件上的一致性。如,
中国科学院遥感卫星地面站的王黎明等采用这种开发方式实现遥感影像大气与

                                        34
中国科学院遥感应用研究所硕士学位论文                    第三章 IDL 和 ENVI 二次开发技术



地形校正并扩展了 ENVI 菜单[55]。图 3-8 是一个被扩展了的 ENVI 菜单。




                图 3-8   扩展后的 ENVI 系统菜单

  第二种开发方式,是用 IDL 设计图形用户界面和开发完整的应用程序,在
程序的开始调用运行两条语句,通知系统接下来的代码要调用 ENVI 二次开发包
中的函数,
  envi, /restore_base_save_files
  envi_batch_init

  但是也正是由于这两句代码使得应用程序在部署和运行的时候需要预先安
装 ENVI 软件,但是并不需要运行 ENVI 软件。涉及到复杂的遥感影像读取时,
将 ENVI 核心函数调入内存来实现对 ENVI 二次开发包函数的调用,在一个
session 结束时调用 envi_batch_exit 语句结束对 ENVI 二次开发包的调用。

3.2.2 ENVI 二次开发的辅助特性


  使用 ENVI 二次开发的最主要目的是完成遥感影像的读取,ENVI 二次开发
包包含遥感影像读取的函数 ENVI_OPEN_FILE 和 ENVI_READ_DATA 等,主流
卫星的遥感影像都可以使用它们分波段,甚至是以缩放的形式读取。

  利用 ENVI 二次开发的通用小部件[58],实现和 ENVI 软件系统界面风格的一
致性。这些部件大多以 WIDGET_开头。

WIDGET_SSLIDER, 一个使用滑块设置数字值的复合部件。如图 3-9(a)。




                    图 3-9(a) 软件屏幕截图


WIDGET_STRING,用于输入字符串的复合部件。如图 3-9(b)。




                            35
    论文题目: 基于 IDL 和 ENVI 二次开发技术的遥感软件系统开发方法与开发实例研究




                  图 3-9(b) 软件屏幕截图


WIDGET_RGB,用于修改 RGB 颜色值的复合部件。如图 3-9(c)。




                  图 3-9(c) 软件屏幕截图


WIDGET_PARAM,用于输入数字参数。如图 3-9(d)。




                  图 3-9(d) 软件屏幕截图


ENVI 二次开发提供的精度条模块。如图 3-9(e)。




                  图 3-9(e) 软件屏幕截图


                         36
中国科学院遥感应用研究所硕士学位论文          第三章 IDL 和 ENVI 二次开发技术


  ENVI 二次开发包有很多这样实用的小部件,这里就不一一介绍了。




3.3 总结

  利用 IDL 语言的 GUI 特性、图形对象系统,辅助以 ENVI 二次开发包提供
的影像读写函数,我们可以开发出功能全面的遥感应用软件系统。本研究主要完
成系统初期设计和编写可视化公共模块以实现软件复用和以后的扩展。为了测试
和应用构建的公共模块,本研究继承派生了公共模块来实现特殊的人机交互逻
辑,并实现了两个遥感的基础应用。




                     37
      论文题目: 基于 IDL 和 ENVI 二次开发技术的遥感软件系统开发方法与开发实例研究




      第四章 两个遥感基本应用——几何纠正和监督分类

  本系统要完成的基础应用功能包括点对点几何精纠正和遥感影像的监督分
类算法,其中监督分类算法有很多种,本研究也没有一一编程实现。本章着重从
程序开发的角度讨论重采样算法和监督分类的最短距离算法。


4.1 点对点几何精纠正算法


  我们从编程的角度研究和剖析灰度重采样算法的一些细节,这在大多数遥感
导论的教科书上被忽略。比如:如何确定结果图像的分辨率,如何确定结果图像
的尺寸等。

  几何精纠正是基于多项式模型的,在确定同名点之后,要根据各个 GCP 在
图像上的象元坐标(x,y)和参考影像的大地坐标(X,Y)建立多项式关系。由于遥
感器在采样的时候,出现传感器 3 个自由度的变化,初始影像出现平移、倾斜和
旋转,所以多项式模型中要出现 X 和 Y 的交叉项,其数学原型为:
       N    N
   x   aij X iY j
      i 0 j 0
        N N
   y   bij X iY j
       i 0 j 0

  其中 aij 和 bij 是多项式系数,N 是多项式次数,在本研究中 N 一般等于 2。
系数的确定一般采用最小二乘法回归求得,              和
                   该算法在 IDL 已经内置, MATLAB
类似,编程人员不需要额外再编写代码来实现最小二乘法了。

  在实际的实现中,不仅需要使用从参考影像到纠正后影像的坐标变换,同时
也需要使用从纠正后影像到参考影像的坐标变换;前者用于确定纠正后结果影像
的几何信息,而后者是实现灰度重采样的坐标基础。下文还有讨论具体的过程。

4.1.1 灰度重采样


  灰度重采样是必须的,因为纠正以后的象元已经偏离了原来的位置,结果图
像的象元的灰度必须根据原来图像的灰度值重新设置,这是一个逐点完成的过
程。常用的重采样算法有三种:最近邻域法、双线性内插法和三次卷积法[65,66]。

     最近邻域法

                           38
中国科学院遥感应用研究所硕士学位论文                                                                   第四章 两个遥感基本应用



      象元的灰度值采用它所映射位置的最邻近输入象元的灰度值。这是一个操作
起来很简单的方法,所用时间也是最少的,但是结果图像往往不尽满意,产生锯
齿等一些不好的效果。最近邻域法又叫零阶插值法。

          双线性内插法

      二维的线性内插,它同时采用待计算灰度象元所映射位置的周围四个象元来
计算灰度。如图 4-1 所示。

value  1  u 1  v  f  i, j   1  u  vf  i, j  1  u 1  v  f  i  1, j   uvf  i  1, j  1



      从图中可以看出,采用双线性内插的结果是连续但是没有导数。




                                     图 4-1     双线性加权内插示意图

          三次卷积法

      采用象元所映射位置周围的 16 个象元作为输入计算。权重函数采用 sinc 函
数。Sinc 函数的解析式如下

                                              sin c( x)  sin( x)
                                                             x
      Sinc 函数的图像见图 4-2。




                                                       39
       论文题目: 基于 IDL 和 ENVI 二次开发技术的遥感软件系统开发方法与开发实例研究




                          图 4-2         Sinc 函数

   Sinc 函数是一个高度震荡的函数,而且在 x 的绝对值大于 2 的时候 sinc 函
数的值就基本上接近零了。所以在实际的使用过程中常使用下面的三次多项式函
数来分段拟合:

                  1 2 u  u                       u 1
                          2     3



S u             4 8 u  5 u  u
                                    2        3

                                                 1 u  2
                    0                              u 2

   其中 u 为计算点所对应映射点与输入图像周围领域点的距离。




                        图 4-3   三次卷积示意图




                                        40
中国科学院遥感应用研究所硕士学位论文                                      第四章 两个遥感基本应用



     计算时候使用拟合多项式计算的权重对周围 16 点的象元灰度进行加权计
算,具体公式如下:

f  x, y   AgBgC

   S 1  v  
                   T

              
  S v  
A            
   S 1  v  
   S  2  v 
              

   i  1, j  1 i  1, j i  1, j  1 i  1, j  2 
   i, j  1       i, j     i, j  1     i, j  2 
B                                                 
   i  1, j  1 i  1, j i  1, j  1 i  1, j  2 
                                                   
  i  2, j  1 i  2, j i  2, j  1 i  2, j  2 

   S 1  u  
                   T

              
  S u  
C            
   S 1  u  
   S  2  u 
              

4.1.2 算法实现


     本研究在视图类的基础上派生出一个专用于编辑 GCP 的子视图类(详见第五
章)。一般的教科书和文献在阐述点对点几何精纠正的时候,常常将重点放在灰
度重采样算法上,而忽略了其他环节,比如如何确定重采样后遥感影像的尺寸大
小等等,编程人员有时候仍然觉得不够具体,本研究总结算法的流程,如图 4-4
所示。坐标的正推(从参考影像到结果影像)和反推(从结果影像到参考影像)采用
的都是基于多项式的最小二乘法。

     坐标正推用于计算出结果影像的大地坐标范围。纠正后的结果影像可能在输
入影像的基础上出现了倾斜和扭曲,所以大地坐标的范围必须取所有象元的最大
最小值来获得;得到大地坐标的范围之后,计算其 X 和 Y 方向的差值,计算结
果除以几何分辨率就可以得到纠正后的输出影像的象元尺寸;然后分波段,逐一
象元进行灰度重采样,为待输出影像的灰度矩阵赋值,这时需要用到坐标的反推
系数。如果待纠正影像有几何分辨率信息,则纠正后的输出影像的几何分辨率便
与之相同,如果没有,则纠正后的输出影像的几何分辨率需要采用参考影像的几

                                              41
   论文题目: 基于 IDL 和 ENVI 二次开发技术的遥感软件系统开发方法与开发实例研究



何分辨率。



             绘制同名点,确定最小二乘的系数

                (包括正推系数和反推系数)




          坐标正推计算结果图像的大地坐标范围




         根据坐标范围和结果图像的分辨率(一般和
         参考影像分辨率相同)计算结果图像的尺寸




         坐标反推计算结果影像像元在参考影像中
                      像元位置




         根据像元位置采用某种方法进行灰度重采
             样,为结果影像每个像元赋值。


              图 4-4   点对点几何精纠正流程图

 图 4-5 为本研究实现的点对点纠正编辑器和纠正界面。图 4-6 为本研究实现
的点对点几何精纠正过程的软件截图。




                图 4-5 大地控制点编辑器

                         42
中国科学院遥感应用研究所硕士学位论文                       第四章 两个遥感基本应用




     图 4-6(a) 参考影像鹰眼窗口        图 4-6(b) 待纠正影像鹰眼窗口




            图 4-6(c) 带大地坐标和投影信息的参考影像




                         43
论文题目: 基于 IDL 和 ENVI 二次开发技术的遥感软件系统开发方法与开发实例研究




       图 4-6(d) 待纠正影像(不含大地坐标和投影信息)




      图 4-6(e) 几何精纠正结果(包含大地坐标和投影信息)


                     44
中国科学院遥感应用研究所硕士学位论文                                                 第四章 两个遥感基本应用




4.2 监督分类算法


   监督分类又称训练分类法,即用那些已经知道类别的象元的信息来对其他未
知类别的象元进行逐一分类[67]。

4.2.1 分类方法


      平行算法

   又称为盒式决策原则,根据训练样本的亮度范围形成一个多维数据的空间,
在特征空间中是一个个类别的矩形(包络矩形),其他象元的光谱值如果落在某类
的亮度值所对应的区域就被划分到对应的类别中。

      最小距离法

   计算各个类别的在各个波段的平均值,根据象元与各个类别的均值的距离大
小来计算其类别。

   这里的距离是广义距离,比较常用的有

   (1) 欧氏距离
                                               p
                       d ( x, Ck )        (x  C
                                             i 1
                                                    i   ik   )2

   (2) 绝对距离
                                             p
                         d ( x, Ck )   ( xi  Cik )
                                         i 1

   (3) 马氏距离

                d ( x, Ck )  ( x  Ck )T cov(Ck ) 1 ( x  Ck )

   (4) 明斯基距离
                                         p
                       d ( x, Ck )  ( xi  Cik )1/ q
                                                        q

                                        i 1

   (5) 最大绝对距离

                       d ( x, Ck )  max x  Ck
                                       1 k  p




                                   45
         论文题目: 基于 IDL 和 ENVI 二次开发技术的遥感软件系统开发方法与开发实例研究



         最大似然法

     平行算法和最小距离法都没有考虑到各类别在不同波段上的内部方差,有时
候平行算法的各个类别的包络矩形相互重叠;使用最短距离方法时,某象元离某
类的中心距离短,但是该类的内部方差很大,则将该象元划分为该类并不是很科
学。马氏距离在一定程度上缓解了这个问题。

     最大似然法是采用一个有效的决策原则来决定 C 更相似与类别 A 或类别 B。

     最常使用的是贝叶斯分类器,它基于著名的贝叶斯公式[68]:
                   p ( x | C i )gp (Ci )      p ( x | Ci )gp (Ci )
  p (Ci | x)                            
                           p( x)              p( x | Ci )gp(Ci )
                                              i
     贝叶斯分类器将每个训练样本分解成一个 N 维的特征向量和决策类别变量
C ,并且假设特征向量的各分为之间是互相独立的。

     假设待分类象元在 N 个波段的值分别是 {x1 , x2 ,......xN } ,类别变量 C 有 N 个
不同的取值 {C1 , C2 ,......CN } ,则有:

     由于 p (Ci ) 与 p( x) 和类别是无关的,所以为了比较 p (Ci | x ) 的大小实际上就
是 p ( x | Ck ) 的大小,根据独立型假设,得到:
                                                  N
  p( x | Ck )  p( x1 , x2 ,.....xN | Ck )   p( xi | Ck )
                                                  i 1

     这样,后验概率的比较转化成了先验概率的比较。
           S
  p (Ck )  k
              S

                   Ski
  p( xi | Ck ) 
                         Sk
     其中 S 是训练区样本的总数目, S k 是数据类别 K 的样本的数目, S ki 是样本
训练区中向量值为待分类的象元波段向量且为类别 K 的样本数目。

4.2.2 最短距离算法实现


     本研究重点实现训练区的选取和编辑流程,这是一个人机交互较为复杂的操
作。在分类算法上则采用了简单的最短距离分类法。本研究实现的分类前人机交
互操作可以使用在任何一种监督分类的样本训练过程当中,不同的是只是后台的
分类处理算法,这些算法可以在以后系统扩展的时候加以实现。本研究在视图基
类 CView 的基础上派生出一个专用于编辑分类训练区的视图子类(详见下一章)。

                                                         46
中国科学院遥感应用研究所硕士学位论文                            第四章 两个遥感基本应用



  IDL 语言对 shape 格式的文件的读写提供了支持,在这里我们采用多边形类
别的 shape 文件存储用于分类的训练区,文件的属性表格存储类别信息。IDL
提供的 IDLffShape 对象可以创建不同类型的 shape 文件,这里只使用了 polygon
类型,也可以使用 IDLffShape 对象的成员函数添加属性表。本研究中属性表中
使用一个关键字段记录该 polygon 对应的类别,使得分类信息也可以在 ArcView
等软件中编辑,可以根据需要更改某个图斑所属的类别。如图 4-7 所示。




          图 4-7(a) ArcView 中打开存储分类 ROI 的 shape 文件




          图 4-7(b) ArcView 中打开存储分类 ROI 的 table 文件



                            47
    论文题目: 基于 IDL 和 ENVI 二次开发技术的遥感软件系统开发方法与开发实例研究




              第五章 系统的设计与实现

  “遥感技术应用系统”是以多传感器、多时相遥感卫星影像数据为主要数据
源的遥感应用软件。它以 Windows 9x/Me/2000/XP/2003 操作系统为平台,采用
数据交互语言(IDL)和 ENVI 二次开发技术研发。该系统设计合理、界面友好,
秉承 ENVI 软件的界面风格,实现了传统遥感影像处理功能,包括影像的几何配
准和监督分类,还拟集成遥感影像模拟、植被遥感反演以及全球变化遥感等功能
模块。“遥感技术应用系统”提供了可视化可重用的公共模块,方便科研人员在
此基础上快速搭建图形用户界面并实现新的应用功能。该系统将集成中国科学院
遥感应用研究所全球变化研究室的科研成果和图像处理算法。


5.1 系统总体设计


  “遥感技术应用系统”的软件结构模块和功能如图 5-1 所示。



                     遥感技术应用系统




         遥      影      遥        植    遥      全
         感      像      感        被    感      球
         影      几      影        遥    影      变
         像      何      像        感    像      化
         浏      配      分        反    模      遥
         览      准      类        演    拟      感




              图 5-1 “遥感技术应用系统”软件模块



  本研究实现了基础而重要的影像读取、显示、定位、漫游和彩色合成等功能,
因为这些是所有遥感可视化应用的基础。几何纠正和监督分类也是离不开和图像
直接打交道的,本研究将共性的东西抽取出来,封装成可视化公共模块。该公共
模块包括彩色合成栏,三个尺度的浏览窗口(即鹰眼窗口 ScrollView,影像主窗口
ImageView 和细微窗口 ZoomView)以及影像文件元数据信息显示框。公共视图类


                           48
中国科学院遥感应用研究所硕士学位论文                   第五章 系统的设计与实现



的主要功能包括这三个窗口的渲染,鼠标事件的响应以及文件基本属性(元数据)
信息的显示等。

  在公共模块基础上,本研究还实现两个遥感基础应用,它们具有各自的人机
交互逻辑。几何精纠正需要绘制大地控制点,这需要增加相应的鼠标响应;同样
的,监督分类中感兴趣区域的编辑也需要有不同的鼠标事件。几何纠正和监督分
类中涉及到的影像显示和定位等部分又是公共的,需要抽象出来;所以本研究在
公共类的基础上派生出两个视图子类,重载父类的部分函数同时也引入了新的特
性,如图 5-2。父类还可以派生出其它子类以扩展出新的应用,两个视图子类也
可以用在其它的应用场合。




            图 5-2   系统可视化公共类的继承家谱图

                        49
     论文题目: 基于 IDL 和 ENVI 二次开发技术的遥感软件系统开发方法与开发实例研究



  从上图中可以看出,CView 作为一个重要的基类封装了遥感数据文件的打
开、定位、漫游和彩色合成等公共功能,还提供了一个接口函数 Get 输出该类实
例化对象的一些属性信息,如目前鼠标所在位置的大地坐标和数据文件的存储路
径等等,这对于后继的扩展开发是十分有好处的,这些特性也在它的子类中得到
了继承。

5.2 系统的 MVC 结构


  MVC 是三个英文单词的缩写,这三个英文单词分别是 Model、View 和
Controller,MVC 作为一个设计模式,已经广泛地被使用在应用程序开发当中。
MVC 架构将复杂的应用进行逻辑分层,通常是将数据和显示以及操作进行分层,
其实类的面向对象思想就是将数据和处理数据的操作分别表示为类的属性和方
法。MVC 的三个逻辑层都有自己的任务,层与层之间建立联系[69,70,71,72]。

  模型(Model)是业务逻辑层,它用于管理应用程序的行为和数据,并相应来
自视图的请求与控制器发出的状态更改的命令。在该层中常常采用面向对象的思
路将问题抽象成为应用程序对象,封装其属性和所隐含的应用逻辑。

  视图(View)是显示层,它是模型的外在表现,一个模型可以对应一个或多个
视图。视图应该具有与外界交互的工程,成为应用程序和用户的接口,这种交互
即为模型提供输入,同时也要将模型内部数据的变化显示出来。

  控制器(Controller)是将 Model 和 View 层链接的纽带。通过提取视图传递进
来的外部信息,将其转化成为模型可以操作的内部事件。

  MVC 适用于大型的图形用户界面软件开发,比如,MVC 在 J2EE 的 Web 应
用开发和电子商务中得到了广泛使用和考验,微软著名的 MFC 中使用的文档-
视图结构也是 MVC 架构的一个变体。它设计为将数据存储为文档类的成员变量,
而关于显示等操作则封装在视图类中。一个文档可以对应多个视图,使得同一份
数据可以在不同的视图中显示(几何图、统计图、表、列表等)。文档类和视图类
的成员函数可以互相获得对方的指针。用户子视图在绘图的时候,可以利用自己
的成员函数获得文档类的成员变量——要绘制的对象,而文档类在计算和处理从
而导致相应的数据发生变化的时候,也可以调用自己的成员函数对所有与之绑定
的视图发生重绘操作。这种分层的结构使得基于图形用户界面的应用程序的并行
开发与维护变得更加容易和高效。图 5-3 是 MVC 架构的层次序列图。

                          50
中国科学院遥感应用研究所硕士学位论文                         第五章 系统的设计与实现




                  图 5-3   MVC 层次序列图(UML)

   本研究采用 MVC 架构的思想对“遥感技术应用系统”进行设计。

   View 层采用 IDL 的 GUI 功能,使用 IDL 的对象图形系统和面向对象的特性
进 行 抽象和封装,实 现为上文提到的 CView 视图基类和 用于 基础应用的
CWarpView 和 CClassifyView 两个视图子类;

   Controller 层实现在单独的类中,我们将工作在 Controller 层的类的实例化对
象变量设计为工作在 View 层的视图类对象的成员变量。如,在监督分类的视图
类中,本研究实现了 CRegionOfInterest 类,这是一个专门根据用户操作而对 ROI
数据进行编辑的类。该类的实例化变量 m_roi 就是 CClassifyView 类的成员变量。

   Model 层封装了第四章提到的两个数据处理算法,分别用单独的函数实现其
核心内容,而这些函数也可以实现在单独的类中。

   图 5-4 是“遥感技术应用系统”的 MVC 逻辑关系图。




                              51
      论文题目: 基于 IDL 和 ENVI 二次开发技术的遥感软件系统开发方法与开发实例研究




         两个算法(模型
                                                  CView
         层),使用独立的
                                                CWarpView
         函数实现
                                               CClassiView
                                                (视图层)

                            CView 接口函数
                         CRegionofInterest 类
                             (控制器层)




              图 5-4   “遥感技术应用系统”的 MVC 结构图


5.3 系统安装和环境

5.2.1 系统安装


   “遥感技术应用系统”是在 Windows 环境下运行的遥感数据处理系统,可
以在 Windows9X/Me/2000/XP/2003 等操作系统平台上运行。系统无需安装,直
接双击文件夹内的 Application_System_Of_Remote_Sensing.prj 即可运行。



5.2.2 运行环境


   操作系统:Microsoft Windows 9X/Me/2000/XP/2003 等环境;

   平台软件:安装 ENVI 4.3 平台软件(Environment for Visualizing Images)

   屏幕分辨率:1024*768 或更高。

   合适配置:PENTIUM IV 2.4GMHZ 512M 内部存贮器           80G 硬盘



5.2.3 系统特性和其他


   “遥感技术应用系统”采用数据交互语言(IDL)和 ENVI 二次开发技术研发,
支持 ENVI 软件支持的所有遥感影像数据格式。包括 BMP、GIF、HDF、ArcView

                               52
中国科学院遥感应用研究所硕士学位论文                                   第五章 系统的设计与实现



Raster (.bil)、ECW、ERDAS IMAGINE、ER Mapper、ESRI GRID、PCI (.pix)、
ASCII、HDF、JPEG、JPEG2000、MrSID、PDS、PICT、PNG、SRF、TIFF/GEOTIFF、
TIFF world files(.tfw)、XWD 等,支持包括 INKONOS、EOS-MODIS、IRS、
LANDSAT Series 、 SPOT 、 CBERS 、 ENVISAT 、 QUICKBIRD 、 Flat Binary
Formats(BSQ, BIL, BIP)等遥感卫星的数据影像2。


5.4 系统运行


       “遥感技术应用系统”支持扩展开发,提供可重用的封装模块,方便使用者
在其基础上快速搭建图形用户界面(GUI)和人机交互,可供科研人员继续开发应
用程序和系统。

       系统主界面包括遥感影像浏览、影像纠正配准、遥感影像分类、遥感影像模
拟、植被遥感反演、全球变化遥感、系统说明和退出系统等八个功能模块,点击
它们就可以进入其对应的菜单子功能选项,用户可以选择需要的功能,如图 5-5
所示。




                            图 5-5 “遥感技术应用系统”主界面

       其中子菜单如图 5-6 所示。图 5-7 是系统几个已经实现的初始功能的界面截
图。




                                  图 5-6 部分子菜单(可扩展)



2
    引自 ENVI help Documentation。

                                        53
论文题目: 基于 IDL 和 ENVI 二次开发技术的遥感软件系统开发方法与开发实例研究




              图 5-7(a) 遥感影像浏览器




            图 5-7(b) 影像浏览器的鹰眼窗口




                     54
中国科学院遥感应用研究所硕士学位论文                  第五章 系统的设计与实现




               图 5-7(c) 波段运算公式编辑器




                       55
     论文题目: 基于 IDL 和 ENVI 二次开发技术的遥感软件系统开发方法与开发实例研究




                  第六章 总结与展望


6.1 主要结论


   因为研究课题项目的需要,为了实现各种遥感应用的系统集成,本文完成了
基于统一语言和开发平台的遥感应用软件开发的研究工作。本文着重研究了遥感
应用软件的几种主流开发平台和方式,并对比各自的优缺点。在实际的情况中,
作者根据待开发遥感系统的大众化开发和可扩展性的需求,采用 IDL 语言和
ENVI 二次开发技术相结合的方法作为最终的开发方式。系统目前的开发成果成
功地说明了这种开发方式完全可以胜任一个遥感应用软件系统的开发。

   本文详细地分析和讨论了 IDL+ENVI 开发平台的主要特性和用以完成遥感
应用软件系统开发的关键技术,并开展如下工作:

1) 设计和实现可视化公共模块和类,并提供数据输出查询接口。公共模块的功
  能在于遥感影像的读取、显示、鹰眼定位、漫游和彩色合成等基础功能;其
  中遥感影像的读取使用 ENVI 二次开发包中的图像读取函数,其余功能均由
  笔者自己编写 IDL 代码实现。

2) 在此基础上,本研究秉承 MVC 架构的思想,设计图形用户界面,继承公共
  类,派生出用于几何精纠正和监督分类等特定逻辑的视图子类,完成系统的
  人机交互,为后继的开发可能用到的人机交互奠定了重要保障;这些视图类
  将大大简化后期开发人员在实现相关或其他人机交互逻辑的琐碎工作。

3) 本研究从编程的角度,研究和实现了几何精纠正的重采样算法和监督分类的
  最短距离算法,为系统添加了两个遥感的基础应用。

4) 本研究完成系统初期开发成果,提供源程序和详细的程序注释,并撰写了系
  统结构文档,方便后期开发人员阅读和继续开展工作。


6.2 展望

6.2.1 扩展开发


                          56
 中国科学院遥感应用研究所硕士学位论文                     第六章 总结与展望



    系统的的点对点几何精纠正和监督分类是每个遥感软件的必备功能,也是很
 多遥感应用数据预处理部分的重要环节,所以它们的实现是必须的。而系统的特
 色部分正是需要将来后继的科研人员秉着一个系统开发的思想进行逐步实现和
 完善。本研究实现的可视化公共模块可以通过.pro 源代码的形式复用在以后的二
 次开发中;IDL 语言提供了 save 命令,将类(公共模块)定义和实现打包成二进制
 的.sav 文件的形式以重用。这个 sav 文件有点类似于 Windows 操作系统下的动态
 库链接文件,在以后的二次开发中,只需要 restore 这个 sav 文件就可以了。本
 研究已经将可视化的视图基类 CView 的源代码打包成 CView.sav 文件,具体的使
 用方式如下:

   1. 建立一个新的工程 demo.prj;

   2. 添加文件 CView.sav 到当前工程中;

   3. 添加一个新文件 demo.pro,并添加到当前工程中。输入如下内容,如图
6-1 所示:




                   图 6-1 扩展开发源代码

    这个实例是很短小的,但是运行起来的程序已经具备了遥感软件的很多基本
 操作。运行这个工程,如图 6-2 所示。在这个示例中,关键在于主程序实例化了
 CView 基类,得到对象变量 my_demo。然后调用该类的成员函数 ProcessFile 来

                           57
    论文题目: 基于 IDL 和 ENVI 二次开发技术的遥感软件系统开发方法与开发实例研究



打开与显示遥感影像数据文件。使用这种方式可以并行开发,CView.sav 的使用
者甚至可以不需要知道 CView 类中的成员函数是如何实现的。CView 类提供了
类属性数据输出接口函数,科研人员可以使用该类实例化对象的 Get 成员函数来
得到鼠标所在位置的坐标和象元灰度等信息,使得他们容易继续开展工作。

  举一个例子,比如,以后的开发人员想实现一个高光谱遥感的曲线绘制功能,
该功能拟设计为能够根据鼠标指定点的多波段灰度数据而绘制出一条光谱曲线。
根据本研究的讨论和实现的成果,CView 类将大大减少此功能开发的工作量。我
们还可以将这种功能在 CView 视图类的基础上派生,然后添加新的鼠标响应事
件(即单击鼠标时,系统绘制光谱曲线),并封装为一个新的视图子类供其他人使
用以开发更加高级和复杂的功能。




                  图 6-2(a) 软件屏幕截图




                         58
中国科学院遥感应用研究所硕士学位论文                 第六章 总结与展望




                 图 6-2(b) 软件屏幕截图


6.2.2 系统展望


   目前系统的前期工作已经结束,系统开发的主要成果是可视化公共模块和两
个遥感基础功能的实现,在实现的过程中同时也对系统的可视化公共模块中的视
图类进行了测试和修改。然而点对点几何精纠正和监督分类毕竟是遥感系统的基
本功能,本研究在实现上也是采用了传统的算法,使得这个系统目前缺乏自身的
特色。现在全球变化研究课题组已经开始使用本研究实现的可视化公共模块来构
建他们的遥感应用,这才是该系统真正有特色的部分,随着研究的深入,相信该
系统会随着后人研究成果的开展而逐渐得到扩充和完善。




                       59
         论文题目: 基于 IDL 和 ENVI 二次开发技术的遥感软件系统开发方法与开发实例研究




                                       参考文献

[1] 蒋耿明 MODIS数据基础处理方法研究和软件实现[D]
[2] 陈方 遥感图像光谱细分方法与模拟实现技术[D]
[3] 李世华 基于数据-模型融合方法植被初级生产力遥感监测研究[D]
[4] JinguoYuan,Zheng Niu,etc, Model simulation for sensitivity of hyperspectral indices to
LAI,leaf chlorophyll and internal structure parameter[J], Proceedings of SPIE---Volume 6752,
Geoinformatics 2007: Remotely Sensed Data and Information, 675213,(EI)
[5] 董晶晶,牛铮,沈艳 利用反射光谱信息提取叶片水分含量的方法比较[J] 江西农业大学学
报,2006,28(4):587-591
[6] Li Wang,Zheng NIu,Application of IKONOS image and BP model to evaluate in potential of
urban land intensive use [J], Geoinformatics,2006,wuhan 28-29 October
[7] 吴朝阳,牛铮,汤泉. 叶片光化学植被指数 (PRI) 的修正及其敏感性分析[J] 光谱学与光
谱分析,2007
[8] http://www.remotesensing.com.cn (北京国遥万维信息技术有限公司)
[9] http://www.otitan.com (北京东方泰坦科技技术有限公司)
[10] http://www.image-info.com (中国测绘科学研究院北京四通空间数码科技有限公司)
[11] http://www.geoway.com.cn (北京吉威数源信息技术有限公司)
[12] 胡兴堂,张兵,李俊生等. 面向应用的海量高光谱影像处理与分析系统集成与实践[J],遥
感学报,2005,9(5):604~609
[13] http://www.ccgcit.com/gsjx-4.htm (HIPAS V1.0获科技部优秀软件)
[14] http://www.ccgcit.com/gsjx-1.htm (水环境遥感监测系统V1.0获“863”专家组好评)
[15] http://www.chinageog.com/html/tabloid/GIS/20070508/24185.html (我国地理信息系统遥感
软件产业化跃上新台阶)
[16] http://www.ittvis.com/index.asp (ENVI官方站点)
[17] http://gi.Leica-geosystems.com/LGISub1x33x0.aspx (ERDAS官方站点)
[18] http://www.pcigeomatics.com/ (PCI GEOMATICS官方站点)
[19] ER Mapper User Guide ER Mapper User Guide Maintenance Release 7.01
[20] http://ermapper.com/ (ER-MAPPER官方站点)
[21] http://www.google.com
[22] 童庆禧,张兵,郑兰芬. 高光谱遥感——原理技术与应用[M],高等教育出版社
[13] 刘光 GIS二次开发教程——组件篇[M],清华大学出版社,2004,
[24] 李连营,李清泉,李汉武. 基于mapx的GIS应用开发[M], 武汉大学出版社, 2004
[25] http://www.gdal.org
[26] http://trac.osgeo.org/gdal/wiki/SoftwareUsingGdal
[27] http://java.sun.com/products/java-media/jai/README-1_1_1.html
[28] ERDAS Macro Language Reference Manual
[29] MAGINE Developers’ Toolkit White Paper
[30] 刘俊杰,贾永红,柯美忠. Erdas Imagine二次开发与客户化方法研究[J], 地理空间信息
Vol.1,No.4,2003
[31] 党安荣,王晓栋,陈晓峰等. ERDAS IMAGINE遥感图象处理方法[M], 清华大学人居环境

                                            60
中国科学院遥感应用研究所硕士学位论文                                                     参考文献


研究中心,2002年2月,
[32] 谢华美,何启翱,郑宁等. 基于ERDAS二次开发的遥感图像同态滤波薄云去除算法的改
进[J], 北京师范大学学报(自然科学版),2005, 41(2):150~153
[33] 赵玉灵,杨金中,和正民等. 基于ERDAS地质信息提取功能的设计与实现[J]遥感信息—
—应用技术,2005,2:36~38
[34] 刘清旺,武红敢,石进等. 基于TM影像的森林病虫灾害遥感监测系统[J], 遥感信息——
遥感应用,2007,2:46~49
[35] 张维胜,赵革,王超等. 基于ERDAS的三维虚拟地理环境开发方法研究[J], 测绘技术装
备,2005,7(3):6~8
[36] 地物波谱数据的管理及其与ERDAS Image8.4的集成应用——"地质调查遥感信息处理
分析系统"中"波谱分析模块"的开发与应用[K]
[37] 阎殿武. IDL可视化入门与提高[M], 机械工业出版社,2003
[38] 聂斌,胡东梅,张琳等. IDL及其在医学影像处理中的应用[J], 中国中西医结合影像学杂
志, Vol.6,No.2,2005
[39] 赵志强,郑小林,王星等. 基于IDL的医学数字影像处理技术初探[J], 中国医学影像技术,
Vol.21,No.11,2005
[40] 韩 培 友 基 于 IDL 的 医 学 图 像 三 维 可 视 化 系 统 设 计 与 实 现 [J], 计 算 机 工 程 ,
2007,33(6):265~267
[41] 汤乐民,王娟,李敏等. 利用交互式数据语言处理医学数字图像的初步研究[J], 中国临床
康复,2006,10(41):84~87
[42] 朱 思 蓉 , 叶 芳 毅 , 王 汉 东 等 . 基 于 ION Java 的 三 维 网 络 可 视 化 初 探 [J], 人 民 长 江 ,
2007,38(10):36~38
[43] http://www.imagetekinfo.com/index_idl,asp?str=IDL_who
[44] 李春升,燕英,陈杰等. 基于IDL的SAR图像处理及质量评估系统[J], 2000,通讯与电视
[45] 于志强,杨杰,胡英等. 基于IDL语言的水声声场数据可视化的设计与实现[J], 红外与激
光工程,2001,30(5):336~339
[46] 刘建平 高光谱遥感数据处理分析软件系统设计与实现[D],2001
[47] 李玉芳,朱希安,曾茂华等. IDL及其在煤田地震数据可视化中的应用[J], 煤炭科学技
术,2002,30(9):35~37
[48] 吉长东 基于IDL的城市小区景观VGIS平台研究与实现[D],2002
[49] 黄建波,张杰,宋平舰等. HY-1卫星CCD遥感器海岸带动态监测应用示范系统开发[J] 海
洋科学进展,2003,21 (3):342~348
[50] 何全军,程彬,许惠平. 基于IDL的地形三维可视化实现[J], 世界地质, Vol.23,No.1,2004
[51] 李安虎,周玉斌,刘海行等. 基于WebGIS的海洋科学数据共享平台的分析与设计[J], 海
洋科学进展,2004,22(1):85~90
[52] 张晓宇 基于网络的三维地理信息系统的设计与实现[D],2005
[53] 王宇 火力发电厂三维地理信息系统设计与实现[D],2005
[54] 霍建军,王汉东,吴想凤等. 基于IDL的三峡水久船闸三维可视化的实现[J], 地理空间信
息,2006,4(5):10~12
[55] 王黎明,田永久,王钦军. 基于IDL的遥感影像大气与地形校正方法实现[J], 计算机工程
与应用,2007,43(23):215~217
[56] 郭建文,冯敏,尚庆生等. IDL在分布式GIS系统中的应用研究[J], 计算机应用研究,
2007,24(5):220~222
[57] 阚瑷珂,杨仁怀,朱利东等. 基于IDL的考古地层空间数据挖掘研究[J], 计算机工程与应


                                      61
       论文题目: 基于 IDL 和 ENVI 二次开发技术的遥感软件系统开发方法与开发实例研究


用,2007,43(4):201~203
[58] 朱玉伟,拾兵,黄勇等. 基于IDL与VB的遥感数据提取[J]
[59] 张斌,李夕海,苏娟等. 基于IDL和Visual C++的混合编程[J],计算机工程,2005,31(8):79~81
[60] 阚 瑷 珂 , 朱利 东 , 张瑞 军 等 . 基于 IDL和 .NET的 可 视 化 程序 设 计 [J], 计 算 机 应 用研
究,2007,24(9):149~151
[61] 陈 拥 锋 . 基 于 IDL 与 C++ Builder 的 三 维 地 质 可 视 化 开 发 [J], 工 程 地 球 物 理 学
报,2007,4(4):355~359
[62] 李义才,汪新庆,刘志军等. IDL与Visual C/C++语言进行混合编程的方法研究[J], 计算机
应用研究,2001(7):46~48
[63] IDL中高级进阶——IDL高级培训教材[M]
[64] ENVI二次开发指南[M] 航天星图(北京)有限公司,2006年4月
[65] 朱志刚等译. 数字图像处理[M], 电子工业出版社, 1998, 12.2.4节
[66] 金海丁,周孝宽. 数字图像自适应插值法[J], 激光与红外, 2006, 36(9):907~910
[67] 潘建刚,赵文吉,宫辉力等. 遥感图像分类方法的研究[J], 首都师范大学学报(自然科学
版), 2004, 25(3):86~91
[68] 胡为成. 朴素贝叶斯分类器的改进[J], 铜陵学院学报, 2007(1):73~75
[69] 韩择冰. MVC模式浅析[J] 计算机与信息技术, 2007(25):57
[70] 耿 凡 娜 . MVC 设 计 模 式 在 Java 程 序 开 发 中 的 应 用 [J], 科 学 技 术 与 应 用
2007,7(16):4194~4196
[71] 张利,吴传胜,崔雷等. 应用MVC模式构建Web信息系统框架研究[J], 合肥工业大学学报
(自然科学版), 2007, 30(7):829~831
[72] http://baike.baidu.com/view/739359.htm(百度百科—MVC模式)




                                   62
中国科学院遥感应用研究所硕士学位论文                                                 附录



                               附        录




硕士期间发表论文
第一作者
 汤泉,牛铮. 基于 IDL 与 ENVI 二次开发的遥感系统开发方法研究,计算机应用,
  出版中,2008
 汤泉,牛铮. 构建Delaunay三角网的改进算法,计算机应用,2007,(27):
  158-159

第二作者
 Chaoyang Wu, Zheng Niu, Quan Tang, Wenjiang Huang. Estimating
  chlorophyll content from hyperspectral vegetation indices: Modeling and
  validation. Agrilcutral and Forest Meteorology,In press, 2008
 吴超阳,   牛铮,   汤泉. 叶片的光能利用率和光化学植被指数的相关关系研究,
  光谱与光谱学分析,出版中,2007




硕士期间参与课题
国家高技术研究发展计划(863 计划)子课题高光谱遥感作物信息提取方法研究,国
家统计遥感前沿技术研究与示范应用课题




                                   63
      论文题目: 基于 IDL 和 ENVI 二次开发技术的遥感软件系统开发方法与开发实例研究




硕士成绩单
课程名称                 分数     学分    学位课   学期
自然辩证法                  85   2.0   是     2005-2006学年(秋)第一学期
西方美术史                  90   2.0   否     2005-2006学年(秋)第一学期
硕士学位英语                 75   3.0   是     2005-2006学年(秋)第一学期
数学物理方程                 88   2.0   否     2005-2006学年(秋)第一学期
复变函数                   94   2.0   否     2005-2006学年(秋)第一学期
大脑是如何工作的:心理学简介         83   3.0   否     2005-2006学年(秋)第一学期
地理数学方法                 91   3.0   是     2005-2006学年(秋)第一学期
遥感物理                   75   3.0   是     2005-2006学年(秋)第一学期
科学社会主义理论与实践            77   1.0   是     2005-2006学年(春)第二学期
应用随机过程                 86   3.0   否     2005-2006学年(春)第二学期
全球变化科学引论               83   3.0   否     2005-2006学年(春)第二学期
大气中的波传播及遥感物理           82   3.0   是     2005-2006学年(春)第二学期
微波遥感理论与技术基础            82   3.0   是     2005-2006学年(春)第二学期
数字图像处理与分析              83   3.0   否     2005-2006学年(春)第二学期
地球信息科学进展             通过     1.0   否     2005-2006学年(夏)第三学期
定量遥感进展               通过     1.0   否     2005-2006学年(夏)第三学期
英语B(免修)                78   2.0   是     2006-2007学年(秋)第一学期


总计学分:40      其中,学位课学分:20




作者简介
   姓名:汤泉
   性别:男
   出生年月:1983 年 10 月
   籍贯:山东省济南市
   出生地:安徽省芜湖市
   本科毕业院校:中国农业大学




                            64
中国科学院遥感应用研究所硕士学位论文                  致谢




                     致        谢

  一年在玉泉路教学区的学习与生活,两年在遥感所的学习与工作,三年的美
好时光转瞬即逝。仅借硕士学习生涯即将完成之际,向所有在我人生道路上给予
我帮助和关心的人们表示最衷心的感谢!
  这篇论文的完成是与我的导师牛铮研究员的指导分不开的。整个研究和开发
工作横跨了我在遥感所的两年时光。从论文立题与研究方向的确定,到最后论文
的审阅,都凝聚了牛铮博士的心血。牛老师认真严谨的工作态度,战略型的长远
构想和幽默的谈吐给我留下了很深的印象,同时也对我以后的工作和学习态度产
生了深远的影响。在此对他表示衷心的感谢!
  感谢王长耀研究员,王老师勤奋务实的科研作风、丰富的科研阅历、活跃的
学术思想使我受益非浅。生活中也能够时时刻刻感受到王老师的平易近人,王老
师的胸怀广阔、为人宽厚,处处为学生着想,是我敬佩的长者和学者。
  感谢全球变化研究室占玉林老师和秘书王莹小姐在学习和生活上对我的帮
助。祝愿他们能白头偕老。
  感谢学生处的余琦老师、吴晓清老师和刘戈平老师为我在研究生学习和生活
方面提供的便利和热心帮助。
  感谢全球变化研究室的路鹏博士、黄文江博士,袁金国、陈方、王力、郭俊、
王莉雯、杜子涛、徐晶晶、董晶晶、覃驭楚、吴朝阳、高帅、张彦军、邬明权等
同学,能和你们共同学习与交流是我的荣幸。
  感谢吴朝阳同学,我永远不会忘记 2007 年春天一起去小汤山国家精准农业
示范中心采集数据时那份享受大自然的经历和轻松。
  感谢杜鑫同学和熊隽师兄,没有他们的帮助,我的 IDL 学习历程将更加漫长
和艰难。
  感谢遥感图像处理研究室的孟瑜师姐和王刚师兄,通过和他们的交流使我更
加了解了遥感软件系统开发平台和一些国内现状。
  感谢于君明同学提供的关于 ERDAS 的技术支持。
  感谢王子峰、孙嘉同学,玉泉路教学区一年的同寝生活给我留下了美好回忆。
同时感谢杜鑫、刘扬、吴朝阳、何丹、蔡文婷、程砾瑜和姜俊同学在硕士期间合
租房时在生活上给予我的关心和帮助。
  感谢遥感所辩论队的刘扬,杜鑫,覃剑,王子峰,方莉,李莉,孟瑜,杨丽
娜等同学。读研期间和你们在一起参加遥感所辩论队和辩论比赛提高了我在辩论
表达和逻辑思维方面的能力,2007 年暑假与你们在大连参加的第五届遥感青年
辩论比赛之旅也给我留下了一生难忘的回忆。
  感谢中国农业大学的严泰来教授,严先生对学术的一丝不苟永远是我学习的
榜样。感谢他百忙之中抽出时间帮助审阅和当面指导我修改硕士期间发表的一篇

                         65
      论文题目: 基于 IDL 和 ENVI 二次开发技术的遥感软件系统开发方法与开发实例研究


论文。
  感谢和我同甘苦共患难的妻子李婧,她善解人意,温柔体贴。每次在我遭遇
挫折的时候,她都始终如一的给予我支持和鼓励。
  最重要的人物放在最后。我要感谢我的父母,他们是我永远的精神支柱和动
力。感谢他们的养育之恩,自身的优秀品质都是继承于他们。感谢长年来他们对
我无私的关心与爱护。
  感谢我们的祖国,她是那样的繁荣和富强,她的人民是那样的团结和坚强。
在论文的最后撰写和修改的五月份里,四川省汶川县及周边地区发生了强烈的地
震,受灾人数之多,破坏程度之大,生命财产损失之严重均数历史罕见。然而在
这个过程中,我一次次地被祖国人民子弟兵的伟大,四川受灾同胞们的坚强、举
国上下乃至海外同胞的团结所感动。我为处在这样一个国家,作为这样一个伟大
民族的一员而感到骄傲和自豪。在此祝愿四川灾区早日得到顺利重建。
  最后,再一次感谢所有关心我、支持我的亲人和朋友!


                                             作者: 汤 泉
                           2008 年 5 月于北京天地科学园区遥感所




                           66

								
To top