【限速标志识别】基于matlab GUI形态学限速标志识别【含Matlab源码 1142期】
?一、SVM路標檢測識別簡介
1 路標識別
完整的路標識別系統包括:圖像的獲取與預處理,圖像分割(路標定位),特征提取,模式分類(路標識別)等部分。其中模式分類是系統的關鍵技術。較常用的模式分類方法是神經網絡分類器。神經網絡是目前應用最廣也是最成功的學習算法之一,具有較強的容錯行和自適應學習能力。然而神經網絡采用的經驗風險最小化準則(empirical risk minimization, ERM),雖然可使訓練誤差最小化,但并不能最小化學習過程的泛化誤差。實際應用中神經網絡常出現的問題:1) 更易出現局部最小值;2) 其輸出的假設規模經??赡艽蟮讲磺袑嶋H;3) 如果訓練樣本的數目有限,過大的假設函數類將導致過擬合;4) 常受到大量參數的控制,參數的選擇往往是通過啟發式的參數調節過程。
2 支持向量機
2.1 兩類模式問題
SVM基于SRM準則構造最優超平面,使每類數據之間間隔最大,同時保持分類誤差盡可能小。Cover定理指出:一個復雜的模式識別分類問題,在高維空間比低維空間更容易線性可分。實際上SVM實現了這樣的思想:通過某種非線性映射(可以是未知的)將樣本特征向量x映射到一個高維特征空間,然后在這個空間中構造最優分類超平面。
對簡單的兩模式分類,SVM算法可歸結為:
通過非線性變換φ:x→φ (x) ,將模式數據映射到高維特征空間,構造分類超平面,表示為決策面:
考慮到兩類樣本離決策面都應有一定距離,決策面應滿足不等式約束,如圖1
圖1 線性可分類超平面與分類間距
完全滿足式 (2) 的超平面是不存在的??紤]到存在一些樣本不能被決策面正確分類,引入松弛變量ξi (≥0) ,約束條件式 (2) 變為:
滿足要求的超平面不止一個,尋找最優超平面可以歸結為二次規劃問題:
其中,C被稱為懲罰因子,通過C可在分類器的泛化能力和誤分率之間進行折衷。利用拉格朗日函數求解可得優化問題式 (4) 的對偶形式為:
約束條件為:
求解式 (5) ,可得到αi,代入式 (7) 可以確定ω,分類函數可表示為:
2.2 多類模式的選擇
常用的多類模式的SVM方法有one-against-all、one-against-one、DAGSVM
在one-against-all方法中,一個k類問題被分解為k個 (子) 兩類問題。第i個兩類問題訓練集包含原訓練集中的所有樣本,來自第i類樣本的類標被重新定義為+1,其余樣本的類標被重新定義為-1
one-against-one方法將一個k類問題分解為k (k-1) /2個 (子) 兩類問題。每個兩類問題的訓練集由原訓練集中的2個類別的樣本組成,其中一個類別的樣本的類標被重新定義為+1,另一個類別的樣本的類標被重新定義為-1
有向無環圖支持向量機(Directed Acyclic Graph Support Vector Machines, DAGSVM)將所有的兩類支持向量機組合為一個二叉有向無環圖。對于一個k類問題,這種方法將產生一個包含k個葉結點和k (k-1) /2個中間結點的三角形,葉結點對應著樣本類別,中間結點對應著所有的兩類分類器。
3 基于SVM的路標識別系統
3.1 圖標提取
系統從移動機器人的圖像采集卡獲取路標彩色圖像后,首先對源圖像進行基于RGB空間模型的路標顏色初次分割,如圖2 (b) 。針對光照的影響,考慮到分割的精度和靈敏度,經大量圖像進行統計,確定相符的分割改進模型為:
其中,fr、fg、fb分別為圖像像素點對應的紅色、綠色、藍色分量值。在彩色路標的初次分割之后,用基于當前最大聚合中心的區域生長算法和輪廓跟蹤算法確定路標區域。再用雙向區域填充算法的方法提取出路標圖像的灰度信息圖,如圖2 ? 。然后,進行直方圖分割后的特征的提取,如圖2 (d) ,得到32*32像素的特征樣本。
最后,將提取到的特征樣本送入SVM分類器,進行路標樣本的訓練和識別。
?二、部分源代碼
function varargout = Mat5_2(varargin)
% MAT5_2 MATLAB code for Mat5_2.fig
% MAT5_2, by itself, creates a new MAT5_2 or raises the existing
% singleton*.
%
% H = MAT5_2 returns the handle to a new MAT5_2 or the handle to
% the existing singleton*.
%
% MAT5_2(‘CALLBACK’,hObject,eventData,handles,…) calls the local
% function named CALLBACK in MAT5_2.M with the given input arguments.
%
% MAT5_2(‘Property’,‘Value’,…) creates a new MAT5_2 or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before Mat5_2_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to Mat5_2_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE’s Tools menu. Choose “GUI allows only one
% instance to run (singleton)”.
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help Mat5_2
% Last Modified by GUIDE v2.5 21-Jul-2021 15:09:04
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct(‘gui_Name’, mfilename, …
‘gui_Singleton’, gui_Singleton, …
‘gui_OpeningFcn’, @Mat5_2_OpeningFcn, …
‘gui_OutputFcn’, @Mat5_2_OutputFcn, …
‘gui_LayoutFcn’, [] , …
‘gui_Callback’, []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% — Executes just before Mat5_2 is made visible.
function Mat5_2_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to Mat5_2 (see VARARGIN)
% Choose default command line output for Mat5_2
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes Mat5_2 wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% — Outputs from this function are returned to the command line.
function varargout = Mat5_2_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure
varargout{1} = handles.output;
% — Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)%載入圖像
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global Image
[filename,pathname]=uigetfile({‘.jpg’;'.bmp’;‘.gif’},‘選擇圖片’);
str=[pathname filename];
Image1 = imread(str);
Image=Image1;
axes(handles.axes1);
imshow(Image1);
function edit1_Callback(hObject, eventdata, handles)
% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,‘String’) returns contents of edit1 as text
% str2double(get(hObject,‘String’)) returns contents of edit1 as a double
% — Executes during object creation, after setting all properties.
function edit1_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,‘BackgroundColor’), get(0,‘defaultUicontrolBackgroundColor’))
set(hObject,‘BackgroundColor’,‘white’);
end
function BW = imbinarize(I,varargin) %#codegen
%imbinarize Binarize image by thresholding.
% Copyright 2015-2018 The MathWorks, Inc.
% Syntax
% ------
%
% BW = imbinarize(I)
% BW = imbinarize(I,method)
% BW = imbinarize(I,‘adaptive’,Param,Value,…)
% BW = imbinarize(I,t)
%
% Input Specs
% -----------
%
% I:
% real
% non-sparse
% 2d
% uint8, uint16, uint32, int8, int16, int32, single or double
%
% method:
% string with value: ‘global’ or ‘adaptive’
% default: ‘global’
%
% Sensitivity:
% numeric
% real
% non-sparse
% scalar
% non-negative
% <= 1
% default: 0.5
% converted to double
%
% ForegroundPolarity:
% string with value either ‘bright’ or ‘dark’
% default: ‘bright’
%
% t:
% numeric
% real
% non-sparse
% 2d
% either scalar or matrix of the same size as I
%
% Output Specs
% ------------
%
% BW:
% logical
% 2D matrix
% same size as I
%
% Validate the input image
validateImage(I);
% Parse and validate optional inputs
[isNumericThreshold,options] = parseOptionalInputs(I,varargin{:});
coder.internal.prefer_const(isNumericThreshold,options);
if isNumericThreshold
% BW = imbinarize(I,t)
BW = binarize(I,options.t);
else
if strcmp(options.method,‘global’)
% BW = imbinarize(I,‘global’)
t = computeGlobalThreshold(I);
else
% BW = imbinarize(I,‘adaptive’,…)
t = adaptthresh(I,options.sensitivity,‘ForegroundPolarity’,options.polarity);
end
BW = binarize(I,t);
end
?三、運行結果
?四、matlab版本及參考文獻
1 matlab版本
2014a
2 參考文獻
[1]易東,黃玉清.基于SVM的移動機器人路標識別算法[J].兵工自動化. 2009,28(08)
3 備注
簡介此部分摘自互聯網,僅供參考,若侵權,聯系刪除
總結
以上是生活随笔為你收集整理的【限速标志识别】基于matlab GUI形态学限速标志识别【含Matlab源码 1142期】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PMO和PM如何实现从战略解码到项目执行
- 下一篇: UML之教学管理系统 实验三