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

📄 require.m

📁 matlab编写的路标识别系统
💻 M
字号:
%生成函数 imshowage=Require();将图片中的路标提取出来,并保存为result.png,保存在当前目录;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%将原图象初始化为待提取的图象;
function [imshowage,flag]=Require(ima)
%clear
%clear
%[FileName,PathName] = uigetfile({'*.*';'*.bmp'},'File Selector');
%I=imread(FileName);

%I=imresize(I,[592 748]);
I=ima;
%figure,imshow(I);title('原图');
%I=imresize(I,[592 748]);
Hsv=rgb2hsv(I);   %将图像由RGB颜色空间转化为HSV颜色空间
%figure,imshow(Hsv);title('Hsv');
I1=Hsv(:,:,1);    %记录颜色亮度为1的数据,以便之后再利用颜色阀值找出红色
%figure,imshow(I1);title('Hsv(:,:,1)');
BW=roicolor(I1,0.0277,0.032); %利用颜色阀值将红色对象都都显示为白色,其余都为黑色,至此完成图象的二值化
%figure,imshow(BW);title('只显示红色');
se=strel('disk',10); %创建一个指定半径10的平面圆盘形的结构元素
BW1=imclose(BW,se);%将图象置白色;
SE=ones(10);
PZ=imdilate(BW1,SE);%将二值图象膨胀;
%figure,imshow(PZ);title('膨胀后的图象');
TC=bwfill(PZ,'holes');
%figure,imshow(TC);title('填充后的图象');
L=bwlabeln(TC); %对连通对象的各个分离部分进行标注,L中包含了连通对象的标注。默认值为8连通。
S=regionprops(L,'Area','Centroid','BoundingBox');  %获取标记图像L中所有区域的一系列特征付给S
cent=cat(1,S.Centroid);%把S.Centroid沿第一维排列
boud=cat(1,S.BoundingBox); %把S.BoundingBox沿第一维排列
Len=length(S); 
t2=0;t4=0;t7=0;t8=0;

 
for i=1:3
    Max(i)=0;
    MR(i)=0;
    MX(i)=0;
    MY(i)=0;
end
Max1=0;Max2=0;Max3=0;ttq=0;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%提取出路标位置;
%根据各填充块的面积,找出其中最大的三个填充块,分别存于Max1、Max2、Max3
for (i=1:Len)
    if (S(i).Area>=Max1)
        Max3=Max2;Max(3)=Max(2);
        Max2=Max1;Max(2)=Max(1);
        Max1=S(i).Area;Max(1)=i;
    else if(S(i).Area>=Max2)
            Max3=Max2;Max(3)=Max(2);
            Max2=S(i).Area;Max(2)=i;
          else if(S(i).Area>=Max3)
                  Max3=S(i).Area;Max(3)=i;
              end
          end
      end
end  
if((Max(1)&&Max(2)&&Max(3))==0)
    imshowage=0;errordlg(' 没有路标!!','基本信息');
else
for i=1:3
    tz(i)=0;
    Mblen(i)=0;
    Mbwid(i)=0;
end
[hang,lie,r]=size(BW);
for i=1:3
    
    X=cent(Max(i),1);Y=cent(Max(i),2);%白色为1;
    MX(i)=round(X);MY(i)=round(Y);
    bx=boud(Max(i),1);by=boud(Max(i),2);blen=boud(Max(i),4);bwid=boud(Max(i),3);
    bx1=round(bx);by1=round(by);Mblen(i)=round(blen);Mbwid(i)=round(bwid);
    if (blen>=bwid)
        MR=bwid;
    else
        MR=blen;
    end
 
    if (MX(i)+round(MR/4)<=lie&&MY(i)+round(MR/6)<=hang&&TC(MY(i)+round(MR/6),MX(i)+round(MR/4))==1)
        t2=1;  
    end
 
    if (MX(i)-round(MR/4)>0&&MY(i)-round(MR/6)>0&&TC(MY(i)-round(MR/6),MX(i)-round(MR/4))==1)   
        t4=1;
    end
    
   if (MY(i)+round(MR/6)<=hang&&MX(i)-round(MR/4)>0&&TC(MY(i)+round(MR/6),MX(i)-round(MR/4))==1)
        t7=1;
    end
     if (MY(i)-round(MR/6)>0&&MX(i)+round(MR/4)<=lie&&TC(MY(i)-round(MR/6),MX(i)+round(MR/4))==1)
        t8=1;
    end
    
   
    if(t2&&t4&&t7&&t8&&S(Max(i)).Area/(hang*lie)>0.01) %当对象的象素少于1000的时候默认他不是路标
        tz(i)=1; 
        t2=0;t4=0;t7=0;t8=0;
    end
end  
end
 
if tz(3)==1  
    YC=bwareaopen(TC,Max3);
elseif tz(2)==1
        YC=bwareaopen(TC,Max2);
    else
         YC=bwareaopen(TC,Max1);
     end
 end
 %figure,imshow(YC);title('只显示最合适的对象');%最多只显示三个面积最大的对象


if(((tz(1)+tz(2)+tz(3))==0))
    imshowage=0;errordlg(' 没有路标!!','基本信息');

    end  
   
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %找出最佳对象的位置; 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%显示路标图象
flag=[0 0 0];
for i=1:3
    if(tz(i)==1)
        high=Mblen(i); %Mblen(i)是对应矩形的长
        liezb=round(MX(i)-Mbwid(i)/2); %MX(i)对应质心的X坐标
        hangzb=round(MY(i)-Mblen(i)/2); %MY(i)对应质心的Y坐标
        width=Mbwid(i); %Mbwid(i)是对应矩形的宽
        flag(i)=1;
Iresult=imcrop(I,[liezb hangzb width high]);  
    if(i==1)
%figure,imshow(Iresult);title('RESULT-1');
imwrite(Iresult,'result_1.bmp','bmp');
elseif(i==2)
    %figure,imshow(Iresult);title('RESULT-2');
    imwrite(Iresult,'result_2.bmp','bmp');
elseif(i==3)
    %figure,imshow(Iresult);title('RESULT-3');
    imwrite(Iresult,'result_3.bmp','bmp');
end
end
end

end
end
    imshowage=1;
end

⌨️ 快捷键说明

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