基于MATLAB的车牌自动定位与字符识别系统
项目介绍
本项目是一款基于MATLAB环境开发的自动车牌识别(ALPR)系统。系统通过数字图像处理技术,实现了从原始车辆照片到最终车牌号码输出的全流程功能。该方案利用了图像增强、形态学运算、特征工程及模板匹配等经典算法,旨在为停车场管理、交通监控等场景提供技术支持。
功能特性
- 多格式图像支持:支持读取JPG、PNG及BMP格式的车辆图像。
- 稳健的预处理:集成中值滤波与对比度自适应增强,有效提升图像质量。
- 精准定位:利用Sobel垂直边缘检测结合形态学闭运算,准确提取车牌候选区域。
- 自动校正:通过Hough变换检测倾斜角度,实现车牌的水平矫正。
- 智能分割:基于垂直投影直方图分析,将车牌字符逐一分离并归一化。
- 字符识别演示:内置标准字符库索引,支持汉字、英文字母及数字的匹配与识别结果展示。
系统实现逻辑
1. 图像载入与初始化
系统启动后通过文件选择对话框获取图像路径,读取车辆图像并创建多子图可视化界面,实时展示处理过程。
2. 图像预处理流水线
- 灰度化处理:将采集到的RGB彩色图像转换为灰度图像,为后续边缘检测奠定基础。
- 噪声抑制:应用3x3掩模的中值滤波技术,消除拍摄过程中产生的孤立噪点并平滑图像。
- 对比度增强:执行直方图均衡化或灰度映射调整,使图像特征更加鲜明,提高定位准确度。
3. 车牌定位与区域提取
- 边缘检测:利用Sobel算子对图像进行垂直方向的梯度计算,精准捕获车牌字符产生的密集垂直边缘。
- 形态学闭运算:采用矩形结构元素执行闭运算,使散乱的边缘连接成块,并利用填充孔洞功能形成完整的提取掩模。
- 区域特征筛选:通过连通域分析获取所有候选区域的属性,根据车牌固有的几何特征进行二次过滤:
- 宽高比筛选:仅保留长宽比在2至6之间的矩形区域。
- 像素密度筛选:计算区域内目标像素与包围盒面积的比值,剔除密度低于0.4的非车牌干扰项。
- 备份机制:若无符合条件的区域,系统自动选取面积最大的连通区域作为识别目标。
4. 倾斜校正
对初步定位的车牌图像进行自适应二值化,利用Hough变换检测图像中的直线角度。计算所有检测直线的平均偏差,通过双线性插值进行图像旋转,消除因拍摄角度导致的字符倾斜。
5. 字符分割算法
- 二值化与降噪:对校正后的车牌进行高灵敏度自适应二值化处理,并执行颜色反转使字符像素为1。
- 边缘修剪:通过分析图像的水平像素和,自动去除车牌上下部可能存在的边框或固定螺栓干扰。
- 垂直投影分割:利用垂直方向的像素投影密度变化寻找字符间的缝隙。系统根据设定的宽度阈值过滤细小噪声,将识别出的每个字符区域切割成独立子图。
- 尺度归一化:将所有切割出的字符图像统一缩放至40x20像素,确保与模板库特征的一致性。
6. 字符识别与结果展示
- 模板库匹配:定义包含0-9、A-Z及各省份汉字简称的任务序列。遍历分割后的字符图像,与库中字符进行相似度计算。
- 逻辑演示:在当前环境中利用模拟匹配算法进行逻辑校验,并在可视化窗口中按顺序显示分割出的具体字母与汉字。
- 结果输出:在命令行窗口打印识别出的完整车牌字符串,同时在原始图像对应的位置绘制红色追踪框,并在图形界面中标注识别结果。
系统要求
- 运行环境:MATLAB R2016a 或更高版本。
- 依赖工具箱:Image Processing Toolbox (图像处理工具箱)。
- 运行硬件:支持标准图形显示的计算机,建议内存大于4GB。
使用方法
- 在MATLAB指令窗口中运行主程序。
- 在弹出的文件浏览窗口中选择一张包含清晰车牌的车辆照片。
- 系统将自动执行从预处理到识别的所有算法步骤。
- 观察九宫格演示界面中各个步骤的中间结果(如灰度图、边缘图、定位图、字符分割图等)。
- 在界面右上方及控制台查看最终识别出的车牌号码。