基于 BP 神经网络的 MATLAB 车牌识别系统
项目简介
本项目实现了一套完整的基于 MATLAB 的车牌自动识别系统。该系统集成了图像处理、计算机视觉与神经网络技术,能够从复杂背景中提取车牌并识别其中的字符。
项目的核心特色在于其具备“在线训练”机制:程序不需要依赖外部预训练的权重文件或数据集文件,而是在运行时通过代码生成标准的字符图像数据(0-9, A-Z),实时训练一个轻量级的 BP(Back Propagation)神经网络。这种设计确保了代码的高移植性,下载即用。
功能特性
- 全流程自动化:涵盖图像加载、预处理、车牌定位、字符分割、字符识别及结果展示。
- 实时数据生成与训练:程序启动时自动生成合成字符数据并训练神经网络,无需额外配置数据集。
- 多维车牌定位:结合了边缘检测(Sobel)、形态学处理与 HSV 颜色空间(蓝色区域)进行鲁棒的车牌定位。
- BP 神经网络识别:构建并训练三层 BP 神经网络模型,对分割后的字符进行分类预测。
- 可视化过程展示:提供多子图窗口,详细展示从原图、灰度处理、边缘检测、定位截取到二值化分割的每一步效果。
- 图像自适应:自动调整过大图像的尺寸,保证处理速度。
系统要求
- MATLAB R2016a 或更高版本
- Image Processing Toolbox(图像处理工具箱)
- Neural Network Toolbox(或者Deep Learning Toolbox,用于神经网络基本运算)
- 系统内存建议 4GB 以上
使用方法
- 启动 MATLAB,将工作目录切换到项目所在文件夹。
- 在命令行窗口运行主程序入口函数。
- 等待初始化:程序启动后会提示正在训练 BP 神经网络,请耐心等待(该过程会生成训练数据并更新网络权重)。
- 选择图片:训练完成后,系统会自动弹出文件选择对话框,请选择包含蓝色车牌的车辆图片(支持 JPG, BMP, PNG 等格式)。
- 查看结果:程序处理完成后,会弹出一个确认框显示识别到的车牌号码,同时会打开一个图形窗口展示处理过程的中间图像和最终结果。
---
核心算法与实现细节
本节详细分析主程序中实际实现的功能逻辑,与代码内容完全对应。
1. 系统初始化与在线训练
程序运行伊始,首先执行环境清理。随后调用数据生成模块,在内存中绘制
0-9 和
A-Z(排除 I 和 O)的字符图像,生成对应的特征向量(归一化为 20x10 像素)和 One-hot 标签。
利用生成的训练数据,初始化并训练一个自定义的 BP 神经网络。
- 网络结构:输入层 200 个节点(对应 20x10 像素),隐含层 40 个节点,输出层 36 个节点(对应 36 类字符)。
2. 图像读取与尺寸归一化
通过用户交互界面读取图片。为了保证后续处理算子的尺度一致性并提高运行速度,如果输入图像的高度超过 800 像素,系统会将其等比例缩放到高度为 800 像素。
3. 车牌定位预处理
- 灰度化:将彩色图像转为灰度图。
- 高斯滤波:使用 sigma=0.5 的高斯核进行平滑处理,去除高频高斯噪声。
- 直方图均衡化:增强图像对比度,使车牌细节更突出。
4. 边缘检测与形态学处理
- 边缘检测:采用 Sobel 算子提取图像边缘。
- 形态学闭运算:使用矩形结构元素([4, 15])连接断裂的边缘,填充车牌内部空隙。
- 形态学开运算:去除细小的孤立噪点。
5. HSV 颜色空间定位
代码结合了颜色特征来辅助定位,专门针对蓝色车牌进行过滤:
- 将图像转换至 HSV 空间。
- 设定阈值范围提取蓝色区域(Hue: 0.55-0.75, Saturation > 0.4, Value > 0.3)。
- 将颜色掩膜与边缘检测结果进行“与”运算,并移除小面积噪点。
6. 车牌区域提取
利用区域属性分析(RegionProps)查找连通域的包围盒(BoundingBox)。筛选逻辑如下:
- 长宽比筛选:保留宽高比在 2.2 到 6 之间的区域。
- 面积筛选:在符合比例的区域中,选择面积最大的区域作为最终车牌。
- 使用
imcrop 截取车牌图像。若未检测到符合条件的区域,程序将报错退出。
7. 字符分割(垂直投影法)
对截取的车牌图像进行精细处理:
- 二值化:通过 Otsu 方法(最大类间方差法)计算阈值并进行二值化。
- 去噪与修剪:移除小斑点,并按固定比例(上下各剪去 15%,左右各剪去 5%)去除车牌边框和铆钉干扰。
- 垂直投影分割:
* 计算二值图像的垂直投影(每一列像素之和)。
* 检测波峰与波谷,当投影值从 0 突变(或超过阈值 1)时标记为字符开始,回落时标记为字符结束。
* 根据字符宽度阈值(大于 2 像素)过滤噪点,提取独立的字符图像。
8. 神经网络识别
遍历每一个分割出的字符图像:
- 特征提取:将字符图像强制缩放统一为 [20, 10] 像素大小,并重塑为 [200, 1] 的特征向量。
- 预测:将特征向量输入预先训练好的 BP 神经网络,获取输出层最大概率对应的索引。
- 映射:根据索引在字符映射表(Char Map)中找到对应的数字或字母。代码中对所有字符(包括首位)均采用统一的字母数字映射逻辑进行演示。
9. 结果显示
程序最后绘制一个包含 3x3 子图的窗口,分别展示:
- 原始图像及识别出的红色车牌号文字。
- 灰度增强图、边缘检测图、颜色定位掩膜。
- 截取的车牌原图、二值化处理后的车牌。
- 前三个分割出的独立字符特写。
同时弹出消息框显示最终识别的字符串。