录稿查询
联系我们
在线投稿
刊文精选

《数字图像处理》课程的实验系统的研究

来源:教育教学论坛     2019-2-25 20:20:17      点击:

骆岩红

摘要:数字图像处理这门课程的实践性很强,在教学过程中,不仅做到各种图像处理算法的详细讲解,而且还要结合实验系统进一步帮助学生形象、直观的理解相关知识。这种教学内容,提高了学生的学习兴趣,而且把理论的学习融入到实际的问题解决中,极大的调动了学生的主动性和积极性。本文结合VC++语言,设计了一个实验系统,并经过各种算法的自行设计,得以证明,系统达到预期的功能。

关键词:数字图像处理;软件设计;实验教学

中图分类号:G434 文献标志码:A 文章编号:1674-9324(2018)50-0277-02

一、引言

图像处理是一门多交叉学科,它涉及了计算机、数学知识、信号处理等方面的课程,该课程要求学生掌握基本的图像处理理论和算法。在授课过程中,常常需要结合特定的物理学、仿生学理论进行数学理论的推导,但是如果一味地讲解相关理论和算法,就会导致授课过程乏味,而且给学生学习该门课程带来很大的困难,更不要说把所学得知识和实际的应用联系起来。

鉴于图像处理这门课程较强的实践性,如果在教学过程中,结合计算机程序设计来验证各种算法的有效性,不仅使学生较直观地领会了各种算法,而且激发了学生的学习兴趣和参与热情,为培养学生动手实践能力奠定了一定的基础。

二、图像处理系统的实现

图像处理所涉及的内容:图像基本处理、几何变换、图像频域处理、图像增强、图像分割和边缘检测、图像复原等内容。

1.软件开发工具的选择。图像处理实现的手段比较多,比如Matlab、C++等开发环境,但是考虑C++语言具有良好的开发环境支持,以及VC++开发的产品与Windows操作系统具有很好的“亲和力”,所以它在开发数字图像处理方面占据着极其重要的地位。

数字图像处理作为一门实践性较强的课程,学生通过编程实践来理解和领会图像处理的各种算法。

2.图像软件设计中的技巧。虽然MFC提供了可视化的编程界面元素,但是在图像处理方面,由于没有提供支持DIB位图的类,所以为了使用方便,采用了面向对象技术,定义了一个与设备无关的类CImage,在该类中封装了DIB位图处理所需的基本成员变量和成员函数。(1)系统背景设置。本系统是建立在多文档基础上,那么对于多文档应用程序的背景设置,需要经过下面的步骤:

1)用ClassWizard生成一个CWnd类的派生类CClientWnd;

2)添加消息WM_ERASEBKGND,并在其关联的函数中OnEraseBkgnd()添加代码:

BOOLCClientWnd::OnEraseBkgnd(CDC* pDC)

{ //定义位图对象

//加载位图资源,并把位图选入内存环境中

//位图屏幕显示}

3)添加WM_SIZE消息,在其关联函数中完成窗口的重绘;

4)自定义重载的虚函数用来返回函数指针:

WNDPROC *CClientWnd::GetSuperWndProcAddr()

{static WNDPROC NEAR pfnSuper = NULL;

return &pfnSuper;;}

5)在CMainFrame類中定义一个CClientWnd 类的成员变量m_wndClient,并在CMainFrame 的OnCreate函数中把m_wndClient子类化为主框架窗口的客户窗口。代码如下:

if(!m_wndClient.SubclassWindow(m_hWndMDIClient))

{

TRACE("Fail to subclass MDI client window\n");

return -1;}

(2)软件操作的设计。在软件设计过程中,采用菜单操作的方式达到各功能的实现。为了代码设计结构的简单和清晰,图像处理中对同类型的菜单,使用了一个函数响应多个选项的方法。比如在图像特效显示中,采用函数OnShowEffect()来处理自上而下扫描显示、自左向右扫描显示、栅格交错显示、百叶窗显示、马赛克显示。具体实现的方法是:

1)在视图类的头文件中定义特效显示的消息处理函数:

afx_msg void OnShowEffect(UINT nID);

2)在视图类的实现文件的开头处,即BEGIN_MESSAGE_MAP……END_MESSAGE_MAP宏之间添加消息映射:

ON_COMMAND_RANGE(菜单选项ID,菜单选项ID,菜单响应函数)。

例如:ON_COMMAND_RANGE(ID_DOWN,

ID_MASAIK,OnShowEffect)

3)在视图类的末端手动加入函数OnShowEffect()的定义:

void CImagProView::OnShowEffect(UINT nID)

{ ……

switch(nID)

{ case ID_UPDOWN://上到下显示

……

break;

case ID_LEFTRIGHT://左到右显示

……

break;

case ID_GRIDCROSS://栅格交错显示

……

break;

……}

这种方法,减少了代码的冗余,另外也可以达到代码结构的清晰。在软件设计中,该方法贯彻到始终,比如用OnGeometricPro()函数来完成图像几何处理,OnFrequencyPro()函数完成图像的频域处理;OnEnhancePro()函数完成图像的增强处理;OnSepEdgePro()函数完成图像的分割和边缘检测;OnRestorationPro()函数完成图像复原。

(3)图像处理中各算法的设计安排。该软件设计的是由《数字图像处理》这门课程的实验需求而启发,为了避免课程学习过于枯燥,学生可以在该系统的框架中添加各算法的实现代码,从而达到对其深刻地理解。

软件已完成图像处理总体框架的搭建,用户可通过菜单选项调用各算法功能。但须注意,图像处理的各种算法需要用户自行编写代码。为了方便期间,要求把算法实现代码放入到function.h的头文件中,以供需要时反复调用。function.h头文件结构:

void FFT_2D( )//二维傅立叶变换

void IFFT_2D( )//二维傅立叶逆变换

BOOL CosTran( )//离散余弦变换

……

三、总结

在数字图像教学中,将实验内容和理论教学的有机结合,通过实验改革,让学生积极参与到实验教学中,一方面融会贯通课堂教学内容,另一方面通过实践使学生对抽象的理论有了进一步的理解。通过课题的实践,调动了学生学习的主动性和积极性,同时也培养了他们程序设计思想和动手等方面的能力。

参考文献:

[1]鲁斯著.数字图像处理(第六版)[M].余翔宇,等译.北京:电子工业出版社,2014.

[2]冈萨雷斯,伍兹著.数字图像处理(第三版)[M].阮秋琦,等译.北京:电子工业出版社,2011.


本文版权归教育教学论坛杂志社及本文作者所有,未经同意,不得转载! ——《教育教学论坛》查稿电话:0311-85178286