基于SVM支持向量机和HOG特征的交通标志检测算法matlab仿真
Posted fpga和matlab
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于SVM支持向量机和HOG特征的交通标志检测算法matlab仿真相关的知识,希望对你有一定的参考价值。
目录
一、理论基础
支持向量机(Support Vector Machine, SVM)是一类按监督学习(supervised learning)方式对数据进行二元分类的广义线性分类器(generalized linear classifier),其决策边界是对学习样本求解的最大边距超平面(maximum-margin hyperplane)。SVM使用铰链损失函数(hinge loss)计算经验风险(empirical risk)并在求解系统中加入了正则化项以优化结构风险(structural risk),是一个具有稀疏性和稳健性的分类器。SVM可以通过核方法(kernel method)进行非线性分类,是常见的核学习(kernel learning)方法之一 。
SVM是在1995年提出来的,它在小样本、非线性及高维样本分类中具有很强的优势。在线性可分的两类分类问题中,我们希望找到一个最佳平面,使得两个类的数据点间隔最大,我们称这个平面为最大间隔超平面。SVM就是通过寻找这样一个最大间隔超平面来构造决策函数,如图5-1所示。
基于HOG变换的图像特征提取算法,目前被广泛应用在图像识别领域[29],如车牌识别,人脸识别,车辆识别等。下面对HOG变换的基本原理进行介绍。HOG特征的提取其详细步骤如下:
步骤一:细胞划分。如图1所示,将每一张目标图像划分为多个小的图像区域,每个小的图像区域作为一个细胞单元(如图1左图所示),由四个细胞单元构成一个块单元(如图1右图所示):
步骤二:计算块单元的像素点的梯度特征数据,其计算公式为:
通过上述HOG向量的计算步骤可知,HOG特征向量的提取主要是基于局部图像得到的,因此其具体更强的抗干扰能力。
二、部分MATLAB仿真
在matlab2021a中编写如下的程序:
SVM支持向量机训练过程
clc;
clear;
close all;
warning off;
addpath 'func\\'
addpath 'func\\HOG_feature\\'
addpath 'func\\func_SVM_toolbox\\'
%读取库
F1 = [];
for i = 1:8
i
I = imread(['database\\',num2str(i-1),'.jpg']);
I1 = imresize(I,[128,128]);
F1 = [F1;func_hog_feature(I1)];
end
%SVM训练
svm_models = svmtrain([1;2;3;4;5;6;7;8],[F1]);
save svm_model.mat svm_models
SVM支持向量机测试过程
clc;
clear;
close all;
warning off;
addpath 'func\\'
addpath 'func\\HOG_feature\\'
addpath 'func\\func_SVM_toolbox\\'
sel = 1;
if sel == 1 | sel == 2 | sel == 3 | sel == 4 | sel == 5 | sel == 7 | sel == 8 | sel == 9 | sel == 13 | sel == 14 | sel == 15
Slvl = 1500;
KS = 6;
end
if sel == 6
Slvl = 1500;
KS = 12;
end
if sel == 10 | sel == 11 | sel == 12
Slvl = 1500;
KS = 1;
end
if sel == 16
Slvl = 800;
KS = 5;
end
I = imread(['testimage\\',num2str(sel),'.jpg']);
%*******************************************************************************************************************
%读取测试图片
figure;
subplot(311);
imshow(I);
[I1,Region_area] = func_detectMSERFeatures(I);
subplot(312);
imshow(I1);
hold on;
plot(Region_area,'showPixelList',true,'showEllipses',true);
hold on
Trafficxy = func_getTraffic(Region_area);
subplot(313);
imshow(I1);
hold on;
for i = 1:length(Trafficxy)
plot(Trafficxyi(:,1),Trafficxyi(:,2),'g.');
hold on
end
[Ic,Xl,Xr,Yl,Yr] = func_merge(I,Trafficxy,Slvl,KS);
%HOG特征提取
F1=[];
for i = 1:length(Ic)
I1 = imresize(Ici,[128,128]);
F1 = [F1;func_hog_feature(I1)];
end
%SVM测试
load svm_model.mat
func_show(F1,I,Ic,Xl,Xr,Yl,Yr,svm_models);
三、仿真结论分析
将实际的交通标志照片进行识别,仿真结果如下图所示:
A10-44
以上是关于基于SVM支持向量机和HOG特征的交通标志检测算法matlab仿真的主要内容,如果未能解决你的问题,请参考以下文章
opencv进阶-HOG+SVM行人检测(已训练好的分类器)
交通标志识别基于matlab HOG特征机器学习交通标识识别含Matlab源码 2200期
基于 HOG 特征的 SVM 分类器用于 OpenCV 中的“对象检测”