1.软件版本
matlab2017b。
3.相关原理
具体要求:
1.图像输入
2.转为灰度图像
3.图像边缘检测
4.图像腐蚀
5.图像填充
6.去除图片中干扰
7.从图片中精确定位出交通标志的位置,并再次打开一个figure,显示出来(抠出来)
8.将抠出来的交通标志转化为灰度图像
9.采用动态阈值法将交通标志转为二值图像
10.用形态滤波处理图片
11.识别的过程{1.建立一个模板库,全是二值化后的交通标志
12.将上述得到的交通标志与模板库离得进行匹配
13.显示一个figure,并输出提示交通标志的名称}
普通的特征提取方案:
HOG特征方法:
原理如下所示:
1、HOG特征:
方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子。它通过计算和统计图像局部区域的梯度方向直方图来构成特征。
(1)主要思想:
在一副图像中,局部目标的表象和形状(appearance and shape)能够被梯度或边缘的方向密度分布很好地描述。(本质:梯度的统计信息,而梯度主要存在于边缘的地方)。
(2)具体的实现方法是:
首先将图像分成小的连通区域,我们把它叫细胞单元。然后采集细胞单元中各像素点的梯度的或边缘的方向直方图。最后把这些直方图组合起来就可以构成特征描述器。
(3)提高性能:
把这些局部直方图在图像的更大的范围内(我们把它叫区间或block)进行对比度归一化(contrast-normalized),所采用的方法是:先计算各直方图在这个区间(block)中的密度,然后根据这个密度对区间中的各个细胞单元做归一化。通过这个归一化后,能对光照变化和阴影获得更好的效果。
(4)优点:
与其他的特征描述方法相比,HOG有很多优点。首先,由于HOG是在图像的局部方格单元上操作,所以它对图像几何的和光学的形变都能保持很好的不变性,这两种形变只会出现在更大的空间领域上。其次,在粗的空域抽样、精细的方向抽样以及较强的局部光学归一化等条件下,只要行人大体上能够保持直立的姿势,可以容许行人有一些细微的肢体动作,这些细微的动作可以被忽略而不影响检测效果。因此HOG特征是特别适合于做图像中的人体检测的。
2、HOG特征提取算法的实现过程:
大概过程:
HOG特征提取方法就是将一个image(你要检测的目标或者扫描窗口):
1)灰度化(将图像看做一个x,y,z(灰度)的三维图像);
2)采用Gamma校正法对输入图像进行颜色空间的标准化(归一化);目的是调节图像的对比度,降低图像局部的阴影和光照变化所造成的影响,同时可以抑制噪音的干扰;
3)计算图像每个像素的梯度(包括大小和方向);主要是为了捕获轮廓信息,同时进一步弱化光照的干扰。
4)将图像划分成小cells(例如6*6像素/cell);
5)统计每个cell的梯度直方图(不同梯度的个数),即可形成每个cell的descriptor;
6)将每几个cell组成一个block(例如3*3个cell/block),一个block内所有cell的特征descriptor串联起来便得到该block的HOG特征descriptor。
7)将图像image内的所有block的HOG特征descriptor串联起来就可以得到该image(你要检测的目标)的HOG特征descriptor了。这个就是最终的可供分类使用的特征向量了。
3.部分程序
clc;
clear;
close all;
warning off;
addpath 'func\'
addpath 'func\hog_catch\'
load test_image.mat
load alg1.mat
if isempty(X4) == 0 & isempty(X5) == 1 & isempty(X6) == 1;
ftest = func_feature1(X4);
yout = round(net1(ftest'));
figure;
subplot(121);
imshow(X3);
subplot(122);
imshow(X4);
if yout == 1
title('识别结果为:非机动车行驶');
end
if yout == 2
title('减速让车');
end
if yout == 3
title('禁止鸣笛');
end
if yout == 4
title('禁止左转');
end
if yout == 5
title('慢');
end
if yout == 6
title('人行通道');
end
if yout == 7
title('限制速度');
end
if yout == 8
title('右转');
end
end
if isempty(X4) == 0 & isempty(X5) == 0 & isempty(X6) == 1;
ftest = func_feature1(X4);
yout1 = round(net1(ftest'));
ftest = func_feature1(X5);
yout2 = round(net1(ftest'));
figure;
subplot(131);
imshow(X3);
subplot(132);
imshow(X4);
if yout1 == 1
title('识别结果为:非机动车行驶');
end
if yout1 == 2
title('减速让车');
end
if yout1 == 3
title('禁止鸣笛');
end
if yout1 == 4
title('禁止左转');
end
if yout1 == 5
title('慢');
end
if yout1 == 6
title('人行通道');
end
if yout1 == 7
title('限制速度');
end
if yout1 == 8
title('右转');
end
subplot(133);
imshow(X5);
if yout2 == 1
title('识别结果为:非机动车行驶');
end
if yout2 == 2
title('减速让车');
end
if yout2 == 3
title('禁止鸣笛');
end
if yout2 == 4
title('禁止左转');
end
if yout2 == 5
title('慢');
end
if yout2 == 6
title('人行通道');
end
if yout2 == 7
title('限制速度');
end
if yout2 == 8
title('右转');
end
end
4.仿真测试效果
仿真结果如下图所示:
然后分割后获得如下结果:
A10-37
5.完整源码获得方式
方式1:微信或者QQ联系博主
方式2:订阅,免费获得教程案例代码以及本博任意2份完整源码