m基于HOG特征提取和GA优化GRNN网络的交通标志检测和识别算法matlab仿真

1.算法仿真效果

matlab2022a仿真结果如下:


2.算法涉及理论知识概要

2.1 遗传算法

遗传算法GA把问题的解表示成“染色体”,在算法中也即是以二进制编码的串。并且,在执行遗传算法之前,给出一群“染色体”,也即是假设解。然后,把这些假设解置于问题的“环境”中,并按适者生存的原则,从中选择出较适应环境的“染色体”进行复制,再通过交叉,变异过程产生更适应环境的新一代“染色体”群。这样,一代一代地进化,最后就会收敛到最适应环境的一个“染色体”上,它就是问题的最优解。


其主要步骤如下:


1.初始化


选择一个群体,即选择一个串或个体的集合bi,i=1,2,...n。这个初始的群体也就是问题假设解的集合。一般取n=30-160。


通常以随机方法产生串或个体的集合bi,i=1,2,...n。问题的最优解将通过这些初始假设解进化而求出。


2.选择


根据适者生存原则选择下一代的个体。在选择时,以适应度为选择原则。适应度准则体现了适者生存,不适应者淘汰的自然法则。


给出目标函数f,则f(bi)称为个体bi的适应度。以


为选中bi为下一代个体的次数。


显然.从式(3—86)可知:


(1)适应度较高的个体,繁殖下一代的数目较多。


(2)适应度较小的个体,繁殖下一代的数目较少;甚至被淘汰。


这样,就产生了对环境适应能力较强的后代。对于问题求解角度来讲,就是选择出和最优解较接近的中间解。


3.交叉


对于选中用于繁殖下一代的个体,随机地选择两个个体的相同位置,按交叉概率P。在选中的位置实行交换。这个过程反映了随机信息交换;目的在于产生新的基因组合,也即产生新的个体。交叉时,可实行单点交叉或多点交叉。



2.2hog特征提取

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了。这个就是最终的可供分类使用的特征向量了。



2.3 GRNN

广义回归神经网络是径向基神经网络的一种,GRNN具有很强的非线性映射能力和学习速度,比RBF具有更强的优势,网络最后普收敛于样本量集聚较多的优化回归,样本数据少时,预测效果很好,还可以处理不稳定数据。虽然GRNN看起来没有径向基精准,但实际在分类和拟合上,特别是数据精准度比较差的时候有着很大的优势。


GRNN是RBF的一种改进,结构相似。区别就在于多了一层求和层,而去掉了隐含层与输出层的权值连接(对高斯权值的最小二乘叠加)。



1.输入层为向量,维度为m,样本个数为n,线性函数为传输函数。


2.隐藏层与输入层全连接,层内无连接,隐藏层神经元个数与样本个数相等,也就是n,传输函数为径向基函数。


3.加和层中有两个节点,第一个节点为每个隐含层节点的输出和,第二个节点为预期的结果与每个隐含层节点的加权和。


4.输出层输出是第二个节点除以第一个节点。


在GRNN神经网络中,一旦确立了学习样本数据后,只需要调整一个参数“光滑因子”即可确定其网络结构和权值,因此训练GRNN网络要比传统的神经网络更加便捷。所以选择GRNN。







3.MATLAB核心程序

if  isempty(X4) == 0 & isempty(X5) == 1 & isempty(X6) == 1;

ftest  = func_feature2(X4);

yout   = round(net2(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

if yout == 9

title('注意行人');    

end  



end

if  isempty(X4) == 0 & isempty(X5) == 0 & isempty(X6) == 1;

ftest   = func_feature2(X4);

yout1   = round(net2(ftest'));

ftest   = func_feature2(X5);

yout2   = round(net2(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

if yout1 == 9

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

if yout2 == 9

title('注意行人');    

end  



end

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容