基于MATLAB的靶纸图像识别研究
2016-12-19王蔚扬丁嘉月汪鹏洪卢正勇
王蔚扬 丁嘉月 汪鹏洪 卢正勇
摘 要: 针对射击比赛中需要实时并且准确地对射击结果进行检测输出,提出了一种基于MATLAB函数工具箱的靶环数识别方案。采用数码相机拍摄靶纸图像,利用基于MATLAB的图像处理算法对其进行处理从而得出弹着点环数。对靶纸图像进行灰度转换、中值滤波、二值化等预处理,并采用Sobel算子进行边缘提取,减少后续图像处理的数据量。通过靶纸圆环的对称特征,先提取出圆心,将Hough变换降维来求内圆环参数,再结合图像差影法以及形态学处理对弹孔识别定位。实验发现,上述图像处理算法有较快的速度和较好的准确度。
关键词: MATLAB; 预处理; Hough变换; 降维; 形态学
中图分类号:TP391.41 文献标志码:A 文章编号:1006-8228(2016)11-17-04
Research on the image recognition of target sheet with MATLAB
Wang Weiyang, Ding Jiayue, Wang Penghong, Lu Zhengyong
(School of Imformation & Electronic Engineering, Zhejiang Gongshang University, Hangzhou, Zhejiang 310018, China)
Abstract: According to the shooting competition when a real-time and accurate detection of the shooting results is required, a research on image recognition of target sheet with MATLAB is presented in this paper. An image processing algorithm based on MATLAB is used in order to analyse the ring number of impact point on the target sheet captured by digital camera. Grayscale conversion, median filtering, and binariztion of the target sheet image are used in the image pretreatment. Sobel operator is used to extract image edge, so the amount of computation is dramatically reduced. And the bullet hole is recognized and located by using improved Hough transform, image subtraction method and morphological algorithm. The experimental results show that the image processing algorithm has fast speed and good accuracy.
Key words: MATLAB; pretreatment; Hough transform; mension reduction; morphology
0 引言
随着科技的发展,射击比赛时采用自动报靶系统,将会越来越普遍。这种方式不仅能减少人力物力支出、提高报靶效率,还能减小由于人为带来的不确定因素。目前已有不少单位研究出多种自动报靶系统[1-4]。基于机器视觉的自动报靶系统,应用环境要求特殊,还未得到普及[1-4]。本文基于MATLAB函数工具箱实现靶纸弹孔检测的数字化方法,在射击时对靶纸图像进行采集,通过基于MATLAB的图像处理技术对靶纸图像进行处理分析,并模拟图像进行成绩输出。
1 靶纸图像采集读取
靶纸图像采集可以有多种方式,本实验采用最高像素值为300万的数码相机拍摄,图像采集简便,便于推广应用。MATLAB中提供的imread()函数用于实现图像的读取操作,可读取JPG、TIF、GIF、HDF、XWD和CUR等多种图像格式。调用该函数后将得到一个存储图像数据的矩阵,后期对图像的各种处理正是基于该数据矩阵来完成。
2 靶纸图像预处理[1]
2.1 图像灰度化
数码相机拍摄的图像为彩色图像,图像中每个像素都包含有R(红色)、G(绿色)、B(蓝色)三种基色分量信息,每种基色分量均需要占用八位来表示基色强度,数据量较大。为减轻计算机工作量,去除掉部分无用信息,将图像进行灰度化处理,减少后续处理分析耗时。
在MATLAB中采用rgb2gray()函数对图像进行灰度化处理,该函数中三基色的权重系数取值为(0.299,0.587,0.114)[5]。
2.2 图像增强
对靶纸图像增强是为了突出图像中的有用信息,同时对噪声等无用信息进行一定的消除,类似信号处理中的滤波器。图像噪声常常表现为孤立像素点,如果不去除噪声,会对边缘检测、图像变换以及后续的弹孔定位带来影响。MATLAB中提供了平滑滤波器、中值滤波器以及锐化滤波器这三种图像增强滤波器[6]。平滑滤波器本质上类似低通滤波器,只对信号的低频部分有很好地选通性。靶纸图像中对属于高频部分的圆环边缘提取十分重要,采用平滑滤波器将对其造成破坏。锐化滤波器有时会导致输出图像灰度值出现负值,还需要进行相应灰度转换,增加处理工作量。本文采用中值滤波器对靶纸图像进行滤波处理,能有效去除类似斑点噪声及椒盐噪声的孤立像素点,同时较好地保留了图像的边缘信息[2]。这是一种非线性的去噪方法,其基本原理是在图像中一个像素周围确定一个邻域,以该邻域中各像素点灰度值的中值来代换该像素点自身的灰度值[4]。
MATLAB中提供medfilt2()函数用于对图像信息进行中值滤波,二维滤波窗口可以为方形、圆形、菱形等,由图像像素点构成,可在函数中设置窗口形状,默认为像素点的方形窗口[5]。
2.3 靶纸图像二值化
由于对靶纸图像的处理主要是对圆环和弹孔的识别提取,对于图像灰度值并没有特定的要求,所以进一步对图像二值化以去除无用信息。所选取的阈值需要能够有效保留图像特征,保证后续处理的可靠性。对灰度化后的靶纸图像绘制灰度直方图,如图1所示。
从直方图看出灰度值集中在Y<30&Y>220范围内,其中Y<30对应靶纸图像中黑色背景及黑色圆环部分,Y>220对应白色背景以及白色圆环部分,所以阈值TG取值应在30/255
3 基于Hough变换的靶心定位
3.1 Hough变换圆检测原理[2,7]
Hough变换将二维图像平面转换为三维参数空间,采用类似“投票”模式的判断方法。三个参数值分别为圆心的行坐标a,圆心列坐标b,以及半径r。对于图像平面中的任何一个像素点(x,y)都要在三维参数空间内进行遍历运算,若运算结果满足关系式,则对应三维空间中的参数点票数加一。完成运算后,三维空间中“票数”最多(或满足一定数量)的参数点,其参数即为检测到的圆所对应圆心坐标以及半径值。Hough变换检测圆三个参数间的一般关系如下式:
3.2 用于靶纸圆环提取的Hough变换降维算法
从Hough变换原理可知,其运算过程中将会有大量的时空消耗,减少运算维度和参与运算的像素点数可以提高Hough变换效率。前期已对靶纸图像进行预处理得到图像的二值图,减少了参与Hough变换的像素点数。接着,采用Sobel算子对靶纸圆环进行边缘提取。图像边缘是图像局部特征不连续的表现,出现在两个不同图像区域的交界,常常是灰度突变的结果,在灰度突变处进行微分运算将产生高值[8]。MATLAB中通过调用edge()函数进行边缘提取,函数计算结果为和输入图像一样大小的二值图。边缘提取对图像的特征信息进行提取,进一步减少Hough变换算法的工作量,减少运算时间。
由于靶纸圆环均为同心圆环,只存在一个位置固定的圆心。经边缘提取后的图像是由像素点组成的多个同心圆环,圆环特征较为明显,考虑降低Hough变换的计算维度来提高计算速度[9],先进行靶纸圆心的提取,将圆心横纵坐标分别提取。首先是横坐标的提取,以平行于X轴的扫描线,自图像顶部向下纵向扫描。此时靶纸上圆环边缘点值为“1”,背景为“0”,因此每向下扫描一行,记录该行i中间距最大的两个“1”值像素点的横坐标分别为、,直至扫描完图像。接着,以平行于Y轴的扫描线,自图像左边向右横向扫描,记录像素点纵坐标分别为ali、a2i,直至扫描完图像。若某行只存在一个“1”值点,则跳过该行。距离最远的两“1”值点为最外圈圆环上的点,坐标中值(ami,bmi)即为对应圆心坐标,计算公式如下:
由于边缘提取后的圆环边缘不完全连续,且可能存在弹孔边缘信息以及噪声点,若以文献[10]中尽量多弦交点的简单统计平均来计算坐标,将引入上述影响因素,导致圆心定位出现误差。因此,采用类似Hough变换证据积累的判断方法,对每行/列扫描得出的中值坐标采取投票的积累方式,出现相同的中值点坐标时则对该坐标对应“票数”Na[ami]加1,当遍历完整幅图像时,找出“票数”最多的中值点坐标ammax。此处,可设置一个阈值Ta,考虑到图像像素点的离散化以及边缘提取带来的影响,将中值坐标满足
内的对应点ami求和,接着求取平均值,此平均值记为圆心坐标a。同理得b。通过这种方法可以有效减少非最外圈圆环上弦交点即错误点或者噪声点的干扰的影响。MATLAB中调用sum()函数用于求和,调用max()函数用于求取最大值。坐标关系式如下:
上述算法的部分MATLAB代码如下:
%BW为边缘提取后靶纸图
[rows,cols]=find(BW); %搜索1值像素点
mount=size(rows); number=mount(1);
i=1; j=1;
while(i xjd(j,1)=rows(a); while(i if(cols(i)==cols(i+1)) xjd(j,2)=rows(i+1);i=i+1; else i=i+1; j=j+1; break; end end end number=length(xjd); Na=zeros(1,number); for n=1:number%for循环计算中值及票数 zz(n)=round((xjd(n,1)+xjd(n,2))/2); Na(zz(n))=Na(zz(n))+1; end [amax,id]=max(Na); %找出票数最多中值点 a=(Na(id)*id+Na(id-Ta)*(id- Ta)+Na(id+Ta)*(id+Ta))/ sum(Na(id-Ta:id+Ta))%基于阈值Ta计算均值得坐标a 根据机器视觉中的ROI(Region Of Interest)理论,恰当选取ROI能有效减少图像运算的计算量[11]。根据先验知识图像采集时圆心处于图像中部区域,将待验证像素点所处范围设定为图像中部的矩形区域,该矩形区域边长设为图像边长的1/4,由此进一步减少参与运算的像素点。本算法将圆的参数方程写为极坐标形式:
已知圆心坐标,根据先验知识设定r的可能取值范围,遍历计算感兴趣区域中的边缘点,采用上述Hough变换证据积累的方法得到r[9],且设定一个阈值Tr,减少离散数据带来的误差。阈值的设定使得对于一些存在干扰的靶纸图像也能有效地进行圆环检测,例如靶纸存在一定形变或者是子弹击中内圆环带来的干扰,提高了算法的鲁棒性。
4 基于图像差影法的弹孔定位[12]
4.1 图像差影算法[2,4]
本文在弹孔定位的分析上,将弹孔视为一个运动目标,每次射击后弹着点都不同,近似为目标的运动过程。运动目标的检测算法有帧间差分法、背景差分法以及基于光流场的检测方法,图像差影法是利用当前图像与初始图像进行减运算来提取目标的一种检测方法[13]。首先,采集射击前的靶纸图像以及本次射击后的靶纸图像,将两幅图像视为视频中的前后两帧图像,接着采用帧间差分法获得弹孔信息,并将弹孔图像二值化处理。
4.2 形态学滤波处理[3]
提取的弹孔图像可能会包含噪声,将会导致弹孔定位出现误差,对该图像进行先腐蚀后膨胀处理的开运算[5]。在MATLAB中调用imerode()函数对图像进行腐蚀操作,去除图像中小而无意义的噪声像素点;接着调用imdilate()函数对图像进行膨胀操作,使弹孔区域恢复至原始大小,即消除由于腐蚀对弹孔面积带来的影响。两个函数均采用strel()函数定义一个结构元素,其在形态学中的作用好比滤波器中的滤波窗口,该函数支持创建线形、矩形、方形、球形和自定义类型等的结构元素。
实现弹孔提取及定位的部分MATLAB代码如下:
b=imread('current.jpg'); %靶纸读取
B=I-b; %射击前后的靶纸图像差影
B=im2bw(B,T); %基于阈值T进行二值化
subplot(221),imshow(B)
se=strel('square',2); %定义方形结构元素
imeBW=imerode(B,se); %图像腐蚀
subplot(222),imshow(imeBW)
imdBW=imdilate(imeBW,se); %图像膨胀
subplot(223),imshow(imdBW)
[row,col]=find(imdBW==1); %搜索弹孔
x=min(col); w=max(col)-x;
y=min(row); h=max(row)-y;
subplot(224),imshow(imdBW)
hold on; %图像保持
rectangle('Position',[x,y,w,h],'LineWidth',1,'EdgeColor',
'w'); %框弹孔区域
5 实验结果
仿真实验在2.3GHz,RAM为4GB的计算机上进行,采用MATLAB8.2语言编写代码。本次实验采用靶纸满环11环,且不同环数圆环半径差相同。实验结果如图2、图3和图4所示。
求得弹着点环数及误差。其中(a,b)为环心坐标,(xd,yd)为弹孔坐标,r为中心圆环半径,Hj为环数计算值,Sj为人工计算值(采用尺规法测量),ρ为环数相对误差。计算结果若为负数,则判为脱靶。靶纸测试结果如表1所示。
6 总结
基于MATLAB函数工具箱的图像处理,函数调用方便,程序设计高效。首先通过图像预处理去除无用信息,接着将Hough变换算法降维进行内圆环的定位,最后搜索定位弹孔,求出弹着点坐标,方案适用于圆环完整的靶纸识别。计算出的射击环数相比人工计算误差在0.1环以内,且计算速度较快。进一步,可考虑靶纸形变带来的影响或将方案转换为硬件系统以提高实时处理性能,可以应用于射击比赛中的自动报靶系统,免去人工报靶可能带来的不确定性因素,提高比赛的公正度和效率。
参考文献(References):
[1] 周晓伟.基于图像处理的自动报靶系统研究[D].中北大学硕
士学位论文,2011.
[2] 陈海萍.基于机器视觉技术的模拟射击训练系统研究与设计[D].
厦门大学硕士学位论文,2012.
[3] 罗真.基于图像处理的自动报靶系统设计[D].中南大学硕士
学位论文,2014.
[4] 谢殿强.基于ARM-Linux机器视觉的军用自动报靶系统的
研究[D].山东大学硕士学位论文,2009.
[5] 周品.MATLAB图像处理与图形用户界面设计[M].清华大学
出版社,2013.
[6] 叶雯.基于MATLAB的图像去噪研究[J].计算机时代,
2015.6:10-12
[7] 陈小艳,王强,李柏林.改进的Hough变换检测圆方法[J].计算
机系统应用,2015.8:197-201
[8] 蒋先刚.数字图像模式识别工程软件设计[M].中国水利水电
出版社,2008.
[9] 赵京东.用两步Hough变换检测圆[J].计算机应用,2008.7:
1761-1763
[10] 孙蓉蓉.图像处理技术在自动报靶系统中的应用研究[D].南
京理工大学硕士学位论文,2006.
[11] 孙国栋,赵大兴.机器视觉检测理论与算法[M].科学出版社,
2015.
[12] 崔亚琳.基于计算机视觉的射箭精确自动报靶系统研究[J].
火控雷达技术,2015.12:27-30
[13] 李孟歆,范静静,张颖等.一种基于多重判别的运动目标检
测算法[J].沈阳建筑大学学报(自然科学版),2013.4:750-756