基于MATLAB的目标检测与车牌自动识别系统
项目简介
本项目是一个基于MATLAB开发的完整图像处理与计算机视觉应用案例,旨在演示自动车牌识别(LPR)的核心流程。系统利用MATLAB强大的图像处理工具箱,实现了从图像获取、预处理、边缘与颜色检测、车牌定位、字符分割到最终字符识别的全套算法。
该系统的代码经过高度封装,为了方便演示和验证算法的有效性,内置了图像模拟生成模块和内存模板库,无需外部数据集即可直接运行,直观展示智能交通系统中视觉识别算法的基本原理。
功能特性
- 全流程演示:涵盖图像采集、降噪、增强、定位、分割、识别六大核心步骤。
- 自包含环境:内置仿真图像生成器,自动生成带有噪声背景和特定车牌(如“苏A88888”)的模拟图像,无需配置外部图片路径。
- 鲁棒的预处理:结合高斯滤波与直方图均衡化,有效应对图像噪声和光照不足问题。
- 多维度定位:采用HSV颜色空间与形态学操作相结合的方式进行车牌精确定位,辅以Sobel算子展示边缘特征。
- 自适应二值化:使用Otsu算法自动计算阈值,并包含背景文字颜色反转逻辑,确保二值化结果的一致性。
- 垂直投影分割:利用字符排列特征,通过像素统计波形图精准切分独立字符。
- 模板匹配识别:基于相关系数(Correlation Coefficient)匹配算法,配合内置的字符模板库完成最终识别。
系统要求
- MATLAB R2016a 或更高版本
- Image Processing Toolbox(图像处理工具箱)
使用方法
- 确保安装了必要的MATLAB工具箱。
- 将主程序文件保存到MATLAB的工作目录中。
- 在MATLAB命令行窗口输入主函数名称并回车,或点击编辑器中的“运行”按钮。
- 系统将弹出多个可视化窗口:
*
主流程视图:包含原始图、预处理图、边缘检测、定位Mask、ROI裁剪、二值化结果、垂直投影波形图等。
*
字符识别详情:展示每一个分割后的字符及其识别结果。
*
消息提示框:最终输出识别到的车牌字符串。
详细功能与实现逻辑
本项目的主程序 main.m 严格按照以下逻辑流运行,各环节紧密配合:
1. 图像获取与生成
程序启动时不读取外部文件,而是调用内部子函数生成一张模拟车辆图像。该图像包含灰度噪声背景,并在特定位置绘制了蓝色底板、白色边框以及“苏A88888”字样的车牌,模拟真实场景中的纹理和颜色特征。
2. 图像预处理
- 灰度化:将彩色图像转换为灰度图,降低计算复杂度。
- 高斯去噪:使用3x3窗口、标准差为0.5的高斯滤波器对图像进行平滑处理,抑制随机噪声。
- 直方图均衡化:对去噪后的图像进行对比度增强,使得图像细节更加清晰,有利于后续边缘和特征提取。
3. 车牌定位与形态学处理
- 颜色分割:将图像转换至HSV色彩空间,提取H(色调)、S(饱和度)、V(亮度)分量。针对中国蓝牌,设定阈值范围(H: 0.55-0.75, S>0.4, V>0.3)生成蓝色区域掩膜。
- 形态学操作:
*
闭运算:使用长方形结构元素(5x15)进行横向膨胀,填充车牌内部空洞,将离散的字符区域连接成整体。
*
开运算:使用5x5结构元素去除背景中细小的噪点干扰。
- 边缘检测:代码中同时包含了Sobel算子边缘检测,用于辅助展示图像的边缘梯度特征。
4. 区域生长与ROI筛选
- 连通域分析:利用
regionprops 函数统计形态学处理后图像中所有连通区域的属性(包围盒、面积)。 - 筛选逻辑:遍历所有候选区域,根据车牌的几何特征进行筛选。只有长宽比在2到6之间且面积大于1000像素的区域才会被认定为有效车牌候选区。
- 图像裁剪:根据筛选出的最大有效区域的BoundingBox,从原图中裁剪出车牌图像。
5. 车牌精处理(二值化)
- Otsu阈值:对裁剪出的车牌图像进行灰度化,并计算全局最佳阈值进行二值化处理。
- 颜色反转校正:通过计算二值图像均值判断前背景颜色。如果图像以白色为主(均值>0.5),则进行反转,确保处理后的图像为黑底白字,统一后续分割逻辑。
- 噪声去除:移除面积小于50像素的微小连通域,净化字符边缘。
6. 字符分割
- 垂直投影法:计算二值化图像每一列的白色像素总和,生成投影波形。
- 波形分析:扫描投影波形,根据波峰和波谷确定字符的起始列和结束列。
- 尺寸归一化:将分割出的每一个独立字符图像统一缩放至32x16像素,以匹配模板库的尺寸标准。
7. 模板匹配识别
- 模板库构建:程序运行时动态构建内存中的字符模板库(包含'苏', 'A', '8', '1', 'B'等)。这些模板是基于模拟图像生成逻辑逆向构建的标准二值化图像。
- 相关性分析:将分割出的待识别字符与模板库中的每一个模板进行二维相关系数(
corr2)计算。 - 分类决策:选取相关系数最高的模板作为识别结果。代码中包含了具体的字符映射逻辑(如将内部变量名映射为汉字“苏”),以此输出最终的车牌号码字符串。
关键算法说明
- HSV颜色空间定位:相比于RGB空间,HSV空间对光照条件的鲁棒性更强,能更准确地提取出车牌特有的蓝色底色。
- Morphological Closing(闭运算):这是连接车牌字符的关键步骤。由于车牌是由断续的字符组成的,闭运算能有效地将它们“粘合”成一个连通的矩形区域,便于后续提取。
- Vertical Projection(垂直投影):这是字符分割最经典且高效的方法。通过统计列像素和,车牌字符之间的空隙会表现为投影图上的“波谷”(零值或低值),从而实现字符的物理切分。
- Template Matching(模板匹配):一种基于统计学的识别方法。通过计算待测图像与标准模板之间的相似度(归一化互相关),在小规模字符集下具有实现简单、计算直观的特点。