1.实现用于训练前馈神经网络的函数
实现神经网络训练函数 BP_Prince,通过指定不同的参数可以训练不同结构和设置的神经网络模型。主要功能包括初始化网络、设置训练参数并进行训练,最后返回训练好的神经网络和训练过程中的记录。
2.实现了对交通标识图像的识别训练,使用的是基于 BP 神经网络的机器学习方法。
使用 sim 函数仿真神经网络,得到输出结果 T。
计算训练误差并绘制误差图。
打印训练误差和迭代次数。
绘制仿真数据与真实数据对比图,显示识别错误个数。
保存训练好的神经网络模型和相关数据。
实现了交通标识图像的训练和识别过程。
3.读取图片
让用户选择一个图片文件(支持多种格式)。
读取所选图片的数据。
在 GUI 的四个坐标系中的其中一个坐标系上显示所选图片。
同时,还对图像进行了一些预处理,清除坐标系、设置坐标系、显示灰度图等操作。
4.标志提取
1.获取颜色标志:
根据用户选择的单选按钮来确定颜色类型。单选按钮的句柄和状态通过 handles 结构传递进来。
如果 radiobutton3 被选中,则颜色标志 Color 被设置为 1(红色)。
如果 radiobutton4 被选中,则颜色标志 Color 被设置为 2(蓝色)。
如果 radiobutton5 被选中,则颜色标志 Color 被设置为 3(黄色)。
2.根据颜色标志处理图像:
根据 Color 的值,选择对应的图像通道或灰度化处理。
使用适当的颜色阈值条件(如红色、蓝色、黄色的条件)来生成二值图像 GI,以标识出符合条件的颜色区域。
3.显示处理结果
5.分割标志
1.图像处理操作
se = ones(3); 定义了一个大小为 3x3 的全 1 结构元素,用于后续的腐蚀和膨胀操作。
d = imdilate(d, se); 对图像进行膨胀操作,增强图像中的明显特征。
2.去除小对象
d = bwareaopen(d, 100); 移除面积小于 100 像素的对象,通常这些对象被认为是噪声或不相关的区域。
3.连通区域标记
L = bwlabel(d, 8); 使用 8 连通方法标记二值图像 d 中的连通区域,每个区域被赋予一个唯一的标签。
4.计算区域属性
Num = max(max(L)); 确定图像中的连通区域总数。
S = zeros(1, Num); 初始化一个数组,用于存储每个区域的面积。
5.区域属性计算
使用循环计算每个连通区域的面积,并存储在数组 S 中。
6.区域排序
sort(S, 'descend') 对区域面积进行降序排序,并获取排序后的索引 id。
7.选择区域
根据设定的条件(在这里是长宽比),选择最合适的区域作为兴趣区域。
8.提取兴趣区域
根据选定的区域范围,在原始图像 handles.I 中提取对应区域的像素数据。
如果条件满足(例如处理黄色对象),则调整提取范围以更好地包括感兴趣的区域。
9.显示处理结果
6.识别标志
1.获取图像数据
I = handles.Divice; 从 GUI 句柄中获取图像数据,存储在变量 I 中。
2.预加载数据和模型
load Name Name;、load Trained_BP Trained_BP;、load Data Data; 分别加载标签名称、训练好的神经网络模型和数据。
3.图像预处理
如果图像不是灰度图像,则使用 rgb2gray 函数将其转换为灰度图像。
imadjust 函数用于调整图像对比度。
imresize 将图像调整为 40x40 像素。
im2bw 将处理后的图像二值化,转换为黑白图像。
4.计算欧氏距离
distance 数组存储当前图像与预先存储数据中每个数据点的欧氏距离。
5.识别部分
神经网络识别:通过预先训练的神经网络模型 Trained_BP 对距离数组 distance 进行预测,并找到最接近 1 的输出作为识别结果。
模板匹配:如果不需要神经网络识别,可以使用距离数组中最小距离对应的标签作为识别结果。
7.退出程序
禁止标志识别(红色)
警示标志识别(黄色)
指示标志识别(蓝色)