2021年2月
第30卷第1期
中央民族大学学报(自然科学版)
Journal of MUC(N atural Sciences Edition)
Feb., 2021
Voi. 30 No. 1
基于Python的数字图像处理课程教学演示系统设计
赵洁,廖文静,陈昊,潘玉恒
(天津城建大学计算机与信息工程学院,天津300384)
摘要:数字图像处理课程具有很强的理论性及实践性,实际教学中学生理解的难度较大。针对上述问题,本文设计了基于Python的数字图像处理教学演示系统,该系统利用Python语言开发,通过调用OpenCV计算
机视觉库实现数字图像处理常用算法的功能并采用PyQl搭建用户界面,具有良好的实用性和交互性。教学
实践表明,本系统的应用有助于学生对复杂算法的理解和掌握。
关键词:数字图像处理;教学演示;OpenCV;可视化
中图分类号:TP311 文献标识码:A文章编号:1005-8036(2021) 01-0046-07
近年来随着人工智能技术的快速发展,越来越多的高校将“数字图像处理”课程作为电子信息工程 类专业的专业基础课程[,]。然而,数字图像处理技术内容繁杂、算法众多,教学实践中发现学生很难快速理解和掌握相关算法的原理,为了帮助初学者对图像处理中的常用算法快速建立起感性认知,更好地 开展教学,教师需要在深人分析讲解算法理论的同时,对各个模块的常用算法进行教学演示。
桑国明等[2]利用ActiveX技术,在V B环境下调用MATLAB,充分发挥它们高效的图形界面开发的功能和强大的图像处理能力。余鹏飞等|3]给出了利用MatrixVB在Visual B asic下进行数字图像处理教 学演示软件的方法。罗琴等[4]依托MATLAB的图形用户界面开发环境,调用工具箱函数构建数字图像 处理辅助教学系统。张雁腾等^利用VC ++设计了一个可视化数字图像处理系统。王蓉等〜设计并实 现了基于VC++开发环境下的课程教学辅助软件,可实现各环节相关算法的演示。魏润国等171基于 MATLAB图像
直条图和直方图图片
处理工具箱及G U I设计,实现了图像处理算法的演示。可以看出,现有的图像处理演示系统都是基于MATLAB或者VC ++等进行开发的,而本文基于P ython的图像处理课程教学演示系统不 仅可以直观对比常用算法的处理效果,还可以通过手动调节算法的参数,让学生理解算法中不同参数对 处理结果的影响,有利于加深学生对算法原理的理解,在一定程度上降低课程的学习难度。
1系统总体设计
为了配合“数字图像处理”课程的课堂和实践教学,采用将理论教学与实践教学集于一体的软件平台设计方法[2]。本系统通过调用OpenCV开源计算机视觉库实现常用图像处理算法的功能,实现了抽 象概念可视化、界面操作可视化、处理结果可视化,突出了用实例处理效果解释算法原理的特点。
数字图像处理技术包含很多功能模块,首先设计系统的总体架构,本系统主要包括了几何变换、空
收稿日期:2020-08-29
基金项目:教育部产学合作协同育人项目(201902291002);天津城建大学教育教学改革与研究项目资助(JG- 1220);国家级大学生创新创业项目(2018丨0792026)
作者简介:赵洁( 1984-),男(汉族),天津市人,博士,天津城建大学计算机与信息工程学院讲师,主要研究方向:图 像处理、计算机视觉、机器学习。
第1期赵洁等:基于Python 的数字图像处理课程教学演示系统设计47
基本文件操作几何处理打开、另存为、退出
放大、缩小、翻转、旋转、
仿射变换
空域图像增强直方图均衡化、对数变换、
灰度反转、均值滤波等
频域图像增强
图像分割美化处理添加噪声-------^
颜空间转换r  ^
形态学图像处理\
灰度图像、二值图像、HSV
图像、XYZ 图像等
膨胀、腐蚀、开运算、闭运
Canny 算子、Sobel 算子、
Robert 算子、全局阈值法等
磨皮美白、亮度增强、颜 反转、毛玻璃效果等
高斯噪声、椒盐噪声
图1系统总体功能框图
Fig. 1 Overall function diagram of system
域图像增强、频域图像增强、颜空间转换、形态学图像处理、图像分割、美化处理以及图像加噪模块,然 后编写模块下的函数并进行回调函数的编写。之后设计主界面,对每个功能模块子界面进行实时调用。 系统总体功能框图如图1所示。
本系统主要是实现对不同参数下处理后的效果图像和原图像进行直观对比的功能。为了实现上述 功能,系统设计中使原图像和处理后的效果图像同时显示在同一个界面中,并且系统可支持同时打开多 个子窗口,实现多种算法的并行显示。另外,通过在子窗口中添加可改变参数的控件,可以实现手动调 节算法参数并实时显示处理结果,从而帮助学生更好地理解算法中的不同参数对图像处理结果的影响。
2系统界面实现
系统主界面采用Python  Q t 来搭建。在该软件中新建Main  Window 窗体,然后在窗口上直接添加菜 单栏,通过工具栏添加label 控件。软件主界面效果如图2所示。子窗口也采用Python  Q t 来搭建。在 该软件中新建Dialog  without  Button 窗体,通过工具栏添加标签、按钮、单选按钮、滑动条、复选框等控件。
3图像分割模块的设计及实现
由于篇幅限制,本文以图像分割模块为例来说明系统中各个功能模块设计实现的过程
。该模块中
48中央民族大学学报(A 然科学版)第30卷主要包含基于边界的图像分割和基于阈值的图像分割两部分。
3. 1边缘检测
基于边界的图像分割主要指的是边缘检测算法。本系统中的边缘检测算子包含Canny 算子、Sobel 算子、Scharr 算子、Robert 算子、Prewitt 算子以及Laplacian 算子。对于Sobel 算子、Scharr 算子和Lapla - cian 算子,OpenCV 库中有可直接调用的API 。对于Robert 算子和Prewitt 算子,需要输人固定的模板来 进行模板卷积来实现。可调参数的实现方面,Sobel 算子、Scharr 算子、Robert 算子、Prewitt 算子可以在 子窗口中选择不同方向的锐化,而Canny 算子和Laplacian 算子能够在界面中改变算法中的相关参数〇 测试样例中边缘检测的原图像如图3所示。
@天漳城建大学
H N W I*图2软件主界面 Fig.2 Main interface 图3实例原图像
Fig.3 Example of the original image
3.1.1 Robert 算子边缘检测的实现
需要注意的是,边缘检测时不转换深度的话会导致图像边界的丢失。深度转换实现方法:使用 QFileDialog .getOpenFileName 函数获取选择图片的弹窗,用cvtColor 函数进行灰度变换,使用filter 2D 函 数进行卷积。最后通过convertScaleAbs 兩数把图像的深度转回uint 8类型。Prewitt 算子与Robert 算子 实现的方法相同,两种算子的边缘检测效果如图4所示。程序主要代码如下:
self-image  = cv 2.imdecode ( np .fromfile ( str 2 , dtype  = np .uint 8 ) , -1)
gray  = cv 2.cvtColor ( self-image  , cv 2.COLOR _BGR 2GRAY )
robert 一x  = np .array ([[1,0],[0,-1]])
gradx  = cv 2.filter 2D ( gray , cv 2.CV _32F , robert _x )
absX  = vertScaleAbs ( gradx )
3. 1.2 Scharr 算子边缘检测的实现
Scharr 算子与Robert 算子的实现方法大致相同,只是Scharr 算子在使用中不用输入模板,只需要直 接调用Scharr 函数就可以。上述算子边缘检测的效果如图5所示。程序部分代码如下所示:
gray  = cv 2.cvtColor ( self .image , cv 2.COLOR _BGR 2GRAY )
scharrx  = cv 2.Scharr ( gray , cv 2.CV _64F , 1,0)
x  = vertScaleAbs ( scharrx )
3.2阈值分割
基于阈值图像分割的基本原理是通过设定不同的阈值,对灰度图像的像素集合进行一个划分,得到 的每个子集形成一个与现实景物相对应的区域,各个区域内部具有一致的属性,而相邻区域布局不具有 这种一致属性[5]。
第1期赵洁等:基于Python的数字图像处理课程教学演示系统设计49
图4 Prewitt算子(a)和Robert算子(b)边缘检测实例
Fig.4 Edge detection examples of Prewitt operator (a) and Robert operator(b)
(c) (d)
图5 Sobe丨算子(a)、Scharr算子(b)、Canny算子(c)、Laplacian( d)算子边缘检测实例
Fig.5 Examples of edge detection of Sobel operator( a) , Scharr operator( b) , Canny operator(c) and Laplacian operator( cl)
3.2.1自适应阈值的设计与实现
自适应阈值法是根据图像上的每一个子区域计算与其对应的阈值。实现的方法为:用adaptiveTh-reshold函数对图片进行阐值处理,Adaptive Method的阐值方法设置为ADAPTIVE—THRESH_MEAN_C,意思为阈值取自相邻域的平均值,低于阈值时设置为255,高于阈值时不作处理。主要程序如下:gray= cv2.cvtColor(self.image,cv2.COLOR_BGR2GRA Y)
th3 = cv2.adaptiveThresh〇ld(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY,
50中央民族大学学报(自然科学版)第30卷
self,value,self.value1)
这里self.v alu e l代表一个常数,self.value以及self.valu el是界面输人框中输人的数值。
3.2.2 O tsu阈值法
O tsu阈值法的基本思想是根据图像中像素的灰度特征,将图像中像素分成前景和背景两类,两类 像素的类间方差最大时的阈值即为最优阈值。〇tsu阈值法是根据图像的直方图计算出一个最优阈值,然后根据这个阈值进行图像分割。自适应阈值及Otsu阈值的处理实例如图6所示。
图6自适应阈值(a)以及0U U阈值法(b)实例
Fig.6 Examples of adaptive threshold(a) and Otsu threshold methods(b)
3.3 边缘检测算子的效果对比
通过检测实例对比可以得出,不同边缘检测算子各有优势。Roberts算子检测的边缘与真实边缘更 接近,但是抑制噪声能力差;而Prewitt和Sobel算子对图像进行了平滑处理,有一定的抑制噪声的能力,但是在一定程度上模糊了图像的边缘;Schan■算子和Laplacian算子对不重要的细节没有滤除;Canny算 子可以滤除不重要的细节、噪声等,但是丢失了图像的边、角点信息,检测出的边缘趋于圆滑,与真实的 边缘位置不尽一致。总的来说,Canny算子的结果优于其他算子,它能按照要求将树叶清晰地检测出来,还能对不重要的纹理细节进行较好的抑制[8]。
4美化处理模块的设计及实现
4.1磨皮美白
双边滤波是一种可以保边去噪的滤波算法,也是能够对人脸图像进行磨皮美白的一种算法。在对 人脸图像进行双边滤波的时候,不仅能够较好地对瑕疵进行去除,还能较好地保留脸部信息。双边滤波 使用的函数为bilateralFilter,实现中只需要改变函数中的参数就可以改变美颜的强度。磨皮美白的处 理结果如图7所示。主要程序如下:
self-image= cv2.bilateralFilter(self.image,self.value,self.valuel,self.value2)
这里,self.value表示的是像素的邻域直径,可由sigmaColor和sigmaSpace计算得到。self.v alu e l代 表参数sigmaColor,表本颜空间的标准方差,一般尽可能大。self.value2代表参数sigmaSpace,表7K坐 标空间的标准方差(像素单位),一般尽可能小。
4.2毛玻璃特效
毛玻璃效果是通过用像素点邻域内随机一个像素点的颜替代当前像素点的颜实现。通过两层 循环来遍历图像中的所有像素点,通过random函数来选取随机的像素点,最后使用生成的新像素替换原图像中的所有像素。毛玻璃处理实例如图8所示。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。