基于SVM支持向量机和HOG特征的交通标志检测算法matlab仿真

目录

一、理论基础

二、部分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(Trafficxy{i}(:,1),Trafficxy{i}(:,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(Ic{i},[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 

猜你喜欢

转载自blog.csdn.net/ccsss22/article/details/126679759