基于OpenCV的《视频图像处理与分析》案例教学设计与应用
2018-11-29李大湘王小雨
李大湘,王小雨
(西安邮电大学通信与信息工程学院,西安 710121)
0 引言
近些年来,随着计算机视觉与人工智能技术的发展与应用,在大部分高校的电子、信号处理、通信与计算机专业的本科或研究生中,均开设了《视频图像处理与分析》相关课程与实验。由于该课程的教学内容会涉及到很多图像处理与模式识别的理论知识,且具有很强的实践性与应用性,为了让学生理论与实践相结合,培养其编程与应用开发能力,则该课程在教学与实验中,非常适合采用案例教学[1]。
OpenCV是一个可以运行在多种常用操作系统之上的计算机视觉跨平台函数库,提供了丰富的视频图像处理算法,且这些函数均以C或C++语言编写,不需要添加新的外部支持就可以编译执行,实现人机互动、物体识别、图像处理、人脸识别、动作识别、运动跟踪、机器人、运动分析、机器视觉、结构分析等功能。所以,很多视频图像处理与分析商业产品开发,均选用OpenCV作为开发平台,并且在很多高等院校中也经常用它来作为工具完成视频图像处理与分析相关的毕业设计[2]。
本案例库建设主要是针对当前《视频图像处理与分析》课程教学过程中理论与应用开发相脱离的实际问题,将基于VS2010+OpenCV编程环境,以培养与提高学生的编程能力为应用目标,首先,讲授每个案例所涉及的算法原理,然后,剖析算法的编程思想与编程步骤,引导学生去编程相应的实验程序,遵循理论与实践相结合的教学原则,从而激发学生的学习兴趣[3]。
1 案例制作理念
为了提高《视频图像处理与分析》课程教学效果,在该课程中选择一些理论性、实践性与可操作性均很强的知识点或算法,建设成为教学案例,其主要建设思想如下[3]:
(1)案例要倡导理论与实践相结合,基于OpenCV开发平台,详细讲解视频图像处理及分析算法原理与编程方法,其核心是培养学生的编程实践能力;
(2)案例不仅要让学生能够对视频图像处理与分析的原理有深刻的理解,也要让学生迅速掌握OpenCV视频图像处理工具,为后续视频图像处理与分析应用开发打下实践基础;
(3)每个案例都各自成为一个独立的教学内容,均涉及到视频图像处理与分析的一个研究方向或应用领域,在教学中先介绍其应用背景,再讲授算法原理与编程思想,最后安排上机试验与拓展编程,可作为高等院校电子信息、计算机相关专业本科生和研究生的教学素材,也可作为其他从事数字图像处理行业人员的参考资料。
2 案例制作与应用
以我校开设的《视频图像处理与分析》课程教学为例,将建设基于OpenCV的视频录制与播放、图像几何变换、图像平滑去噪、图像灰度增强、边缘检测、行人检测、图像锐化处理、运动目标检测、图像检索与人脸识别等10个案例,为课程实验教学提供素材。下面以“直方图均衡化图像灰度增强”为例,来描述案例制作与应用模式。
2.1 案例制作过程
(1)编写案例指导书
在案例指导书中,每个案例作为独立的章节,其中重要的内容就是要介绍本案例所涉及的算法原理,以直方图均衡化图像灰度增强为例,原理部分的主要内容如下:
所谓图像增强[4,5]就是通过构造一个特定的变换函数对原图像的灰度值进行逐点变换,希望能够把图像中感兴趣的特征进行强化,同时压制其他的非兴趣特征,从而达到改善图像视觉效果的目的。常用的图像增强方法可分为两种,即空间域图像增强和频率域图像增强,空间域增强是直接对像素灰度进行操作,属于直接增强的方法,它包括灰度变换和直方图变换等方法;频率域图像增强就是先对图像进行傅里叶变换,然后在频率域采用高通、带通或低通滤波的方法对图像进行增强。
直方图均衡化作为一种全自动的空域图像增强方法,算法中不需要人工设置参数,其本质思想是[4,5]:希望增强之后新图像对应的灰度直方图是均匀分布的,从而增加灰度动态范围以提高图像的对比度。设变量r代表图像中像素的灰度级,直方图均衡化就是要寻找一个变换函数s=T(r),通过它的变换,原始图像的每个级r都会变成一个新值s。变换函数T(r)应满足以下条件:
①T(r)在区间0≤r≤1中为单值单调递增;
②0≤r≤1时,0≤T(r)≤1,即T(r)的取值范围与r相同。
对于任意一幅灰度图像,设nr为像素值r出现的频率,则定义其发生概率为:
其中L为灰度级数,N为像素总数,p(r)实际上是图像的归一化直方图。设c(r)为对应于r的累计概率函数,定义为:
即c(r)是图像的累计归一化直方图。则直方图均衡化的变换函数T(r)定义为:
这里T(r)将不同的灰度值映射到[0,1]域,为了将这些值映射回[0,255]域,则最终变换为:
最后,直方图均衡化图像增强算法的编程步骤总结如下:
Step 1:列出原图像的灰度值r(r=0,1,…,L-1);
Step 2:统计原始图像各灰度值出现的频率nr;
Step 3:采用式(1)计算归一化直方图 p(r);
Step 4:采用式(2)计算累积直方图 c(r);
Step 5:采用式(4)确定映射关系 r→s;
Step 6:采用Step 5确定的映射关系对原图像每个像素进行变换,从而得到直方图均衡化增强之后的新图像。
(2)编写案例参考程序
在案例参考程序部分,首先要介绍OpenCV中对应的函数原型及参数,然后要给出相应的程序代码,以直方图均衡化图像增强为例,该部分的主要内容如下:
现有的OpenCV中包含有灰度直方图均衡化的函数 cvEqualizeHist,即:void cvEqualizeHist(CvArr*src,CvArr*dst),其中src表示输入的8-比特单信道原图像,dst表示增强之后输出的新图像。
让学生按照实验指导书上的方法安装配置VS2010+OpenCV编程环境,且建立命令符项目文件,编写如下代码[6]:
程序经编译运行之后,试验结果如图1所示。
图1 直方图均衡化前后图像效果对比
(3)拓展编程及实验报告
为了真正提高学生的编程实践能力,针对每个案例,在验证OpenCV函数的基础上,让学生参考上课PPT及案例指导手册,自己编写直方图均衡化子函数,即:
要求:①编写与调试上述直方图均衡化子程序,并与cvEqualizeHist进行比对实验;②实验完成之后,学生要书写实验报告,对所涉及的算法原理、编程思想与实验结果,进行归纳总结。
2.2 案例应用模式
以我校研究生的OpenCV《视频图像分析综合实验》教学为例,每个案例视情况分配2-4个学时,在教学过程中,案例库的应用模式是[3]:
(1)原理讲解:针对每个案例库,制作一个PPT,在上实验课时,先花一节课,对本案例设计的目的、算法原理与编程方法,进行讲授;
(2)验证实验:让学生根据“案例指导手册”,对相关案例进行编程与实验,观察分析实验结果;
(3)拓展编程:让学生根据上课PPT与实验指导书或查阅资料,自己编写案例所述功能的算法程序,以提高编程实践能力;
(4)提交报告:每个案例教学完成之后,让学生书写实验报告,对算法原理与编程思想进行归纳总结,且分析比对实验结果。
3 教学效果
学生通过对基于OpenCV开发的10个案例的学习和实验,达到的目标是[3]:
(1)为视频图像处理与分析课程实验教学提供素材。研究生课程OpenCV《视频图像分析综合实验》是一门理论性与实践性很强的课程,教学中非常适合采用本“案例教学”;
(2)学生通过对本案例库的学习与实验,培养了学生的编程动手能力。OpenCV具有很强的应用性,在讲授“视频图像处理与分析”算法原理的基础上,通过实验中的案例教学,让学生理论与实践相结合,增强编程与应用开发能力;
(3)案例教学中的可实现性与可操作性,不但提高了学生学习的积极性与主动性,还极大地增强了学生学习OpenCV图像处理的兴趣。
4 结语
针对视频图像处理与分析教学应用需求,结合教学团队多年从事图像处理教学与应用开发的实践经验,建立了一个教学案例库,每个案例均涉及到视频图像处理与分析的一个研究方向或应用领域,在注重案例具有代表性与理论性的基础上,还重点要突出案例的实用性与可操作性,其宗旨在于培养学生基于OpenCV的编程与实践能力。在本校的教学过程中,学生反映很好,达到了预期的教学目标。