王文成, 李 健, 王瑞兰, 吴小进, 孙学岩
(潍坊学院 信息与控制工程学院, 山东 潍坊 261061)
“数字图像处理”课程是学生学习机器视觉技术的基础和电子信息工程、自动化等专业的核心课程。该课程涉及内容较多,不但要讲授基本概念、基本原理和基本方法,还要培养学生的实践能力[1-6]。传统的先课堂理论、后实验实践的授课方式将理论和实践教学隔离,教学效果不够好。因此,开发能够在课堂教学过程中操作的数字图像处理演示平台就成为教学的需要[7-10]。
Matlab属于美国MathWorks公司开发的数学软件,快捷的编程方式深得科研工作者的喜爱。特别是Matlab中的GUI(graphical user interfaces)工具为人机交互界面的设计提供了方便,提高了软件开发的效率。本文利用Matlab GUI和Image Processing Toolbox,基于模块化的思想,构建了数字图像处理实验平台。该平台的设计充分考虑人机交互的友好性和可扩展性,使学生能够直观感受图像处理算法的效果,并可以对算法进行修改和扩展,提高了教学的灵活性和学生的创新能力[11-12]。
基于Matlab GUI的数字图像处理仿真平台集成了“数字图像处理”课程理论教学和实验教学的6个主要模块:图像变换、图像增强、图像滤波、边缘检测、图像分割和综合案例。由于理论教学涵盖的内容较多,因此各模块还分别拆分出了不同功能的子模块,在平台的主界面中点击就可打开相应子模块界面。如果学生需要增减模块或调整主界面的外观,可以通过修改主界面的代码来实现。该实验平台的主要模块如图1所示。
图1 GUI 实验平台的主要模块
Matlab提供了图形化的用户界面开发环境,可以高效进行界面的设计。仿真平台的搭建包含各个模块界面设计和程序实现,最终通过GUI设计形成两个文件:一个是扩展名为“.fig”的文件,包含对GUI组件的描述;另一个是扩展名为“.m”的文件,包含控制GUI组件的程序代码。这两个文件与界面的显示和编程任务相对应。图2是GUI程序运行的初始化流程。
图2 GUI 程序运行的初始化流程
根据实验教学的需要,该平台可进行主控界面与子控界面直接回调和切换。首先,需要规划主界面和子界面的布局,通过在子界面中添加控件,实现演示内容的参数修改和函数调用;然后,编写界面回调函数,实现主界面与子界面之间的切换。
该仿真平台涉及数字图像处理课程中6个模块的教学内容。学生登录平台后,只需要点击主界面的相应按钮即可进入子模块界面进行实验。如果需要增减测试模块或调整主界面的外观,可自行修改主界面的代码来实现。打开子界面的程序代码为:
open(′fig_name.fig′); %fig_name为窗口名;
h = guihandles;
该平台中每个子界面都能为用户提供一个可视化的操作窗口,用于参数的设置和图形图像的显示。其中图像的打开、保存及退出3个按钮功能相同,其函数代码如下:
(1) “打开”按钮操作利用uigetfile()函数实现,它可以实现设置文件类型和路径名的功能。具体方法为:通过[filename,pathname] = uigetfile({′*.jpg′; ′*.bmp′;′*tif′;′*.*′},′openfile′)选择相应路径打开图像;通过file=[pathname,filename]; x=imread(file),读取选中的图像;最后,通过 imshow()函数在显示区域显示图像。
(2) “保存”按钮操作利用uiputfile()函数实现,它通过获取数据名称实现任意路径保存。其中语句[filename,pathname]=uiputfile({′*.jpg′;′*bmp′;′*.tif′;′*.*′},′save′,′untitled.jpg′)用于选择文件名和路径;i=getimage(gca)取出坐标变换后的图像数据保存到变量i;最后用imwrite()函数把数据i存到指定的目录下。
(3)“退出”按钮用于退出演示平台,程序代码包括:clc(清屏)、close all(关闭窗口)、clear all(清除变量)。
图像变换实验用来描述图像由一种状态转换为另一种状态的过程,主要演示灰度变换、图像求反、图像旋转、图像缩放等基本操作。具体描述如下:
(1) 灰度变换是把RGB彩色图像转换为灰度图像的过程,通过rgb2gray()函数实现;
(2) 图像取反是将图像的灰度值求补,即白色变黑色、黑色变白色的过程,通过imcomplement()函数实现;
(3) 图像旋转是对图像进行几何变换,可实现镜像、翻转、任意角度旋转等效果,通过imrotate()函数实现;
(4) 图像缩放是改变图像的大小,采用imrotate()函数实现,缩放方法有最近邻插值算法、双线性插值法和双三次插值法。
图像变换仿真实验界面如图3所示。
图3 图像变换界面
图像增强实验可演示图像灰度调整的结果(见图4),包含线性变换、对数变换和直方图均衡化操作。
(1) 线性变换。通过对像素值进行比例调节或增减像素值实现灰度变化。假设y为输出,x为输入,k为系数,b为截距,则实现方法为:y=kx+b。学生也可以使用imadjust()函数进行编程。
(2) 对数变换。利用图像的输入输出像素值呈对数关系进行灰度调整,实现方法为:y=log(1+x)。
(3) 直方图均衡化。通过调整图像的灰度值分布曲线,增大图像对比度、增强图像细节,采用histeq() 函数实现。对于彩色图像的直方图均衡化,需要将其分别在R、G、B空间均衡化后再进行合成。
图4 图像增强界面
图像滤波实验主要包括噪声生成、均值滤波、中值滤波、和频域滤波等操作。图像滤波实验界面如图5所示。具体描述如下:
(1) 噪声生成。通过程序模拟噪声在图像中的存在状态,所用的函数为imnoise()。噪声的类型分为高斯噪声和椒盐噪声,参数通过拖动滑动块的形式得到,值越大,噪声越明显。
(2) 平均滤波。属于像素值线性滤波操作,采用imfilter()函数实现,所采用的模板窗口通过单选按钮选择,共有3×3、5×5、7×7、11×11等4个选项,可以使学生观测滤波器窗口的尺寸变化对滤波效果的影响。
(3) 中值滤波。属于非线性滤波方法,是将窗口区域中所有像素的中间值作为滤波的结果,主要作用是消除杂点噪声。该功能利用medfilt2()函数即可实现,平台中同样提供了4种不同大小窗口选项。
(4) 频域滤波。通过将图像变换到频率域进行去除噪声的方法。实验中设置了高通滤波和低通滤波的选项,所涉及的函数包括fft2()、fftshift()、hpfilter()、lpfilter()等。
图5 图像滤波界面
边缘检测实验可以实现利用不同的边缘检测算子实现对图像边缘的提取,所用的算子包括Robert算子、Sobel算子和Canny算子。此外,还可以利用Hough变换检测直线。具体描述如下:
(1) 边缘检测。通过算子标识数字图像中亮度变化明显的点,主要通过edge()函数实现。此功能可对灰度图像进行处理,根据不同的算子,在函数调用中分别选择′roberts′、′sobel′、′canny′实现不同算子的处理结果。
(2) Hough变换。主要利用了图像空间和Hough参数空间的点-线对偶性,把图像空间中的检测问题转换到参数空间中解决。通过该程序调用可以实现图像中直线的检测。
图像分割实验教学内容是阈值分割和区域分割。具体描述如下:
(1) 阈值分割。用来培养学生如何设定阈值,将一幅灰度图像的目标和背景分离,以便计算各个目标的数字特征,主要涉及的函数为im2bw()。该平台实现了双峰阈值和迭代阈值分割的方法,对于人工选择法、最大类间差阈值选择法等,可由学生自己尝试添加。
(2) 区域分割。用来考查学生对区域生长方法的理解。平台中提供了regiongrowing()函数的例程供学生操作,并且提供了生长点和生长阈值参数设置的实验。
数字图像处理实验平台加载了人脸检测和颗粒计数两个现实生活中的案例(见图6),目的是让学生了解图像处理技术在日常生活中的应用,提高学习兴趣。
(1) 人脸检测。人脸检测采用2种实现方法。对于彩色图像,利用了人脸在YCbCr空间的分布特性,通过空间转换和阈值分割得到人脸。对于灰度图像的人脸检测,借助了Adaboost函数库,设计了分类器进行人脸检测。由于综合案例比较复杂,实验平台主要进行演示实验。
(2) 颗粒计数。该实验用来锻炼学生的Blob分析能力。通过对一幅颗粒图像的阈值分割,统计颗粒的面积、个数、直径等参数。所涉及的函数包括regionprops()、bwlabel()等。
图6 综合案例
基于Matlab GUI 的数字图像处理实验平台具有如下特点:
(1) 界面友好,操作方便。该平台提供了友好的人机交互界面,学生通过参数调节就可以观察实验结果,减少了重复编程的时间。此外,该平台可以对比不同算法的实验结果,能够观测参数变化对于实验结果的影响。
(2) 内容丰富,可扩展性强。该平台中的实验模块涵盖了数字图像处理基础的核心内容,具有良好的可移植性和可扩展性。师生在使用过程中也可以编写或修改程序进行完善,通过添加或删除内容优化实验设计。
(3) 演示方便,可视化。教师在理论教学过程中,可以随时通过多媒体设备演示图像处理算法的运行结果,有利于学生加深对原理和应用场景的理解,提升教学效果。
基于Matlab GUI的实验平台已应用于本校数字图像处理课程的辅助性教学中,使理论讲授和公式的推导、分析变得直观和可视化。该实验平台用户界面友好、交互性强、易于扩展,有利于师生在使用过程中自行增删特色模块,优化实验设计,加深学生对数字图像处理相关理论的理解,提升“数字图像处理”课程的实践教学效果。