基于神经网络的自动车牌识别系统
本项目是一个基于 MATLAB 环境开发的自动车牌识别(ALPR)原型系统。系统通过集成数字图像处理技术与人工神经网络算法,实现了从包含复杂背景的图像中定位车牌、分割字符并进行智能识别的全流程功能。该系统表现出良好的逻辑结构,涵盖了从底层像素处理到高层模式识别的核心步骤,适用于智能交通管理及相关科研教学场景。
项目功能特性
系统具备全自动化的处理链路。首先,它内置了自动化的模型构建机制,能够实时生成字符样本并训练识别模型,无需外部静态模型库即可运行演示。在图像处理方面,系统利用空域滤波和边缘检测技术实现精准的车牌定位,并结合形态学变换处理图像中的干扰。字符分割环节采用经典的垂直投影算法,能够有效分离汉字、字母与数字。最终,系统通过三层结构的 BP 神经网络完成各字符的分类输出。
系统要求
运行本项目需要安装 MATLAB 软件,并确保已包含以下工具箱:
- Image Processing Toolbox(图像处理工具箱):用于灰度化、滤波、边缘检测及形态学操作。
- Statistics and Machine Learning Toolbox(统计与机器学习工具箱):用于区域属性提取。
- Deep Learning Toolbox / Neural Network Toolbox(深度学习/神经网络工具箱):用于构建、训练和运行 BP 神经网络。
主程序执行流程
主脚本按照以下逻辑顺序执行:
- 环境初始化与数据准备
系统首先定义了一个包含常用车牌字符的映射表,涵盖数字 0-9、大写字母 A-Z(除去容易混淆的字符)以及部分省份简称(如苏、豫、粤、京、沪)。接着,系统自动进入训练阶段,通过生成模拟字符位图并提取统计特征,完成 BP 神经网络的在线初始化与训练。
- 图像获取与预处理
程序默认生成一张带有随机噪声和背景干扰的模拟蓝底白字车牌图像进行演示。预处理阶段通过彩色转灰度(rgb2gray)降低计算维度,并使用 3x3 中值滤波(medfilt2)消除图像中的脉冲噪声,为后续边缘提取打下基础。
- 车牌区域定位
系统采用 Sobel 算子进行垂直边缘检测,捕捉车牌字符产生的密集垂直跳变。随后利用 5x20 的矩形结构元素进行形态学闭运算,将散落的边缘像素连接成连通区域,并通过填充孔洞操作完善区域轮廓。最后,程序通过计算各区域面积,筛选出面积最大的闭合区域作为目标车牌并进行裁剪。
- 字符分割与校正
裁剪出的车牌图像被统一调整至固定尺寸,并进行二值化处理。系统计算二值化图像的垂直投影向量,通过寻找投影波峰来识别字符的水平边界,从而将整张车牌分割为独立的字符矩阵。
- 特征提取与识别输出
每个分割出的字符图像被归一化为 16x32 像素的矩阵。系统将该矩阵展平为 512 维的统计特征向量,输入已训练好的 BP 神经网络。网络输出各类别概率,取最大概率索引对应字符映射表,最终拼接并输出完整的车牌号码。
关键函数与算法实现细节
1. BP 神经网络架构
系统中采用 patternnet 建立三层 BP 网络。输入层维度为 512(对应 16x32 映射像素),隐含层设置 100 个神经元,输出层维度与字符表长度一致。训练过程采用 One-hot 编码进行标签匹配,旨在通过反向传播算法最小化分类误差。
2. 统计特征提取算法
不同于复杂的 SIFT 或 HOG 特征,本系统采用了基于像素分布的统计特征。通过将分割出的字符归一化到统一分辨率,并进行二值化处理,将图像矩阵直接转换为输入的特征向量。这种方法在字符背景清晰的情况下具有较高的计算效率。
3. 垂直投影分割逻辑
字符分割函数通过逐列累计白色像素值来分析图像的垂直投影。系统设置动态阈值(通常为最大投影值的 10%)来判断字符的起点和终点,能够过滤掉微小的噪点干扰。在获得初步分割后,系统还会对单个字符图像进行纵向修剪,去除上下多余的空白行。
4. 模拟数据生成器
系统内置了模拟车牌和字符生成函数。它利用 MATLAB 的图形句柄系统在不可见画布上绘制字符,并通过添加随机旋转、缩放和高斯噪声来模拟实际拍摄中的几何形变和环境干扰,这极大地增强了神经网络在小样本情况下的泛化能力。
使用方法
- 启动 MATLAB 并将当前工作目录切换至项目文件夹。
- 在命令行窗口直接输入主程序名并按回车。
- 系统将弹出可视化窗口,展示从原始图像、灰度图、边缘图、形态学处理图到最终定位及分割字符的实时过程。
- 识别完成后,系统会在 MATLAB 命令行打印识别出的车牌字符串,并伴随一个弹出式对话框展示最终结果。