维普资讯 http://www.cqvip.com 第34卷 第3期 计算机工程 2008年2月 11o1.34 No.3 Computer Engineering February 2008 ・软件技术与数据库・ 文章编号・loo0--l3428(2o08)03—o066—03 文献标识码・A 中啊分类号・TP311 基于设计模式的遥感图像处理平台设计与实现 马扛林,赵患明,杨建,杨俊,汪承义 (中国科学院遥感应用研究所国家遥感应用工程技术研究中心,北京100101) 擅妥:设计模式作为一种面向对象软件开发过程中针对特定问题的解决方案,已经成功应用到了多个软件的系统设计和架构中。遥感图 像软件开发是一个复杂的系统工程,其中遥感图像输入输出类库、算法类库和视窗类库是整个软件体系架构中最重要的3个部分。该文结 合遥感图像的特点,利用设计模式的思想,论述实现这些类库的过程。 关健词:设计模式;软件设计;遥感图像 Design and Implementation of Remote Sensing Image Processing Based on Design Pattern MA Jiang・lin,ZHAO Zhong・ming,YANG Jian,YANG Jun,WANG Cheng-yi (NationalEngineeringResearchCenterofGeoinformation,Institute ofRemote SensingApplications,CAS,Beijing 100101) [Abstractl Design pattern,as a smart design scheme for certain problems in object—originated software design,is successfully applied in many software projects.Remote sensing image software design and development is a complicated project,in which the remote sensing IO class design, algorihtm class design and view class design are hte most important parts.This paper elaborates how tO design the three classes for remote sensing image processing based on design patt4m. [Key wordsl design pattern;software design;remote sensing image 1设计模式的基本思想 (2)海量遥感数据的支持。对海量数据处理的支持是遥感 设计模式最重要的思想是“封装变化的概念”…。一方 图像处理软件区别于普通图像处理软件的一个重要标志。 面,设计的软件具有一定的灵活性,以适应可能的变化;另 (3)多数据类型的支持。不同类型的遥感图像其图像中表 一方面,把这种复杂性所带来的软件复杂性进行封装,为外 示每个像素数值的数据深度不同。 界提供一个简单而又稳定的访问接I:1。 (4)多投影方式的支持。遥感图像处理与普通图像处理的 为此,设计模式特别强调两个面向对象设计的原则…: 一个差异在于遥感影像中包含着地理位置信息以及投影信 (1)优先使用类组合,而不是类继承,即合成/聚合复用原 息。多投影的支持是指支持不同投影之间的转换以及相应的 则:一个新的对象里面使用一些已有的对象,使之成为新对 图像几何形状的变化。 象的一部分;新对象通过向这些对象的委派达到复用已有功 (5)繁多的图像处理算法的支持。遥感图像处理算法从功 能的目的。 能上分可以分为图像增强、复原、纠正、镶嵌、融合、压缩、 (2)针对接口编程而不是针对实现编程,即依赖倒置原 分割、分类、栅格矢量化和三维可视化等。算法是软件的灵 则:抽象不应当依赖于细节;细节应当依赖于抽象。 魂,遥感图像信息的提取,需要多个算法配合来最终实现。 设计模式的分类有不同的方法,根据目的准则,将其分 通过以上的分析可以看蓟,与普通的图像处理软件系统 为创建型、结构型和行为型。创建型模式与对象的创建有关, 相比,遥感图像处理系统数据结构复杂多变,数据来源多样, 包括工厂方法等5种模式;结构型模式处理类或对象的组合, 功能点多。如果在设计开发中不采用适当的模式来消除各种 包括组合、桥接等7种模式;行为型模式对类或对象怎样分 依赖性,会大大增加软件的开发成本和不稳定性因素。采用 配职责进行描述,包括观察者、命令等10种模式。 设计模式是开发基于面向对象的遥感图像处理软件的必由 虽然不同设计模式的设计思想是不同的,但是它们并非 之路。 都是孤立的,而是常常组合在一起,共同完成系统的设计。 3设计模式在遥摩图像处理软件开发中的应用 2遥摩图像处理的特点 图像输入输出类库、算法类库和视图类库是通用遥感图 从程序设计的角度来看,遥感图像处理程序应该具有以 像处理平台最为重要的3个部分:输入输出类库用于解决不 下特点: 同数据源的读写问题;算法类库用于解决遥感图像处理算法 (1)多种图像格式的支持以及对新图像格式的快速扩展 基金项目:国家“863”计划基金资助项目(2003AA135010) 能力。作为一款通用遥感图像处理软件,不仅要支持通用的 作者筒介:马江林(1979--),男,博士研究生,主研方向:图像处理, 图像格式和各种卫星的图像自定义的图像格式,而且还要支 模式识别;赵忠明,教授、博士生导师;杨建、杨俊、汪承义, 持各种商用遥感图像软件数据格式,对多种格式的支持是其 博士研究生 必须解决的一个关键问题。 收稿日期:2007—02—10 E-mail:majinaglin2003@gmail.com —-66一 维普资讯 http://www.cqvip.com 问题;视图类库用来解决图像的可视化和用户交互的问题。 3个类库协同工作,共同完成了遥感图像处理和信息提取的 工作。 3.1基于工厂方法模式和单态模式的图像I/O类库设计 一个好的遥感图像处理输入输出类库应满足如下标准: (1)模块化。该类应该是的,为应用提供统一的读写 接口而与具体的针对数据处理的应用无关。该类库仅负责将 图像数据从文件中读写,图像的读写功能与图像处理的算法 完全隔离。 (2)可扩展性。支持新的数据格式无须改变已经存在的代 码,因为很难预见未来会遇到什么样的图像格式。 为了满足上述标准,采用了设计模式中的工厂方法模式 进行遥感图像I/O类库的设计,如图l所示。 圈1 I/O类程圈 工厂方法模式是一种类的创建模式,其用意是定义一个 创建产品对象的工厂接口,将实际创建工作推迟到子类中。 在工厂方法模式中,核心的工厂类不再负责所有产品的创建, 而是将具体创建工作交给子类去做。这个核心类仅仅负责给 出具体工厂必须实现的接口,而不接触哪一个产品类被实例 化这种细节。这使得工厂方法模式可以允许系统在不修改工 厂角色的情况下引进新产品。工厂类与产品类往往具有平行 的等级结构,它们之间一一对应。 基于工厂方法模式的图像I/O类库由4部分组成: (1)抽象工厂。格式驱动器类对应于抽象工厂。在抽象工 厂中,定义了不同格式读写的接口。 (2)具体工厂。BMP格式类、TIF格式类、IMG格式类等 对应着具体工厂。在具体工厂中,对具体格式读写的规则进 行了定义和实现。如针对BMP格式,笔者根据BMP文件格 式的特点,对BMP格式的读写规则进行了定义,同时对BMP 格式相关的信息进行了设置。 (3)抽象产品。格式文件类是工厂模式所创建对象的超 类,代表不同图像文件的公共接口,如文件中的投影坐标系、 控制点、图像文件中波段的个数等信息。 (4)具体产品。具体产品是由具体工厂生产的,如BMP 格式类工厂负责对BMP文件的读写。BMP文件类就是具体 产品。 为了支持海量数据,数据读写部分的实现是通过格式文 件类的分块读写机制来保证的。在每个格式类中都重载了按 块读写的函数,相应的格式类根据该图像格式的特点对其进 行重载,如IMG格式是按照64X64进行分块存储的,而TIF 格式是按行存取的。 与普通图像处理不同,很多遥感图像的格式不像BMP 图像那样有.BMP后缀作为文件的标示。因此,在文件读写的 时候就存在寻找合适的格式驱动器的问题。笔者借鉴文献(2J 中的clone—factory方法,在调用图像I/O类的时候,生成一 个格式驱动器管理类,负责对所支持的图像格式类型进行管 理。为了保证程序中有唯一的格式驱动器管理类,采用了单 态设计模式。当打开一幅遥感影像图的时候,从格式驱动器 管理类对象中寻找合适的格式驱动器,创建相应的图像数据 集类。 采用工厂方法模式非常适合对新图像格式的支持而不改 动原先读写类库,为了支持一种新的图像格式,仅需要做如 下工作:(1)在格式驱动器类中根据新图像格式如头文件的大 小和结构信息,进行读写规则的定义;(2)对新图像格式文件 类中分块读写函数,进行重新定义和实现;(3)将格式驱动器 类注册到格式驱动器管理类中。 3.2基于策略模式、模板模式和外观模式的算法类库设计 从程序设计的角度看,图像处理算法可以分3个不同的 层次:(1)针对内存块的基本算法;(2)针对文件操作的基本算 法;(3)基于数据流模型的算法流程。 针对内存块的基本算法不去考虑遥感图像海量的特点, 只针对特定的数据块进行算法的设计而不去考虑数据是如何 组织放置于内存块的;针对文件操作的基本算法,考虑如何 将海量的遥感数据填充到算法所需要的内存块中以及图像附 加信息处理;针对数据流模型的算法是将基本算法组织成数 据流管道,完成复杂的算法流程。层次(1)和层次(2)是层次(3) 的基础,而层次(1)同时也是层次(2)的基础。 (1)基于策略模式的针对内存块的基本算法 基本图像处理算法根据对内存块中数据处理方式的不 同,可分为基于点处理的算法、基于临域运算的算法、基于 正交变换的算法、基于多波段的算法和基于几何变换的算法。 1)基于点运算的算法包括灰度反转、指数变换、对数变 换、线性变换、闭值变换、窗口变换、直方图均衡等。这类 算法的特点是,像素点灰度变换的规则一旦定义,运算后新 像素的值可以唯一确定。 2)基于临域运算的算法包括边缘检测、图像平滑、中值 滤波、图像腐蚀、图像膨胀等。这类算法的特点是输出的像 素值是由周围像素决定的。 3)基于正交变换的算法包括FFT、小波变换、离散余弦 变换、沃尔什变换等。这类算法的特点是需要先对行进行变 换,然后再对列进行变换。 4)基于多波段的算法包括KL变换、RGB/HIS彩色变换、 缨帽变换等。这类算法的特点是输出的像素是由该点在不同 波段上灰度值运算而获取的。 5)基于几何变换的算法包括图像平移、镜像变换、转置 变换、缩放变换和旋转变换。这类算法的特点是给出一个分 块的内存区域,返回一个新的内存分块区域。 基于上面的分析,可以看到基本图像处理算法之间的区 别仅在于它们的行为,即对某特定内存块处理策略的差异。 因此,采用了策略模式对基本算法进行设计。 策略模式的用意是针对一组算法,将每一个算法封装到 具有共同接口的的类中,从而使得它们可以相互替换。 —-67— 维普资讯 http://www.cqvip.com
策略模式使得算法可以在不影响到客户端的情况下发生变 模板方式模式特别适合这种轮廓和骨架类似的算 化。基于策略模式,笔者设计的算法类库如图2所示。 法,笔者定义了针对算法的流程模板方法RunTemplate Method(),在该模板中定义了针对文件处理算法的一般 FrocessContcxt I I Algorithm I l 、l J流程,而在具体模板类中对模板方法中的基本方法进行  ̄SetProccsParaO l 1+gct g0nthNamd) l ̄SetAlgoritlun() l l+setAlgsetting(void info)O l了重载,如proccesslmgO函数包含了不同方法内存分配 APpl gomb )l l+float operator()【l1oat plnBut)O l 的不同方案。在基于点像素运算的方法中,内存分配方 案是单波段分块读写处理的方案;基于区域内存分配方 案跟基于点运算的方案类似,但是强调了分块临近边缘 皋 点内存中元素的处理;基于多波段处理的采用了基于多 波段读写的分块方案;基于变换域的方法是采用了临时 文件的方法进行分块读写的。 (3)基于门面模式的数据流模型算法 遥感图像处理算法复杂,但是很多算法可以由若干 基本算法组合实现的,比如基于彩色变换的图像融合算 法,其流程见图4。 申申 C,eomeU 圈2针对内存决基本图 处理算法类库框图 这样可以将大部分算法统一在一个框架下面,通过将算 法与图像文件数据分离机制,提高了算法复用程度,使得不 仅算法可以应用于基于文件的图像处理程序中,同时可以将 圈4基于IHS变换的 素级融合蠢程 算法方便地应用到视图显示处理中。 为了能够让像融合算法这样复杂的算法有一个通用方便 (2)基于模板模式的针对文件操作的基本算法 的接口,调用更为方便,采用了门面设计模式对其进行了包 针对文件处理的基本算法与针对内存块的算法不同,遥 装,如图5所示。图像缩放类、图像直方图规定类、图像彩 感图像海量的特点,使得直接将图像数据填充入内存是不合 色变换类、图像波段合成类组成了一个处理流水线,形成了 适的。同时,遥感影像具有地理信息、投影信息、彩色表和 一元数据等信息,这些信息会随着采用算法的不同发生变化。 个计算框架来完成融合处理。 虽然针对文件的算法实现复杂,但实现流程可以模板化。 不管采用哪一种算法,都需要选择合理的内存分配方案;都 需要选择针对内存块操作的算法;都需要对文件的辅助信息 目…一 进行修改和写入。根据这样的特点,针对文件的基本算法采 用了模板模式,见图3。 自 宦官 圈5采用门酉模式的融合类圈 3.3基于多种模式的视图类库设计 在遥感图像处理软件中,多个模块涉及到图像的显示问 题,如纠正、镶嵌、分类和专题图制作等。若每个模块都写 自己的显示模快,不仅会重复劳动,同时会带来代码维护的 问题,因此,设计了一个图像显示的中间件:视图类库。 由于GIS视图类库和遥感图像处理视图类库的相似性, 因此借鉴了文献[3—4]中对GIS视图类处理的一些解决方案: (1)采用桥梁模式进行图像的显示,将抽象部分和实现部 分分离,提高了视图的可重用性。 圈3针对文件的基本图 处理算法类库框图 (下转第71页) 维普资讯 http://www.cqvip.com
于源代码的逻辑复杂性,定位故障还需要在此基础上利用代 码分析辅助诊断工具,依据代码故障系数的高低对可疑代码 集分别进行程序的词法和语法分析 J,对源码中的变量、运 算符、数组、指针、保留字和函数等关键信息进行人工排查 和分析,根据分析的结果输出,找到故障的原因和位置。 2.5应用实例 基于该故障诊断方法,本文设计并实现了典型软件 密集型装备故障诊断原型系统。原型系统包括粗诊断系统、 细诊断系统和辅助诊断工具3个部分。其中,粗诊断系统采 用产生式系统对故障进行初步定位;细诊断系统采用方法间 程序切片算法对故障进行进一步的定位;辅助诊断工具主要 对错误代码集进行排查,定位故障代码。 圈5软件代码糟助 断工具运行结果 3结束语 由于软件系统和软件故障的复杂性,因此针对软件故障 进行的故障定位是软件故障诊断的难点。本文针对目前软件 针对某典型软件密集型装备软件——指挥自动化系 故障定位方法的缺陷,提出了一种基于粗诊断与细诊断技术 统,设置故障并进行故障诊断。具体诊断过程为:首先根据 相结合的诊断方法,通过2种方法精确定位故障语句。该方 用户递交的软件故障报告,利用粗诊断系统分析出软件故障 法已经成功运用于某指控软件故障诊断系统,运行结果表明 可疑模块及其相关函数集,然后进入细诊断系统,对可疑故 该方法能快速、有效地定位软件故障,减轻软件维护人员的 障模块代码进行切片分析,最后采用代码分析辅助诊断工具 工作量,为解决软件装备战场快速故障定位问题提供了一种 对软件故障的可疑代码集进行分析、定位。 新途径。 实验表明,原型系统能有效地实现软件故障定位。其中 经过细诊断系统和代码辅助诊断工具的具体分析结果见 参考文献 图4、图5。 [1】Parilda G Software Support,Management,and Evolution in the Coming Decade and Beyond Opportunities&Challenges[C】,, Proceedings of hte 21st IEEE International Conference on So,ware 导入潭代再 蔷 —一选拇对囊芦 毛葡 i亍园 *口 j —一 圆 !竺墨j Maintenance.Washington,D.C.:[S.n.】,2005. [2】Tribble A C,Miller S P.Software—intensive Systems Safety Analysis[J].IEEE A&E Systems Magazine,2004,19(10):21—26. [3】古乐+软件测试技术概论[M】.北京:清华大学出版社,2004. [4】郭远东.基于模块化设计的嵌入式软件测试方法[EB/OL]. f2005—01一o1).http://aritcle.ednchina.com/2006—04/200643084501. htm. [5】聂长海,徐宝文,史亮.一种基于组合测试的软件故障诊断方 法[J].东南大学学报,2003,33(6):681—684. [6】张威,肖 庆,卢庆玲.面向故障的软件测试方法研究[J].装 圈4鲴 断系统运行结果 甲兵工程学院学报,2004,l8(2):6-8. (上接第68页) (2)采用观察者模式进行视图内容的更新,当显示内容发 入性大大增强。 生变化时,文件对应的投影、坐标系等按照订阅目标的改变 参考文献 而改变。 [1】Gamma E,Helm R,Johnson R,et a1.Design Pmtems:Elements of (3)采用代理模式进行鼠标操作控制,使得鼠标的行为控 Reusable Object—oriented Software[M].Massachusetts:Addison— 制由设置类的特征来决定,避免了对鼠标所代表行为的判断。 Wesley Publishing Company Inc.,1995 (4)采用备忘录模式实现REDO/UNDO操作。 [2]Patje.Different Ways of Implementing Factories[Z].(2006—08—08). 4结束语 http://WWW.codeproject.com/cpp/all_kinds_of_factories.asp 本文根据一个已经实现的国产遥感图像处理软件,探讨 【3]曾志明,朱江,张立立,等.设计模式在可复用GIS软件开发 了开发这类平台核心类库的设计和实现方案。在平台的开发 中的应用[J].计算机工程,2006,32(7):67—68,77. 过程中,充分考虑到遥感图像的特点,采用了基于设计模式 [4]屈红刚,潘懋,王勇,等.设计模式在GIS软件开发中的应 的面向对象开发模式,使得软件的可扩展性、灵活性和可插 用研究[J].计算机工程与应用,2003,39(25):1-4. 一7l一