⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 baobafinal.m

📁 该程序是我研制的“基于ARM9的无线自动报靶系统”的MATLAB算法的仿真验证部分 该程序的主要功能是对靶纸上的靶点和靶环进行提取和计算
💻 M
字号:
clear;
close all;
I=imread('bazi.bmp');
imshow(I);
figure;
level = graythresh(I);%类间方差阈值分割
BW = im2bw(I,level);  %图像二值化
imshow(BW); %显示二值化后的图像  
C=bwmorph(BW,'thin',1); %二值化后的图像再进行细化处理
%-------------------------------------求靶图同心圆圆心坐标
D=[];
D1=[];
E=[];
E1=[];
for i=20:49:1000
    for j=3:512
        if C(i,j)==0
            D=[D;i,j];
            break;
        end
    end
        for k=1020:-1:512
            if C(i,k)==0
                E=[E;i,k];
                break;
            end
        end
end
F=[D(:,2),E(:,2)];
[x,y]=size(F);
sum1=0;
for i=1:x
    sum1=sum1+(F(i,1)+F(i,2))/2;
end
cir_ver=sum1/x;  %得到圆心的纵坐标
for j=20:49:1000
    for i=3:512
        if C(i,j)==0
            D1=[D1;i,j];
            break;
        end
    end
        for k=1020:-1:512
            if C(k,j)==0
                E1=[E1;k,j];
                break;
            end
        end
end
F1=[D1(:,1),E1(:,1)];
[x1,y1]=size(F1);
sum2=0;
for i=1:x1
    sum2=sum2+(F1(i,1)+F1(i,2))/2;
end
cir_hor=sum2/x1; %得到圆心的横坐标
cir_heart=[cir_hor,cir_ver];   %圆心坐标以向量形式保存
%---------------------------------------------------------------弹孔识别
J=imread('bazi9.bmp');
K=abs(I-J);
figure;
imshow(K);%显示差影法得到的弹孔灰度图像
figure;
L=zeros(1024,1024);%弹孔灰度图像二值化
for i=1:1024
    for j=1:1024
       if  K(i,j)<=19
           L(i,j)=0;
       else
           L(i,j)=1;
       end
    end
end
imshow(L);%显示弹孔二值化图像
se=strel('disk',4);%形态学运算去除背景及弹孔噪声,并使弹孔圆滑
LC=imClose(L,se);
se1=strel('disk',4);
Lo=imopen(LC,se1);
figure;
imshow(Lo);%显示形态学处理后的弹孔图像
%--------------------------------------------------------------- 环数判定
[x2,y2]=find(Lo==1);
x_danxin=mean(x2);
y_danxin=mean(y2);
danxin=[x_danxin,y_danxin]; %弹孔中心坐标
dis_dy=sqrt(norm((danxin-cir_heart).^2,1)); %弹孔中心与圆心的距离
G=[];
cir=round(cir_hor+cir_ver);
for i=4:510
 if (C(i,cir-i)==0)&((cir-i)~=1024)
      G=[G;i,cir-i];
      break
 end
end
R5=sqrt(norm((cir_heart-G).^2,1));%求靶环的最外环(5环)的半径
H=[];
for i=G(1,1):round(cir_hor)
    for j=G(1,2):-1:round(cir_ver)
    if(C(i,j)==1)&((j==cir-i)||(j==cir+1-i))
        H=[H;i,j];
    end
    end
end
R6=sqrt((cir_hor-H(1,1))^2+(cir_ver-H(1,2))^2);%6环半径
R7=sqrt((cir_hor-H(2,1))^2+(cir_ver-H(2,2))^2);%7环半径
R8=sqrt((cir_hor-H(3,1))^2+(cir_ver-H(3,2))^2);%8环半径
R9=sqrt((cir_hor-H(4,1))^2+(cir_ver-H(4,2))^2);%9环半径
R10=sqrt((cir_hor-H(5,1))^2+(cir_ver-H(5,2))^2);%10环半径
hju=((R9-R10)+(R8-R9)+(R7-R8)+(R6-R7)+(R5-R6))/5;%环间距离
if dis_dy<=R10,
    bashu=10;
else if R10<dis_dy<=R9
        bashu=9+(R9-dis_dy)/hju;
    else if R9<dis_dy<=R8
            bashu=8+(R8-dis_dy)/hju;
        else if R8<dis_dy<=R7
                bashu=7+(R7-dis_dy)/hju;
            else if R7<dis_dy<=R6
                    bashu=6+(R6-dis_dy)/hju;
                else if R6<dis_dy<=R5
                        bashu=5+(R5-dis_dy)/hju;
                    else 
                        bashu=0;
                    end
                end
            end
        end
    end
end
bashu%求得靶数
                    



            





        







⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -