基于MATLAB的高精度车牌识别与分割系统
项目简述
本项目是一个基于MATLAB开发的高度集成化车牌自动识别系统。该系统采用了经典的数字图像处理技术路线,实现了从复杂的背景图像中自动定位车牌、分割字符并进行光学字符识别(OCR)的全流程。
本项目的最大特色在于其单文件运行的设计理念。代码内部集成了“内存动态模板生成”机制,无需依赖任何外部字符模板图片文件或复杂的数据库配置。用户只需在MATLAB环境中直接运行主程序,即可完成从从选取图片到输出并展示识别结果的所有操作。
功能特性
- 端到端处理:涵盖图像采集、预处理、车牌定位、字符分割、字符识别及结果可视化的完整流水线。
- 双重定位策略:
*
首选方案:基于HSV颜色空间的蓝色区域提取,结合形态学闭运算和开运算,能有效定位标准蓝底白字车牌。
*
备用方案:一旦颜色定位失败,系统自动切换至基于Sobel算子的边缘检测与形态学滤波方案,利用车牌纹理特征进行定位,提高了在光照不均或褪色情况下的鲁棒性。
- 自适应图像增强:利用限制对比度自适应直方图均衡化(CLAHE)增强车牌区域对比度,并采用Otsu算法(大津法)自动计算阈值进行二值化。
- 精准字符分割:基于垂直投影法(Vertical Projection),通过分析像素分布波峰波谷,精确切割出独立的字符图像,能够智能去除左右边框和铆钉干扰。
- 逻辑优化识别:采用基于相关系数(Corr2)的模板匹配算法。为提高速度和准确率,识别过程应用了位置逻辑约束:
* 第1位字符强制匹配省份汉字库。
* 第2位字符强制匹配英文字母库。
* 后续字符匹配字母与数字混合库。
- 动态模板库:程序运行时利用系统字体(Arial和SimHei)在内存中实时绘制并生成二值化字符模板,避免了文件路径配置错误的问题。
系统要求
- MATLAB R2016a 或更高版本
- Image Processing Toolbox(图像处理工具箱)
使用方法
- 确保MATLAB已安装并包含图像处理工具箱。
- 打开MATLAB软件,将当前工作目录切换至源码所在文件夹。
- 在命令窗口输入主函数名称或点击编辑器中的“运行”按钮。
- 在弹出的文件选择对话框中,选取一张包含清晰车牌的车辆图片(支持JPG, BMP, PNG, TIF格式)。
- 等待程序处理,系统将弹出一个综合窗口展示处理过程的中间结果,并在原图窗口标记出最终识别的车牌号码。
代码核心逻辑与算法分析
该系统的主程序逻辑严密,严格按照以下步骤执行:
1. 图像加载与标准化
程序启动后首先清理工作空间。在用户选择图片后,系统会检查图像宽度。如果宽度超过1024像素,则按比例缩小至1024像素宽。这一步旨在降低计算量,同时保留足够的细节用于后续处理。
2. 混合式车牌定位
定位模块实现了“颜色法”与“边缘法”的互补机制:
- 颜色分割:将RGB图像转换至HSV色彩空间。定义了特定的Hue(0.55-0.75)、Saturation(>0.4)和Value(>0.3)范围来提取蓝色区域。通过矩形结构元素的闭运算填充车牌内部空隙,再通过开运算去除噪点。
- 边缘检测(Fallback):若颜色法未找到有效区域(例如车牌颜色偏差较大),通过
rgb2gray转灰度后,使用edge函数(Sobel算子)提取垂直边缘,再经过形态学处理形成连通域。 - 区域筛选:使用
regionprops获取连通域的边界框(BoundingBox)和面积。根据车牌的物理特征(长宽比在2.0到6.0之间)以及面积最大化原则,筛选出最终的车牌区域并进行裁剪。
3. 车牌精处理
- 二值化:裁剪出的车牌图像先转换为灰度图,使用
adapthisteq进行对比度增强,随后利用graythresh计算全局阈值并转化为二值图像。 - 垂直边界清理:为了减少倾斜或边框的影响,算法计算水平投影(行像素和),自动寻找并剔除车牌上下的无字符区域(如螺丝孔或车身残留),只保留字符所在的核心行。
4. 基于投影的字符分割
- 水平切割:计算二值化车牌的垂直投影(列像素和)。数据经过高斯平滑处理后,首先确定车牌左右的有效起始点,切除多余背景。
- 字符分离:在有效区域内扫描投影曲线。当投影值大于设定阈值时标记为字符开始,小于阈值时标记为字符结束。
- 噪声过滤:分割过程中,程序会自动计算分割出的块宽度。过窄的块(通常是两个字符中间的“·”点或噪点)会被自动丢弃,只保留符合字符宽度特征的图像块。
- 归一化:所有被提取的字符图像块均被
imresize统一缩放至40x20像素,以便与模板库进行匹配。 - 智能筛选:最后一步会对分割出的连通域进行像素总量检测,剔除面积过小的伪字符块,力求保留最有可能是字符的7个片段。
5. 模板匹配识别
- 内存模板生成:利用MATLAB的绘图和文字插入功能(
insertText),在内存中动态生成0-9、A-Z及常见省份汉字的二值图像模板。 - 分段匹配策略:
* 程序根据字符在车牌中的索引位置,动态调整搜索范围(省份/字母/数字)。
* 核心匹配算法使用
corr2函数计算待识别字符与模板之间的二维相关系数。
* 选取相关系数最大的模板对应的字符作为识别结果,并记录置信度。
6. 结果可视化
程序最终利用
subplot在同一窗口中分区域展示:原始图像、定位掩膜、裁剪车牌、二值化结果、分割后的字符拼贴图以及最终的文本识别结果。同时,利用
rectangle和
text函数在原始图像上绘制红色边框并标注识别出的车牌号。