APP下载

基于PyQt5的数字图像处理实验平台设计

2021-05-19陆安琴秦婵婵胡圣波李国庆郭子义李凌云

电子元器件与信息技术 2021年2期
关键词:图像处理算子滤波

陆安琴,秦婵婵,2*,胡圣波,2,李国庆,郭子义,2,李凌云

(1.贵州师范大学智能信息处理研究所,贵州 贵阳 550001;2.贵州省教育厅射频识别与传感网络工程中心,贵州 贵阳 550001;3. 华中师范大学物理科学与技术学院,湖北 武汉 430079)

0 引言

《数字图像处理》是初学者学习计算机视觉和图像处理的入门教程,是模式识别和机器视觉研究方向的核心课程。对于该门课程,教师授课难点是只能通过课本向学生讲述数字图像处理的基本原理和理论知识。学生如果只借助课本去学习,内容太抽象,对于课本中具体内容的理解还存在一定的欠缺[1-3]。

基于上述的分析,本文开发了一个基于PyQt5的数字图像处理实验平台,该实验平台是数字图像处理的辅助学习工具,简单易操作,便于学生系统、全面地掌握数字图像处理的基本原理和经典算法。实验平台界面分为菜单栏、工具栏、工作区和状态栏为四个功能模块,菜单栏是放置一些主要操作,工具栏放置一些图像、文字等内容,细节操作和快捷操作,工作区是用于显示,状态栏显示页面提示内容。该平台是集良好的实用性、交互性、移植性于一体,便于教学的数字图像处理实验平台。

1 实验平台的设计思路

基于PyQt5的数字图像处理实验平台是以《数字图像处理》课程理论为基础,在实验平台界面加入实践教学的内容,实验平台系统架构如图1所示。主要包括五个模块,即边缘检测与分割、图像变换、图像滤波、图像改善和综合实例。该实验平台将课本中复杂的理论内容通过不同模块来展示。

2 实验平台的设计与实现

实验平台包含了5个模块的实践教学内容,通过PyQt5中的Qt Designer来创建GUI主界面,在主界面创建一个Qmainwindow主窗口,分别在主窗口上创建菜单栏、工具栏、工作区、状态栏等部件,在工作区创建控件QGraphicsView和QLabel,用于显示图片信息。窗口界面创建好后保存到文件夹下,会生成一个后缀为.ui的文件,然后使用pyui5将.ui转化为.py文件。在命令行编辑指令$File Name $ -o $FileName Without Extension$.py -x,运行后就会生成一个.py的文件。然后将.py文件打包成.exe文件,用户通过双击.exe程序可执行文件,进入到实验平台的主界面进行相应的操作。实验平台GUI主界面如图2所示:

图1 实验平台系统架构图

图2 主界面

2.1 功能设计

本实验平台从图像改善、图像变换、图像滤波、边缘检测与分割和综合实例五个方面进行界面布局。每个模块分别详细向学生展示了图像处理过程和结果,学生通过选择某一模块的功能,就会跳转到相应的子界面,然后进行对应的操作。通过这种方式,可以帮助学生真正掌握图像处理的内容和原理。教师通过实验平台的辅助,在讲授理论基础和基本原理的时候,可以通过实际操作,更直观的向学生阐述算法处理的结果,提升教学效果和质量。

2.1.1 图像改善

图像增强[4]是将图像中不感兴趣的区域弱化,突显出目标区域,改善图像质量,增强识别效果。图像增强结果如图3所示。

图3 图像增强结果

图像复原是将受损的图像尽可能恢复成接近原始图像的过程,实现图像的最优化。由于受损的图像存在噪声[5,6]和干扰等未知因素,所以图像复原过程中会存在很多未知性。通过inpaint()函数实现图像复原,图4是复原的结果。

图4 图像复原结果

部分代码如下:

thresh=cv2.inRange(self.im, np.array([240, 240, 240]), np .array ([255, 255, 255])) #图片二值化处理

kernel = np.ones((3, 3), np.uint8)

hi_mask=cv2.dilate(thresh, kernel, iterations=1)

self.im=cv2.inpaint(self.im,hi_mask,5,flags= cv2.INPAINT_TELEA) #图像扩张和复原

2.1.2 图像变换

图像变换是指图像由一种状态转换为另一种状态的过程,具体内容包括图像旋转、图像镜像和图像缩放等基本内容。图像变换可用于数据增强,制作训练数据集和测试数据集,解决了图片数据量不足导致图像分割、目标追踪等图像处理结果准确率不高的问题。

图像旋转通过将图像以某一点为中心旋转一定的角度,得到一张新的图像。图像旋转具有的属性是旋转前和旋转后的点离中心的位置不变。通过flip()函数实现图像的旋转。

水平镜像是选取目标图像的垂直中轴线作为中心线,将图像左右两边的图像调换,得到一张新的图像。垂直镜像是选取目标图像的水平中轴线为中心线,将图像上下的图像调换,得到一张新的图像。通过transpose()函数实现图像位置的调换,达到镜像效果。

图像缩放是通过改变图像的大小来进而图像中像素的质量,满足用户需求。当图像放大时,图像中的像素的识别度也会提高;当图像缩小时,图像的平滑度和清晰度会增强。通过scale()函数控制图片的缩放,调整图图像缩放片的大小。图5是图像变换的结果。

图5 图像变换结果

部分代码如下:

self.text11 = float(self.text1)

M=cv2.getRotationMatrix2D((cols/2,rows/2),self.text11, 1)

self.text33 = float(self.text3)

sfwidth1 = sfwidth * self.text33

sfheight1 = sfheight * self.text33

self.re_bh_lb.resize(sfwidth1,sfheight1)

2.1.3 图像滤波

图像滤波指的是在保留目标图像的细节特征的同时对其包含的噪声进行处理。主要内容包括均值滤波、中值滤波和高斯滤波等。

均值滤波是指选中某一目标像素,然后求出目标像素相邻的像素的平均值,用该平均值来代替目标像素的值,通过blur()函数实现均值滤波。图6是均值滤波结果。

中值滤波是指求出图像中每个像素领域的像素的中值,然后用该中代替图像中每个像素的值通过medianBlur()函数实现滤波过程。

高斯滤波是指求出图像中每个点以及领域内其他点的像素值,然后进行加权平均,通过GaussianBlur()函数实现高斯滤波,图7是高斯滤波结果。

图6 均值滤波结果

部分代码如下:

self.text11 = float(self.text1)

M=cv2.getRotationMatrix2D((cols/2,rows/2),self.text11, 1)

self.text33 = float(self.text3)

sfwidth1 = sfwidth * self.text33

sfheight1 = sfheight * self.text33

self.re_bh_lb.resize(sfwidth1,sfheight1)

图7 高斯滤波结果

2.1.4 边缘检测与分割

边缘检测利用不同的边缘检测算子实现对图像边缘的提取,所用的算子包括Robert、Sobel算子和Canny算子。通过算子将图像中亮度对比明显的像素点标注出来,常用edge()函数来实现该过程。此功能可对灰度图像进行处理,根据不同的算子,在函数调用中分别选择Robel、Sobel、Canny实现不同算子的处理结果。图8是边缘检测结果。

图8 边缘检测结果

部分代码如下:

img1 = cv2.imread(self.img)

a = cv2.Sobel(img1, cv2.CV_16S, 1, 0)

a = cv2.Sobel(img1, cv2.CV_16S, 0, 1)

s_a = cv2.convertScaleAbs(a)

s_b = cv2.convertScaleAbs(b)

self.im = cv2.addWeighted(s_a, 0.5, s_b, 0.5, 0)

自动图像分割是指向计算机输入算法,计算机根据算法分割出满足约束条件的目标区域。具体包括阈值分割[7,8]、超像素分割、基于区域的分割等。图9是阈值分割结果。

图9 阈值分割结果

交互式图像分割[9,10]是指向图像中加入用户交互信息,即先验知识,帮助计算机更好地分割目标区域。实验平台展示了以一种基于深度学习的交互式图像分割方法,通过融入极值点特征,将RGB图像和极值点特征级联输入到神经网络,经过神经网络进行卷积、池化等操作,提取出目标的特征,通过输出层输出。相对于传统的自动分割方法,该方法特征提取更高效、精确、完整。图10是交互式分割结果。

图10 交互式分割结果

主要代码如下:

dmap=cv2.distanceTransform(tmp,cv2.DIST_L2,cv2.DIST_MASK_PRECISE)

merge_input=np.concatenate((img3,dismap),ax is=2).

inputs = inputs.to(device)

outputs = net.forward(inputs)

2.1.5 综合案例

车牌识别是图像识别技术在车辆牌照识别中的关键技术,该技术有利于车辆管理,电子收费,车辆违章监控,还能通过融合DSRC技术识别车辆身份,本实验平台首先读取图像数据,对图像进行滤波、二值化等预处理,然后通过OpenCV和Canny算子对预处理后的图像进行轮廓查找,根据一些参数来判断查找到轮廓是否为车牌轮廓。车牌识别结果如图11、图12所示:

图11 车牌识别结果

图12 车牌识别结果

3 结语

本文利用Python强大的数值计算、数据分析和图像处理的能力,基于PyQt5设计了一款图形用户界面图像处理实验平台,实验平台集成五大模块,通过实现图像改善、图像变换、图像滤波、边缘检测与分割等功能,涵盖了数字图像处理基础及进阶技术,并通过综合实例阐述了本系统在图像识别中的应用,使图像处理可视化更加直观,便捷。实验平台操作简单、界面友好,具有良好的实用性、交互性、移植性。用户可以通过自行添加模块设置,修改对应的参数,编写回调函数,即可让实验平台发挥更多的功能操作,让图像处理更丰富多彩。现今,数字图像处理呈现出高灵活、广适用、通用强、高精度的特点,应用领域涉及人类生活各个方面,通过设计这一图像处理系统,不仅方便教学,也为图像领域的研究人员提供了分析和解决问题的工具。

猜你喜欢

图像处理算子滤波
与由分数阶Laplace算子生成的热半群相关的微分变换算子的有界性
拟微分算子在Hp(ω)上的有界性
Heisenberg群上与Schrödinger算子相关的Riesz变换在Hardy空间上的有界性
各向异性次Laplace算子和拟p-次Laplace算子的Picone恒等式及其应用
基于ARM嵌入式的关于图像处理的交通信号灯识别
基于图像处理的机器人精确抓取的设计与实现
机器学习在图像处理中的应用
基于图像处理的定位器坡度计算
基于自适应Kalman滤波的改进PSO算法
RTS平滑滤波在事后姿态确定中的应用