基于MATLAB的靶纸图像识别研究
- 格式:doc
- 大小:27.00 KB
- 文档页数:8
龙源期刊网
基于MATLAB的靶纸图像识别研究
作者:王蔚扬 丁嘉月 汪鹏洪 卢正勇
来源:《计算机时代》2016年第11期
摘 要: 针对射击比赛中需要实时并且准确地对射击结果进行检测输出,提出了一种基于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所示。
从直方图看出灰度值集中在Y220范围内,其中Y220对应白色背景以及白色圆环部分,所以阈值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