马仁杰
淮北师范大学物理与电子信息学院,安徽,淮北,235000
图像目标识别与检测,在模式识别领域中应用广泛,尤其在计算机视觉领域中有着重要的应用。目标识别的主要任务是在一幅图像中确定某类目标是否存在,而目标检测的主要任务是确定图像中目标的位置,在光电成像观测任务中,目标识别和检测是其中的一个重要环节,对目标快速准确地识别和检测不仅可以为跟踪任务提供保障,而且也能为系统的决策提供支持。
本文基于第四届安徽省大学生光电设计竞赛,利用MATLAB设计图像处理软件,只需进行傻瓜式操作即可实现对CMOS相机采集的比赛图像进行缺口识别,缺口像素数显示在缺口位置处,其中的图像识别与检测算法设计方法、图像处理软件设计具有代表性,也可用于其他相似类型的图像处理。
图像目标的识别与检测是图像处理领域研究最多的课题之一,图像识别的发展经历了文字识别、数字图像处理与识别、物体识别三个发展阶段。文字识别一般指的是识别字母、数字和符号,常见应用包括拍照识别、文档检索。数字图像与模拟图像相比更易存储、可压缩传输更方便等优势,这些巨大优势促进了数字图像处理技术的迅速发展,广泛应用于军事刑侦、机器视觉等领域。物体识别始于20世纪50年代,包括物体的定位与分类,应用于商品识别、车辆识别等。自从2012年利用卷积神经网络搭建的AlexNet取得了巨大成功,各种目标检测算法模型便随之井喷式增长,图像深度学习算法相比于传统识别方法,可以提取更深层次的图像特征,在海量数据的支持下,深度学习算法学习到的模型表达能力更强,也更加有效,对图像处理的精度与速度的提升具有重要意义。
背景介绍:MATLAB中文意为矩阵实验室,是美国MathWorks公司出品的一款以数学计算为主的高级编程软件,由于MATLAB语言在复杂的数值分析、矩阵运算、信号处理等方面具有明显的优势,故在制作需要对大量数据进行各种运算和处理的软件时,在GUI中利用MATLAB语言编写程序是一个很好的选择[1],具有众多突出优点,已成为科研工作人员进行科学研究的有力工具。
MATLAB使用包含两个部分:核心部分和各种可选的工具箱。核心部分中拥有众多内部功能函数,工具箱主要包括功能性工具箱和学科性工具箱两大类。本实验利用MATLAB中GUI组件、通过算法集成、采用底层代码,实现了图像简单处理、图像变换等能够与用户交互、图像处理过程可视化的功能[2],MATLAB采用的是一种脚本式的解释性语言,基本的语言环境中由于包含了成千上万的功能函数,极大地提高了用户的编程效率,并且它以数组为基本计算单元,语法规则简单,不需要任何类型声明,运行时,只需点击一下运行键,系统一次性即可完成编译、链接和运行工作。
在MATLAB中,通过imread函数可以将已采集的bmp图像读取后放入一个三维矩阵(由三个二维矩阵组成),分别存放图片中的RGB三个色彩,再将RGB图像数据类型转换为双精度方便后续的阈值处理,figure(1)用于作图,imshow(I)用于将矩阵代表的图像显示在窗口上,并用title函数为已经显示的图片加标题[3]。MATLAB读取的图像如图1所示。
图1 读入的图像
图像在获取的过程中,由于成像系统和目标物并非完全固定不变,其稍微位置变化就可能会引起采集的图像中目标检测区域的扭曲、比例失调等图像退化现象(几何失真/畸变),因此有必要通过校正图像目标区域以增加缺口检测的准确性、后续目标检测算法的鲁棒性。解决这种几何失真问题的方法叫几何校正,几何校正先对图像进行几何变换,使像素变换到正确位置上,然后需要重新确定新像素的灰度值[4]。在本次实验中,可根据白色单像素正方形的RGB值均为1的特点,利用斜率公式求出白色单像素正方形整体需要旋转的角度及方向,并使用MATLAB中自带的imrotate函数、imwarp函数,采用双线性插值法即可使得图像几何校正的同时减小其失真,如图2所示。
图2 校正图
(1)图像二值化。为方便正方形缺口检测,需要将灰度图通过阈值分割转化为二值化图,利用图像二值化对图像特征进行提取[5],将灰度图变为黑白单像素图后,不仅可以让图像目标区域轮廓凸显,而且可以减少检测中的巨大运算量。阈值的选取是否合适很大程度上决定了二值化效果的好坏,阈值法计算简单,具有较高的运算效率,是图像分割中广泛采用的方法,主要分为全局阈值法和局部阈值法[6],本文采用全局阈值法,阈值就相当于黑白像素的分界线,低于阈值的像素点设置为0值,高于阈值的像素点设置为1值,且0值对应黑色,1值对应白色。阈值分割实现主要分为两类:①通过人工选择阈值分割图像;②自动选择阈值进行分割。通过多次对比测试表明,人工选择阈值法更加适合该类图像,并通过大量数据测试结果表明,当阈值选取为0.754时,缺口的识别检测最有效和准确,二值化校正后如图3所示。
图3 二值化校正图
(2)图像滤波。图像滤波的一个重要目的就是在尽量维持图像的细节特征前提下对图像的噪声进行抑制,由于图像噪声的影响难以避免,因此几乎任何图像处理都离不开图像滤波,而针对不同噪声需要对应不同的滤波方式,滤波方式主要分为时域去噪和频域去噪。时域去噪即通过IIR或FIR滤波,其代表方法有加权平滑法、中值滤波、二值形态学法等;频域去噪即先通过快速傅里叶变换去除噪声再逆快速傅里叶变换,其代表方法有经典数字滤波器、同态滤波、小波分析等。经过分析比较,本文采用中值滤波法,它不仅具有抑制干扰脉冲和点状噪声的作用,而且可保持较好的图像边缘,在MATLAB里自带的中值滤波函数是medfilt[7],滤波前如图4,滤波后如图5所示。
图4 滤波前
图5 中值滤波后
(1)霍夫直线检测。霍夫变换是一种非常重要的特征提取手段,在图像处理中不可或缺,而直线、矩形、圆的识别又是图形识别的基础[8],可用其提取各种形状边界,常用于车道线检测、车牌检测等场合。霍夫变换其实就是把一条线的边界用点来表达,二值化图像上的一点都有可能是候选直线集合的组成,将图像空间中的直线转换到参数空间(极坐标系)中的点后通过执行投票方法找出最多正弦曲线数通过的一点(r,θ),此时,所得到的(r,θ)即为所求的直线极坐标参数。本文采用经典霍夫变换进行白色单像素正方形四边直线的检测,并采用白色方形框标记出峰值点,霍夫直线检测中核心语句一为:
Peaks=houghpeaks(H,4,‘threshold',ceil(0.3*max(H(:))));
式中,H是指霍夫变换后的矩阵,4表示在H矩阵中设置4个峰值点,‘threshold'是指极值点若低于0.3*max(H(:)),其像素不会被考虑,如图6所示。
图6 直线检测参数空间图
霍夫直线检测中另一核心语句为:
lines=houghlines(I,T,R,P,'FillGap',1,'MinLeng th',15);
式中,lines指结构体数组,其长度是找到的直线的条数,而每个数组元素包含四个部分。I为读取的图片,T和R分别是对应变换过来的极坐标(r,θ)中的角度θ和半径值r。P是峰值,FillGap表示模式,1表示同一幅图像中同一方向两条直线的距离的阈值,小于阈值则视为一条直线,MinLength是一个正实数,用来确定是否保存线条。如果线条长度小于15像素,线条将会被擦除,否则就保存下来。
(2)霍夫直线标记。通过霍夫直线检测可以找到数条满足预定条件的线段,将已经检测出的一些线段的两端端点分别用蓝色和红色的圆点表示,用plot函数将每条线段两端点连接即可得到线段,这些线段用绿色标记,又由赛题知:正方形每条边长度为1000像素,分为7个区域,如图7所示。
图7 每条边的区域分割
其中1,3,5,7大小为100像素,2,4,6大小为200像素,缺口出现在2,4,6区域中,每个区域有且只有1个缺口,每条边3个缺口,目标物中一共12个缺口。缺口像素数的选定:从0~12共13个数字中随机挑选12个数字作为缺口像素数,如缺口像素数为0,则图中不会出现缺口,但仍认作有缺口,缺口像素数为0,每个数字至多只出现1次。由此可知,若霍夫直线检测出的所有线段中某一边只识别出了两个缺口且该边出现了图像里最长线段,则该线段中点是缺口像素数0的可能性最大,因此可以直接将其标记为0,该线段标记为红色,如图8所示。
图8 霍夫直线标记图
(1)缺口大小检测。经霍夫直线检测后已得所有线段的端点坐标值,将同一方向相邻端点距离求出即为该缺口大小,需要注意缺口像素数是从0~12中的13个数字中随机挑选12个数字,每条边最多出现3个缺口,由于评分细则中有“根据判断图像缺口像素数是否正确给分,答对得3分,不答得0分,答错扣1分”,因此,宁可少检测出一个缺口大小也不能多检测出一个错误缺口大小,尽量提高分数。根据组委会图片缺口识别检测结果,通过横向、纵向放大对比数十幅图像中共计上百个缺口形态特征(根据已标记的红色/蓝色端点前后左右黑白像素点的分布情况)可以将其将其划分为数种典型缺口特征,如图9所示,针对这些典型缺口特征,可以充分发挥出程序模块化的优势:不但便于程序结构的划分和编程设计的分工,还能增加程序可移植性和加快设计的速度[9]。根据每种典型缺口特征并对照其标准缺口大小设置相应if-end语句以将缺口检测结果进行相应处理,如加上1像素或减去1像素等情况,即利用大量样本通过人工提取目标特征来提高缺口检测准确率。
图9 典型缺口特征示例
(2)缺口大小标记。缺口检测完毕后需要针对这些缺口进行选择性标记,不合赛规的缺口不予标记,但检测出来的缺口,其中线段端点到四个拐角点的距离小于80将不予显示,此外,还需要将检测出来的缺口大小与答案库(0~12其中的12个数字)对照,若不在答案库中则一定不予显示,最后用text函数将所有符合条件的缺口标记出来,结果如图10(a)所示,组委会官方正确标记图如图10(b)所示。
图10 标记图
GUI译为图形用户界面(Graphical User Interface),又叫作图形用户接口,是用图形化方式显示的可视化计算机操作用户界面,人机交互界面是人与控制器终端进行通话的主要通道,一个较复杂的控制系统往往需要进行人机界面的设计[10]。根据竞赛要求知,图像处理软件界面必须包括“开始”按钮、“打开”按钮,打开MATLAB自带的软件设计工具箱后,在设计视图中进行组件的设置布局,设计视图如图11所示。
图11 设计视图
然后在代码视图的回调函数中插入相应组件的功能代码,实现功能如点击“打开”按钮后弹出FileOpen 对话框,选择保存的图片进行处理。软件完成竞赛内容后,要求弹出消息框进行提示,并保存数字图像文件。数字图像文件以校名+队名命名。在生成图像中间的时间标识的下方加入学校的校名+队名+参赛队员的姓名等标记,保存目录为图像处理软件同级文件夹,代码视图如图12所示。
图12 代码视图
先进行APP运行测试;GUI设计完毕利用组委会提供的测试图片进行测试,再打包APP应用;在程序运行成功后,将程序打包为一个可脱离MATLAB软件的独立可执行exe文件,既保护源代码又便于用户傻瓜式操作。打开设计好的软件,点击用户界面“载入图片”键后再点击“缺口检测”键即可实现对采集图片的缺口检测,如图13所示。
图13 图像处理软件界面
图像缺口检测软件设计基于MATLAB平台,针对CMOS相机所采集的RGB图像,通过三大步骤即图像预处理、目标识别与检测、GUI设计实现软件主体设计。实验结果表明:(1)该自行设计的图像处理软件性能较为优越,对组委会提供的同一类型图像缺口的识别率在90%以上,图像缺口大小检测正确率在70%以上,综合评分在全省各校共计四十余支队伍中名列第五。(2)人工提取图像目标特征耗时费力,难以将待检测目标和干扰噪声准确区分,在图像二值化确定阈值、归类图像典型缺口特征时,如果使用基于深度学习的目标识别算法则可以自动且准确地提取特征,解放人力,将卷积神经网络模型运用于图像特征识别将是笔者今后关注并学习的一大方向。