首页 > 范文大全 > 正文

结合数字图像处理的面向对象程序设计课程教学探讨

开篇:润墨网以专业的文秘视角,为您筛选了一篇结合数字图像处理的面向对象程序设计课程教学探讨范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:为了进一步加强面向对象程序设计课程和其他相关课程之间的有机联系,强化“讲授―实践”教学模式的效果,本文分析了数字图像类定义中的封装、继承、多态的表现形式,探讨了面向对象程序设计和数字图像处理两门课程相结合教学的方法。

关键词:数字图像处理;面向对象程序设计;封装;继承;多态

面向对象程序设计是很多计算机类专业的核心课程,在该门课程的传统教学过程中,很注重相关概念的讲解,同时辅助以若干示例程序让学生动手练习[1]。这种“讲授―实践”模式的教学方式较为成熟并得到很多师生的认可,如何在这种成熟的教学模式基础上进一步提升,是计算机教育工作者探讨的方向。

图1

随着数字图像处理相关软硬件技术的发展以及需求的增长,数字图像处理课程已在很多院校的计算机类专业中开设,该课程涉及数字图像的存储、增强、分割以及识别等诸多方面的工作,其中很多概念和方法适于使用面向对象的思路去具体实现,这为两门课程相结合教学提供了可能[2]。

面向对象的思路有三个要点,即封装、继承和多态,它们都可以在数字图像处理过程中找到具体落脚点。笔者从这三个基本要点出发,对在面向对象程序设计教学过程中,使用基于数字图像处理课程背景的具体示例进行教学,做了一些初步的探讨。

一、数字图像类的封装

面向对象的思想认为任何一个具体的事物都是一个对象,对相似类型对象的抽象就是类,类中包含两个方面,即待描述事物的属性与方法,将属性和方法捆绑在同一个单元中就是封装。对数字图像处理中的“数字图像”这一基本概念,也可以进行这样的分析。

数字图像的本质是对现实中连续图像的离散化表达,离散表达的最基本单位是像素,数字图像实际上就是像素的矩阵。矩阵在计算机中最简单的存储方式是使用数组进行存储,这个数组就是图像类的最基本属性。除了该基本属性外,还会有其他诸如图像的宽度、高度等的属性信息需要被图像类封装进去。

同样,对封装好基本属性的图像也会有一些最基本的操作,例如获取图像某个坐标上像素点的颜色,或者更改某个点的颜色。这些操作代表了要对数字图像进行处理,所需要提供的最基本的功能,这些就可以称为是数字图像的方法。按照这样的分析,一个基本的数字图像类就可以被如下(见图1)定义,使用C++描述。

二、数字图像类的继承

继承在面向对象编程中,被认为是一种类之间的“Is-a”层次级关系。子类被看作是父类的一种具体,父类则是子类的一种抽象。例如,对于汽车类来说,我们认为它是载具类的一个子类,是载具这一抽象实体的一个具体;我们同时还可以认为汽车类是客运汽车类的一个父类,是客运汽车的一个更高级抽象。在数字图像类中,也有很多地方有类似的关系。

随着技术的发展,数字图像的色彩表现能力逐步提高,从最早的二值图像,到后来256色的8位图像,再到目前的32位真彩色图像,不同类型图像的数据存储方式和数据处理方式在抽象层面上是一致的,但在具体的处理细节上又是迥异的,因此可以将数字图像这一概念抽象为一个基类,在基类中只实现抽象统一的方法,而把细节处理不同的方法纳入子类中进行实现。

基于BaseImage类,派生出一个8位数字图像子类和一个32位数字图像子类,这样的一个继承关系就可以被定义(见图2)。

三、多态性在数字图像类中的体现

同一个问题在不同的前提下,针对具体情况,会有不同的解决方案。最简单的解决思路就是针对每一种不同的情况,单独定义一个接口来解决该问题,然而在实际应用中,我们总是希望接口越少越好,同时功能越强大越好。面向对象编程中多态就是为了解决这个矛盾,为同一个接口创建多个不同的实现方案,同时由系统自动选择在何种情况下使用某个现实。

在第三节中定义的三个数字图像类,其基类BaseImage中应该包括一些通用方法的实现,例如获取当前图像的高宽;同时也应该包含一些逻辑上通用,但具体实现有差异方法的抽象,例如数据的存取方式。这些逻辑上相同但具体实现不同的方法,就可以基于多态的思路进行实现。

在8位存储和32位存储两种不同的存储模式下,获取图像宽度和高度的实现是一致的,因此在基类中对其进行了统一的实现。但是在对图像数据进行修改时,其具体的操作细节是不同的,因此这两个方法在基类中的定义使用了Virtual关键字,在派生类的实现也不一样。但对于调用者来说,只需要了解Image类有获取以及设定某点像素值的功能,具体使用哪个派生类的实现由系统自动分配。

在面向对象程序设计课程的教学过程中,引入数字图像处理的具体案例进行教学讲解,一方面能强化程序设计课程的应用背景,提升学生们学习的兴趣;另一方面,也可以将这两门课程的部分知识点进行融汇,提高学习效率。如何在这两门课程之间选择较好的结合点展开教学,是提升该类教学方法效率的一个重要因素,接下来的工作就围绕这个问题进行,希望能够找到更多合适的切入点,更好地完成教学工作。

参考文献:

[1]张会.C++面向对象程序设计实践教学改革探讨[J].西昌学院学报(自然科学版),2015(01):151―153.

[2]张麟华,孔令德,杨慧炯. 面向图形图像处理的C++课程案例设计[J].计算机教育,2013(04):88―91.