【交通标志识别】matlab基于BP神经网络交通信号标志识别系统【源码131期】

一、简介

基于matlab交通信号标志识别系统,社会步入了人工智能的高速发展时代,其中机器视觉的发展是人工智能面向用户交流体验的关键,机器对目标检测与识别是人工智能的“慧眼”。智能汽车需要有效地识别路侧的交通标志识别牌辅助汽车驾驶运行,但是在自然采集的原始图像环境复杂容易影响交通标志的检测识别,需要对原始图像增强预处理提高目标识别率。本文设计了基于 BP 神经网络的交通标志识别系统,并对不同的交通标志进行颜色模型分类,将预处理后的交通标志提取出来与训练模板进行训练识别交通标志,为智能汽车提供慧眼。

二、部分源码

function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    按钮1的句柄
% eventdata  保留-在未来的MATLAB版本中定义
% handles    具有句柄和用户数据的结构(参见GUIDATA)
%%  读图
[filename, cd1] = uigetfile( ...
    {'*.tif;*.TIF;*.JPG;*.jpg;*.bmp;*.BMP;*.jpeg;*.JPEG;','Image file';...
    '*.*', 'All file (*.*)'},'Pick an Image');
axes(handles.axes1);
cla;%清除坐标系,相当于初始化axes
axes(handles.axes2);
cla;
axes(handles.axes3);
cla;
axes(handles.axes4);
cla;
if filename

    cd(cd1);%目录
    d = imread(filename);%获取图片数据
    cd(handles.cd0);
    handles.I = d;
    axes(handles.axes1);%创建坐标系
    imshow(d);%显示灰度图
    handles.filename = filename; 

    box on;%显示右边和上边框
    end

handles.Color = 0;
cd(handles.cd0);
set(handles.text2,'string','');
guidata(hObject, handles);


% 执行按钮按下按钮2。
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject    按钮2的句柄
% eventdata  保留-在未来的MATLAB版本中定义
% handles    具有句柄和用户数据的结构(参见GUIDATA)
%% 提取标志
% 按照颜色来分
Color = 0; % 颜色标记  1是红 2 是蓝 3是黄色

i
    
    case 1  %红
        
        DI = Image(:,:,1);%灰度图
        GI = (Image(:,:,1)>110 & Image(:,:,2)<150 & Image(:,:,3)<150 ...
            & abs(double(Image(:,:,2))-double(Image(:,:,3)))<50 & abs(double(Image(:,:,1))-double(Image(:,:,2)))>30);
        %二值图
    case 2   %蓝
        
        DI = Image(:,:,3);
        GI = (Image(:,:,1)<100 & Image(:,:,2)<150 & Image(:,:,3)>120 ...
             & abs(double(Image(:,:,2))-double(Image(:,:,3)))>30);
        
    case 3 %黄
        
        DI = rgb2gray(Image);  %灰度图
        GI = (Image(:,:,1)>160 & Image(:,:,2)>90 & Image(:,:,3)<90 ...
            & abs(double(Image(:,:,1))-double(Image(:,:,2)))<100 & abs(double(Image(:,:,1))-double(Image(:,:,3)))>90);
        
end

axes(handles.axes2);
imshow(DI);

axes(handles.axes3);

imshow(GI);

handles.GI = GI;

guidata(hObject, handles);
        

% 执行按钮按下按钮3。
function pushbutton3_Callback(hObject, eventdata, handles)
% hObject     按钮3的句柄
% eventdata  保留-在未来的MATLAB版本中定义
% handles    具有句柄和用户数据的结构(参见GUIDATA)

% 分割标志
d = handles.GI;

se = ones(3);  % 腐蚀膨胀模版  三行三列的全1矩阵
imshow(d)

d =imdilate(d,se);%膨胀

d = bwareaopen(d,100); % 移除小对象 小区域肯定是噪声
%删除小面积对象  作用:删除二值图像d中面积小于100的对象,默认情况下使用8邻域

L = bwlabel(d,8); %标记连通 8连通
%L = bwlabel(BW,n)
% 返回一个和BW大小相同的L矩阵,包含了标记了BW中每个连通区域的类别标签,
% 这些标签的值为1、2、num(连通区域的个数)。n的值为4或8,表示是按4连通寻找区域,还是8连通寻找,默认为8

Num = max(max(L)); % 有几个区域   返回行--个

S = zeros(1,Num);  %1*num的全零矩阵

for i = 1:Num
    
    S(i) = sum(sum(L == i));%列求和
    
end

[S,id] = sort(S,'descend'); %降序排列  id和S的size一样大
%[B,IX]=sort(A,...):IX为排序后备元素在原矩阵中的行位置或列位置的索引,
%为与A同样大小的标量矩阵,且每行(dim=2)或每列(dim=1)遍布1:行数m,或遍布1:列数n
Ran = zeros(Num,4); % 范围

Fig = zeros(1,Num); % 长宽比

for i = 1:Num
        [ix,iy] = find(L == id(i));%寻找非零元素的索引和值
    
    Ran(i,:) = [min(ix),max(ix),min(iy),max(iy)]; % 每一个区域的范围
    end

for i  1:Num
        Fig(i) = max(Ran(i,2)-Ran(i,1),Ran(i,4)-Ran(i,3))/min(Ran(i,2)-Ran(i,1),Ran(i,4)-Ran(i,3));
    end
in = 0;

for i = 1:Num
        if Fig(i) < 1.5 % 长宽比是接近1的 所以不会太离谱
                in = i;
                break;
           end
    end

if in == 0
        in = 1; % 如果都不满足就认定面积最大的一个了 这时候肯定是有干扰的
    end
if handles.Color ~= 3
        xmin = Ran(in,1);
    xmax = Ran(in,2);
    ymin = Ran(in,3);
    ymax = Ran(in,4);
        II = handles.I(xmin:xmax,ymin:ymax,:);
    elseif handles.Color == 3 % 黄色的多切一点 有黑色边框
   
    xmin = Ran(in,1)-round((Ran(in,2)-Ran(in,1))*0.15);
    xmax = Ran(in,2)+round((Ran(in,2)-Ran(in,1))*0.15);
    ymin = Ran(in,3)-round((Ran(in,4)-Ran(in,3))*0.15);
    ymax = Ran(in,4)+round((Ran(in,4)-Ran(in,3))*0.15);
        II = handles.I(xmin:xmax,ymin:ymax,:);
    end

axes(handles.axes4);
imshow(II);
handles.Divice = II;
guidata(hObject, handles);

三、运行结果

四、matlab版本

MATLAB R2019a

五、学习与交流

文中不足之处请大家多多指教,学习与交流可以联系企鹅:3752243968
文中部分源码仅供参考,若需要全部代码可以私信

  • 25
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值