对象的数字图像处理软件设计方案方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于对象的数字图像处理软件设计方法
摘要该文给出了一种用面向对象技术实现数字图像处理算法的软件设计方法。按照面向对象的方法,笔者把各种数字图像处理方法封装在一个特殊图像类的层次结构中。这样的软件结构易于维护,有较强的可扩展性,适合不断发展的数字图像处理技术。
关键词数字图像处理,面向对象,类
引言
从事软件开发的人员常常会有这样的体会:在软件开发过程中,使用者或用户会不断地提出各种各样的更改要求,使得软件人员不得不对软件进行修改。这样导致软件开发进度一再拖延,软件开发的成本不断增加。此外,在软件投入使用后,为了排除在开发过程中遗留下来的错误或缺陷,为了改进软件的性能、增强软件的功能,为了能够适应不断出现的新机器、新操作系统或新数据环境,都需要修改软件。这些修改或大或小,大者甚至将对软件做重大的“外科手术”,此时,软件人员一旦计划不周或考虑不细,不但以前的错误没有纠正,还会引入新的错误,导致软件质量下降,软件使用寿命缩短。
面向对象 随着计算机处理速度日新月异飞速发展,数字图像处理技术的应用越来越广泛,图像处理和识别的算法也随着应用的深化而不断发展变化,旧算法需要改进,新算法层出不穷。同时,对新算法的探索,更需要有一个好的数字图像处理软件系统环境支持,这就要求软件系统具有易于修改、维护和增加新功能的特性。用面向对象的方法实现的数字图像处理软件能够较好地满足这种要求。 数字图像处理的算法复杂,而面向对象的设计方法具有解决复杂的处理模块的能力。建立在类层次结构基础上的数字图像处理软件系统,利用类的封装、继承和多态等特性,使修改和增加新算法更容易,软件系统具有良好的扩充性。而且,对于成熟的算法,可以加入到算法类库中,便于在解决实际问题时,能在较短时间内将有关的算法组织成可靠的实际处理软件系统。 将图像处理算法按一定的类结构层次组织,而把与显示平台有关的用户界面划分到用户模块,进一步降低了算法对实现平台的依赖性,更有利于研究人员集中精力深入研究数字图像处理算法。 用OO方法实现数字图像处理算法,其难点主要在于如何抽象出具体的类和确定类的成员上。该文在Dan Roman的用OO方法设计数字图像处理算法的思想方法上,给出了较详细的用OO方法设计图像处理算法的软件结构和具体类的设计;并结合具体类和类的层次结构设计,阐述了类的封装性、继承性和多态性应用在图像处理算法中的巨大优势。 实现方法 用面向对象的方法设计数字图像处理软件系统,整个系统划分成两大模块:用户模块,实现数字图像处理算法的使用界面,这一部分依赖于具体实现平台;数字图像处理算法 模块,包含用类层次结构实现的处理算法,是核心内容。这样的划分,能够延长图像处理算法模块的软件使用寿命。图1所示为上述软件系统的结构。 基本数据的表示—原始图像类的设计 用面向对象的设计方法实现数字图像处理软件系统所要考虑的首要问题是如何用类来表示图像数据。由于图像文件的格式很多,为了使所设计的软件系统能处理各种格式的图像文件,可以定义一个抽象的图像类表示一般的图像概念,而使其派生类表示各种不同文件格式的图像数据。在这些派生类中,根据图像文件的格式定义其构造函数,如图2所示,是针对最常用的两种图像格式定义的派生类。对于其它图像文件格式可仿此定义基类IMG的派生类。如此设计图像类的层次,使该数字图像处理软件系统的可扩展性好:第一,当需要处理一种新的图像文件格式时,由基类IMG派生出一个派 生类IMGxxx,只需新定义一个对应此文件格式的构造函数即可,这个派生类继承了基类的属性和行为<保护性的和公有的);第二,在设计处理算法时,用基类IMG的对象作为形式参数,而实际操作时,根据输入图像文件种类<文件格式),动态地生成派生类IMGxxx的对象,利用OO的多态性,用IMGxxx的对象取代基类IMG的对象作为实际参数;第三,任何有前途的学科中都会存在许多需要不断探索的新课题,对于这些有待进一步研究的新算法,利用抽象类的虚函数特性,在整个系统规划时以虚函数或纯虚函数的形式纳入到系统中,一旦算法成熟,以很小的改动代价加入到系统中,毫无夸张地说,这样的设计甚至可以为若干年后的算法预留下它在系统中的位置,而仅需要花费很小的空间代价,不需要对系统结构做“大的外科手术”。 在数字图像处理学科中,一幅图像主要由以下参数表示: <1)图像的灰度级f(x,y>; <2)图像点阵的大小; <3)图像的彩色表。 此外,根据实际应用,还有一些其它的特性。设计基类IMG时,笔者只考虑图像的共性。由此,定义基类IMG如下: template Class IMG { protect: T *ptrImag[ ]。 CSize ImagcSize。 CPalette *ptrPalette。 public: IMG(>。 ~IMG(>。 virtual InitImagc(T *Data[]>。 virtual IMG* operator =(IMG* pImgobj>。 virtual void SetImageGray(T *Data[]>。 virtual void SetImageSize(int sx, int sy>。 virtual void SetImagePalctte(--->。 virtual T* GetImageGray(>。 virtual CSize GetImageSizc(>。 virtual CPalette*GetImagePalettc(>: //其它操作 … } 实际应用中,根据具体问题定义具体的派生类,如 template class IMGxxx: public IMG { … } 其中,变化之处是要重载IMGxxx的构造函数。 处理软件系统运行时可以动态地生成图像对象,由一个用户模块的指针指向图像对象,建立用户模块和数字图像处理模块的联系。这种的关系存储结构如图3所示。