0
点赞
收藏
分享

微信扫一扫

基于Matlab交通信号标志识别

千行 2022-04-01 阅读 64
matlab

1.1 颜色分割

常见的颜色空间有 RGB、LAB、HSV 等。RGB 模 型与人的视觉系统密切相关,即所有颜色都是 R 红、 G 绿和 B 蓝不同比例的组合,优点是直观、易理解,但 其变量之间相关性太强;LAB 模型更侧重于感知均匀 性,L 代表亮度,A 的正负代表红色与绿色,B 的正负代 表黄色与蓝色,特点是可以分别调整色彩和明度信息; HSV 为非线性模型 ,H 代表极角,S 代表饱和度,V 代 表明度,在机器视觉和图像处理领域运用较多的是 HSV 颜色空间,能更直观地表达色调、鲜艳程度和明暗 程度,更有利于进行颜色对比。此外,各种模型之间可 进行相互转化。

1.2 形状检测

        对经过颜色分割后的图像进行边缘检测,以获取 每个连接通道的边缘轮廓特征,再利用针对交通标志 自身所具有的形状特点所设计的算法,用以检测具有 该特征的轮廓,同时把检测到的区域定义为感兴趣区 域,以便于特征提取与分类器分类。1 张图片中像素灰度值发生急剧变化的区域称之 为图像边缘。简单来说,边缘检测就是将图像中的边缘像素点连接起来以构成封闭区域,从而使标志易于从 背景中区分出来。

1.3 特征提取和分类器

        交通标志及其他图像识别的关键就在于用快速且 具鲁棒性的算法或模型将图像中有效描述检测目标的 信息提取出来,并且利用该信息与其他图像进行区分, 此过程就是特征提取。如 2010 年和 2011 年在 ImageNet Large Scale Visual Recognition Challenge 赛事中的 获胜团队,使用 SIFT、LBP 等算法手动提取特征,再将 其用于分类器分类,取得了 28.2%的错误率。传统特征 提取的方法有 HOG、LBP、SIFT 等。SIFT(尺度不变特 征变换)用物体上存在着的一些与物体相关且与大小及 旋转方向无关的局部点表征物体,可以减少光照、噪声 等对物体识别的影响;HOG(方向梯度直方图)利用梯 度描述局部目标的形状,同时使用此特征捕获图片的 轮廓信息;LBP(局部二值模式)以中心像素的灰度值作 为阈值而得到对应的二进制编码来表示局部纹理特 征。特征提取后,利用分类器对其进行分类。如贝叶斯 分类器、支持向量机、神经网络分类器和 Adaboost 等。

1.4 代码实现


% 在Traffic_Iden变得可见之前执行
function Traffic_Iden_OpeningFcn(hObject, eventdata, handles, varargin)
% .此函数没有输出args,请参见输出FCN
% hObject    图的句柄
% eventdata  保留-在未来的MATLAB版本中定义
% handles    具有句柄和用户数据的结构(参见GUIDATA)
% varargin   Traffic_Iden的命令行参数(见VARARGIN)


% 选择Traffic_Iden的默认命令行输出
handles.output = hObject;
handles.cd0 = cd;
handles.Color = 0;
handles.I = [];

axes(handles.axes1);
set(gca,'Xtick',[]);%去除x轴的刻度
set(gca,'Ytick',[]);%去除y轴的刻度
box on;

axes(handles.axes2);
set(gca,'Xtick',[]);
set(gca,'Ytick',[]);
box on;

axes(handles.axes3);
set(gca,'Xtick',[]);
set(gca,'Ytick',[]);
box on;

axes(handles.axes4);
set(gca,'Xtick',[]);
set(gca,'Ytick',[]);
box on;

% 更新句柄结构
guidata(hObject, handles);


%UIWA IT使Traffic_Iden等待用户响应(参见UIRESUME)
% uiwait(handles.figure1);


% 此函数的输出返回到命令行
function varargout = Traffic_Iden_OutputFcn(hObject, eventdata, handles) 
% varargout 用于返回输出arg的vargout单元数组
% hObject   图的句柄
% eventdata 保留-在未来的MATLAB版本中定义
% handles   具有句柄和用户数据的结构(参见GUIDATA)

% 获取句柄结构中的默认命令行
varargout{1} = handles.output;


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


%提示:get(hObject,‘Value’)返回单选按钮3的切换状态


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

%提示:get(hObject,‘Value’)返回单选按钮4的切换状态


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

% Hint: get(hObject,'Value') returns toggle state of radiobutton5


	
%执行按钮按下按钮1。
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    按钮1的句柄
% eventdata  保留-在未来的MATLAB版本中定义
% handles    具有句柄和用户数据的结构(参见GUIDATA)
%%  读图
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是黄色

if get(handles.radiobutton3,'Value')
    
    Color = 1;
    
elseif get(handles.radiobutton4,'Value')
    
    Color = 2;
    
elseif get(handles.radiobutton5,'Value')
        
        DI = rgb2gray(Image);  %灰度图
        
end

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

axes(handles.axes3);

imshow(GI);

handles.GI = GI;

guidata(hObject, handles);

详细代码请扣扣:134-170-3358

举报

相关推荐

0 条评论