基于SVM的交通标志检测识别算法的matlab仿真
1.算法仿真效果
matlab2022a仿真结果如下:
2.算法涉及理论知识概要
在计算机视觉领域,最大稳定极值区域 (MSER)(Maximally Stable Extremal Regions)是一种用于在图像中进行斑点检测的方法。这个方法由Matas等人提出,用于在两个不同视角的图片中寻找对应关系(correspondence problem)。这种方法从图像中提取全面的元素对应关系,有助于宽基线匹配(wide-baseline matching),以及更好的立体匹配和物体识别算法。
特征检测是计算机视觉和图像处理中的一个概念。它指的是使用计算机提取图像信息,决定每个图像的点是否属于一个图像特征。特征检测的结果是把图像上的点分为不同的子集,这些子集往往属于孤立的点、连续的曲线或者连续的区域。
至今为止特征没有万能和精确的定义。特征的精确定义往往由问题或者应用类型决定。特征是一个数字图像中“有趣”的部分,它是许多计算机图像分析算法的起点。因此一个算法是否成功往往由它使用和定义的特征决定。因此特征检测最重要的一个特性是“可重复性”:同一场景的不同图像所提取的特征应该是相同的。
特征检测是图象处理中的一个初级运算,也就是说它是对一个图像进行的第一个运算处理。它检查每个像素来确定该像素是否代表一个特征。假如它是一个更大的算法的一部分,那么这个算法一般只检查图像的特征区域。作为特征检测的一个前提运算,输入图像一般通过高斯模糊核在尺度空间中被平滑。此后通过局部导数运算来计算图像的一个或多个特征。
有时,假如特征检测需要许多的计算时间,而可以使用的时间有限制,一个高层次算法可以用来控制特征检测阶层,这样仅图像的部分被用来寻找特征。
由于许多计算机图像算法使用特征检测作为其初级计算步骤,因此有大量特征检测算法被发展,其提取的特征各种各样,它们的计算复杂性和可重复性也非常不同。
MSER算法中,其最大稳定极值区域的定义为极值区域随着设置的灰度阈值的增大而逐渐“长大”。这样的一组极值区域由小到大是相互嵌套的关系,分别用来表示这一系列相互嵌套的极值区域序列。
支持向量机(support vector machines, SVM)是二分类算法,所谓二分类即把具有多个特性(属性)的数据分为两类,目前主流机器学习算法中,神经网络等其他机器学习模型已经能很好完成二分类、多分类,学习和研究SVM,理解SVM背后丰富算法知识,对以后研究其他算法大有裨益;在实现SVM过程中,会综合利用之前介绍的一维搜索、KKT条件、惩罚函数等相关知识。本篇首先通过详解SVM原理,后介绍如何利用python从零实现SVM算法。
实例中样本明显的分为两类,黑色实心点不妨为类别一,空心圆点可命名为类别二,在实际应用中会把类别数值化,比如类别一用1表示,类别二用-1表示,称数值化后的类别为标签。每个类别分别对应于标签1、还是-1表示没有硬性规定,可以根据自己喜好即可,需要注意的是,由于SVM算法标签也会参与数学运算,这里不能把类别标签设为0。
3.MATLAB核心程序
ind= 0;
for i = 1:length(XY)
Xmin = min(XY{i}(:,1));
Xmax = max(XY{i}(:,1));
Ymin = min(XY{i}(:,2));
Ymax = max(XY{i}(:,2));
W1(i)= Ymax - Ymin;
L1(i)= Xmax - Xmin;
if abs(L1(i) - W1(i)) <= 5
ind = ind+1;
XY2{ind} = XY{i};
end
end
figure;
imshow(I1);
hold on;
for i = 1:length(XY2)
plot(XY2{i}(:,1),XY2{i}(:,2),'g.');
hold on
end
%提取交通标志的中心点,判断是否为同一个标志
for i = 1:length(XY2)
Xmin(i)= min(XY2{i}(:,1));
Xmax(i)= max(XY2{i}(:,1));
Ymin(i)= min(XY2{i}(:,2));
Ymax(i)= max(XY2{i}(:,2));
Xc(i) = (Xmin(i)+Xmax(i))/2;
Yc(i) = (Ymin(i)+Ymax(i))/2;
% plot(Xc(i),Yc(i),'r*');hold on
end
%重合点合并
Xmin2=[];
Xmax2=[];
Ymin2=[];
Ymax2=[];
if length(Xc)>1
indx = 0;
for i = 1:length(Xc)
tmps=[];
for j = 1:length(Xc)
if sqrt(double((Xc(i) - Xc(j))^2 + (Yc(i) - Yc(j))^2))<=20
tmps=[tmps,j];
end
end
tmps
Xmin2(i) = mean(Xmin(tmps));
Xmax2(i) = mean(Xmax(tmps));
Ymin2(i) = mean(Ymin(tmps));
Ymax2(i) = mean(Ymax(tmps));
end
%根据XYi的相似性进行合并
else
Xmin2= Xmin;
Xmax2= Xmax;
Ymin2= Ymin;
Ymax2= Ymax;
end