【图像处理】基于计算机视觉实现自动报靶系统Matlab代码

300 阅读4分钟

1 简介

随着科学技术的不断发展,人类的生活和工作日趋自动化。在射击比赛和部队射击训练中,为了减少报靶时间,提高比赛和训练的效率以及公平性,自动报靶方式也正逐渐取代传统的人工报靶方式。本文围绕自动报靶系统进行展开,分析了目前国内外自动报靶系统的研究现状,重点对基于图像处理技术的轻武器胸环靶实弹射击自动报靶系统进行研究。首先,根据传统的轻武器射击训练和报靶流程,结合现有基于图像处理技术的自动报靶系统设计,制定了一套采用无线组网通信的总体设计方案;分析室外复杂环境下图像传感器采集的胸环靶靶纸图像成像特点,制定了自动报靶系统图像处理模块的总体方案,即:先定位现场靶纸图像中的有效靶面区域,提取靶面图像,再根据靶面特征标记靶面各环区,最后识别弹孔,以其中心位置所处的环区判定成绩。然后,重点对自动报靶系统的图像处理模块进行分析和研究:1.分析室外复杂环境下图像传感器采集到的胸环靶靶纸图像的特点,在传统的图像HSI色彩空间中各分量的定义和特点的基础上,定义了一种去红饱和度的概念,提出了一种基于颜色和边缘特征的有效靶面定位和提取算法;2.分析靶面图像中各目标区域的颜色特征,提出了一种基于逐级“种子”填充的环区标记算法,直接利用靶面图像中的特征,标记靶面相应区域的环值;3.分析靶面图像弹孔局部区域的颜色和灰度突变特征,提出了一种基于局部颜色和灰度突变特征的弹孔识别算法,并通过判断识别的弹孔中心位置所处的环区来判定成绩。最后,根据本文提出的图像处理算法,通过MATLAB软件的GUIDE开发环境,开发了一套功能相对完整且简单实用的自动报靶系统软件平台,并对室外复杂环境下采集的30幅尺寸和拍摄角度均各异的靶纸图像进行了测试实验。结果表明,本系统的环境适应能力较强、稳定性较高、实时性较好,且受图像采集硬件设备的制约较小,基本满足实际报靶应用的要求,对实际应用具有一定得参考价值。​

2 部分代码

function varargout = shoot_system(varargin)

end

x_center=x_count/n;
y_center=y_count/n;


banjing_1=zeros(1,n);
for i=1:n
   banjing_1(i)=(banjing(i,1)+banjing(i,2))/2;
end
banjing_2=sort(banjing_1);
count=0;
for i=1:(n-1)
   count=count+abs(banjing_2(i)-banjing_2(i+1));
end

lamda=count/(n-1);   
msgbox('处理完成!')



% --- 模拟打靶,方法是把有弹点图像叠加到源图像中
function pushbutton3_Callback(hObject, eventdata, handles)

global num
global after
num=num+1;
NUM=7;
 for i=1:NUM
    switch num
        case{1}
            after=imread('b2.jpg');
            axes(handles.axes1);
            imshow(after);
            break
        case{2}
            after=imread('b3.jpg');
            axes(handles.axes1);
            imshow(after);
              break
        case{3}
            after=imread('b4.jpg');
            axes(handles.axes1);
            imshow(after);
              break
        case{4}
            after=imread('b5.jpg');
            axes(handles.axes1);
            imshow(after);
              break
        case{5}
            after=imread('b6.jpg');
            axes(handles.axes1);
            imshow(after);
              break
        case{6}
            after=imread('b7.jpg');
            axes(handles.axes1);
            imshow(after);
              break
        case{7}
            after=imread('b8.jpg');
            axes(handles.axes1);
            imshow(after);

     end
             
end

% --- 图像减影,把弹孔分割,滤除弹孔的噪声,弹孔的环值识别
function pushbutton4_Callback(hObject, eventdata, handles)

global after
global before
global x_center
global y_center
global lamda            %靶环间的间隔距离
global num

%图像减影,及滤除弹孔的噪声
K=imabsdiff(after,before);
K2=im2bw(K,0.05);
K2=medfilt2(K2,[4,4]);
K2=medfilt1(double(K2),8);
%imshow(K2);

[L,n]=bwlabel(K2,8);
all_ba=zeros(1,num);
for j=1:n
[r1,c1]=find(L==j);
rc1=[r1 c1];
[x,y]=size(rc1);

3 仿真结果

4 参考文献

[1]尹乾. 基于图像处理技术的自动报靶系统研究[D]. 重庆大学.

部分理论引用网络文献,若有侵权联系博主删除。

5 MATLAB代码与数据下载地址

见博客主页头条