MATLAB车牌识别系统 (Antigravity)
项目简介
本项目是一个基于MATLAB开发环境的自动化车牌识别与处理系统。该系统完全通过MATLAB代码实现,不依赖外部复杂的第三方库,旨在通过数字图像处理技术实现对车辆图片的智能分析。系统集成了图形用户界面(GUI),能够直观地展示从图像采集、预处理、车牌定位、字符分割到最终识别的完整流程。项目核心算法涵盖了颜色空间转换、边缘检测、形态学处理、投影分割以及模板匹配技术。
功能特性
- 全流程GUI交互界面:提供清晰的操作面板,包括原始图像显示、定位过程可视化、二值化结果展示、分割字符详情以及最终识别结果文本。
- 智能图像预处理:自动调整过大分辨率的图片以优化处理速度,包含灰度转换与自适应直方图均衡化。
- 复合式车牌定位:结合HSV颜色空间(针对蓝底车牌)与Sobel垂直边缘检测技术,利用形态学闭运算和几何特征筛选精准定位车牌。
- 精准字符分割:采用垂直投影法分析像素分布,结合波峰波谷逻辑自动切割字符,并具备去除边框干扰和噪点过滤功能。
- 模板匹配识别:内置内存动态生成的字符模板库,通过归一化字符特征进行比对识别。
系统算法与实现细节
本项目的核心逻辑封装在主程序文件中,以下是对系统各阶段具体实现逻辑的详细分析:
1. 初始化与界面构建
程序启动时会初始化全局变量结构体
sys_data,用于在各回调函数间传递图像数据。系统构建了一个包含三个坐标轴(Axes)和一个面板(Panel)的GUI窗口:
- 原始图像区:显示用户载入的车辆图片。
- 定位过程区:展示经过边缘检测与形态学处理后的中间状态,帮助用户理解定位逻辑。
- 二值化车牌区:显示裁剪并矫正后的车牌二值图像。
- 字符分割面板:逐个显示分割后的独立字符图像及其识别结果。
此外,系统在内存中动态调用
generate_templates 函数生成字符匹配所需的标准模板库,避免了对外部文件系统的依赖。
2. 图像加载与预处理
用户点击“载入图像”后,系统支持读取 *jpg, png, bmp* 等常见格式。为了提高这类计算密集型任务的运行效率,系统会自动检查图像高度,若高度超过1080像素,则强制缩小至原图的50%。
3. 核心算法流程
当用户点击“开始识别”时,系统依次执行以下算法步骤:
#### 第一阶段:车牌定位 (Fusion Location)
- 颜色分割:将RGB图像转换为HSV空间,提取符合蓝色车牌特征的区域(H: 0.55-0.75, S>0.3, V>0.3)。
- 边缘检测:对灰度图使用 Sobel算子 进行垂直方向的边缘检测,因为车牌具有显著的垂直纹理特征。
- 特征融合:将颜色掩膜与边缘检测结果相乘,仅保留既是蓝色又是边缘密集的区域。
- 形态学连通:使用扁平矩形结构元素(
[3, 18])进行 闭运算(imclose),将离散的字符边缘融合成一个连通块,并填充孔洞。 - 几何筛选:通过
regionprops 获取连通域的边界框(BoundingBox)、面积(Area)等属性。
*
筛选规则:保留长宽比在 2.2 到 5.5 之间,且面积大于 1000 像素的区域。
*
评分机制:根据面积大小和长宽比(目标值设为3.2)计算得分,选取分数最高的区域作为车牌。
#### 第二阶段:矫正与二值化
- 图像裁剪:根据定位的矩形框从原图中裁剪出车牌区域。
- 图像增强:利用 自适应直方图均衡化(adapthisteq) 增强图像对比度,应对光照不均。
- 二值化处理:使用 Otsu(最大类间方差法) 自动计算阈值,将车牌转化为黑白二值图像。
- 干扰去除:
* 强制移除图像上下边缘(约8%高度)和左右边缘(约2%宽度)的像素,以去除车牌边框和铆钉干扰。
* 使用
bwareaopen 移除面积小于20像素的噪点。
#### 第三阶段:字符分割 (Vertical Projection)
- 垂直投影:统计二值图像每一列的白色像素总数,生成投影曲线,并进行平滑处理。
- 波谷切割:遍历投影曲线,寻找连续的有像素区域(波峰)作为字符的起始和结束点。
- 区域校验:过滤掉宽度过窄(小于整宽2%)的非字符区域。
- 精细裁剪:对分割出的每一个字符小图,进一步去除上下的多余空白区域。
- 尺寸归一化:将所有有效字符图像统一缩放至标准尺寸 32x16 像素,以便于后续匹配。
#### 第四阶段:字符识别
- 系统遍历分割出的归一化字符图像。
- 调用
recognition_template_matching 函数(基于模板匹配算法),将待测字符与内存中的标准模板进行比对。 - 根据匹配度最高的模板确定字符内容,并将结果拼接成字符串显示在GUI的结果编辑框中。
使用方法
- 在MATLAB中设置工作路径至包含代码的文件夹。
- 在命令行窗口输入
main 并回车,启动系统界面。 - 点击 “载入图像” 按钮,选择一张包含清晰车牌的测试图片。
- 点击 “开始识别” 按钮,等待系统处理。
- 界面将即时显示处理过程的中间图像、分割的字符以及最终的识别结果。
- 使用完毕后点击 “退出系统” 关闭程序。
系统要求
- MATLAB R2016b 或更高版本。
- 必须安装 Image Processing Toolbox(图像处理工具箱),用于支持边缘检测、形态学操作和区域分析等函数。