基于形态学定位与神经网络算法的车牌识别系统
项目介绍
本系统是一个基于 MATLAB 环境开发的完整车牌识别实验程序,专为初学者和教育用途设计。它通过直观的代码逻辑展示了从原始车辆图像采集到最终字符识别的全流程方案。系统利用数字图像处理中的经典形态学方法进行车牌定位,并结合 BP 神经网络技术实现字符的自动化识别。由于内置了合成图像生成功能,该系统无需外部图像预处理库即可独立运行,是学习图像处理思维与神经网络入门应用的理想实验平台。
功能特性
- 自给自足的演示系统:内置合成车牌生成功能,模拟真实环境下的蓝色车牌背景、文字分布及高斯噪声。
- 经典的定位算法:结合 Sobel 边缘检测与形态学闭运算,能够高效提取具有特定纹理特征的车牌区域。
- 自动化的字符分割:采用垂直投影法对车牌字符进行切分,并具备基本的宽高过滤逻辑。
- 神经网络识别引擎:采用三层前向神经网络,通过反向传播算法训练,支持 0-9 数字与 A-Z 字母的分类匹配。
- 可视化分析:系统运行后将展示 3x3 的流程效果图,涵盖从预处理、边缘检测、定位抠取到字符分割的每一步中间结果。
系统逻辑与流程说明
系统的执行逻辑严格遵循以下六个阶段:
- 图像采集与模拟生成
系统首先调用模拟函数创建一个复杂的背景,并在其中生成一个包含蓝色背景和白色占位符的模拟车牌,同时添加高斯噪声以模拟真实的拍摄环境。
- 图像预处理
程序将原始 RGB 图像转换为灰度图,随后应用 3x3 模板的中值滤波以消除散粒噪声,最后通过对比度和亮度调整增强图像的细节,为边缘检测打下基础。
- 垂直边缘检测与形态学处理
系统采用 Sobel 算子进行垂直边缘检测,捕捉车牌字符垂直跳变的纹理。接着,使用 5x18 像素的矩形结构元素进行形态学闭运算,将散碎的字符边缘连接成连续的连通域。随后通过填充孔洞、去除小面积噪点等操作净化图像。
- 车牌区域筛选(几何约束)
利用区域属性分析函数获取所有候选区域,通过计算长宽比(设定在 2 到 5 之间)和面积阈值进行过滤,最终准确定位并裁剪出车牌区域图像。
- 字符分割与标准化
将定位后的车牌图像进行二值化处理,利用垂直方向的像素投影(即每一列像素之和)来确定字符间的间隙。通过差分运算找到每个字符的起始与终止坐标,并将分割出的字符统一缩放为 24x12 像素的标准化特征向量。
- BP 神经网络训练与识别
系统会自动生成一套包含 0-9 和 A-Z 字符的训练样本库。网络配置为 150 个隐藏层神经元,采用 Resilient Backpropagation (trainrp) 算法进行快速训练。训练完成后,系统将标准化后的字符特征输入网络,通过最大概率匹配输出识别结果。
关键技术与算法细节
- 形态学定位:代码中构造了特定的矩形结构元素,这是利用车牌横向分布特征的关键,能有效忽略非车牌区域的干扰。
- 投影分割法:垂直投影法是处理规整排列字符的经典且高效方案,能够自适应不同宽度的字符间隔。
- BP 神经网络架构:采用前向神经网络模型,输入层大小为 288(即 24*12 像素展开后的向量),输出层根据字符映射表动态设定,确保了识别的准确性与扩展性。
- 特征提取:程序直接将二值化后的像素点阵作为特征向量,简化了特征工程,更适合入门级教学演示。
系统要求
- 软件环境:MATLAB R2016b 或更高版本。
- 必备工具箱:Image Processing Toolbox(图像处理工具箱)、Deep Learning Toolbox(深度学习工具箱 / 原 Neural Network Toolbox)。
使用方法
- 启动 MATLAB 软件,将工作路径切换至项目所在文件夹。
- 在命令行窗口直接输入主程序命令并按回车运行。
- 稍等片刻(系统需在运行时即时训练神经网络),即可在弹出的图形窗口中观察完整的识别流程演示。
- 在控制台窗口可以实时查看输出的识别结果字符串。