zl程序教程

您现在的位置是:首页 >  云平台

当前栏目

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

识别MATLAB算法网络 基于 优化 检测 仿真
2023-09-14 09:06:08 时间

目录

1.算法仿真效果

2.MATLAB核心程序

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

3.1 遗传算法

3.2hog特征提取

3.3 GRNN

4.完整MATLAB


1.算法仿真效果

matlab2022a仿真结果如下:

 

 

2.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







if  isempty(X4) == 0 & isempty(X5) == 0 & isempty(X6) == 0;
    ftest   = func_feature2(X4);
    yout1   = round(net2(ftest'));
    ftest   = func_feature2(X5);
    yout2   = round(net2(ftest')); 
    ftest   = func_feature2(X6);
    yout3   = round(net2(ftest'));  
    
    figure;
    subplot(221);
    imshow(X3);
    subplot(222);
    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(223);
    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  
    
    
    subplot(224);
    imshow(X6);
    if yout3 == 1
       title('识别结果为:非机动车行驶');    
    end
    if yout3 == 2
       title('减速让车');    
    end
    if yout3 == 3
       title('禁止鸣笛');    
    end
    if yout3 == 4
       title('禁止左转');    
    end
    if yout3 == 5
       title('慢');    
    end
    if yout3 == 6
       title('人行通道');    
    end
    if yout3 == 7
       title('限制速度');    
    end
    if yout3 == 8
       title('右转');    
    end
    if yout3 == 9
       title('注意行人');    
    end  
end
10_037_m

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

3.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。在选中的位置实行交换。这个过程反映了随机信息交换;目的在于产生新的基因组合,也即产生新的个体。交叉时,可实行单点交叉或多点交叉。


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

3.3 GRNN

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

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

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

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

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

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

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

4.完整MATLAB

V