基于matlab字符匹配的车牌识别系统 【车牌识别】基于计算机视觉,数字图像处理,模板匹配算法(含GUI界面) 系统内数据库丰富,车牌识别速度快,并包含识别率检测功能,目前识别率可达到73% 代码系统完整,有注释,可做车牌识别系统学习参考 ,GUI讲解视频。 (第013期)
这玩意儿真能认车牌?最近整了个基于MATLAB的车牌识别系统,核心就靠字符匹配。实测下来识别率73%左右,虽然比不了商业系统,但代码完整适合新手练手。咱们直接拆开看看怎么玩的。
先看图像预处理。原始车牌照片进来得先扒层皮:
img_gray = rgb2gray(img_raw); % 先扒成灰度图 img_bw = imbinarize(img_gray, 'adaptive','Sensitivity',0.4); % 动态二值化 img_denoise = medfilt2(img_bw,[3,3]); % 中值滤波去噪点这套组合拳下去,车牌区域基本能突出显示。重点是这个Sensitivity参数,调太低会把有效信息也干掉了,0.4是试了二十多张图摸出来的经验值。
字符分割最要命。遇到车牌边框粘连的情况,我用了垂直投影+连通域分析:
vertical_proj = sum(~img_denoise, 1); % 垂直投影 seg_pos = find(diff(vertical_proj > threshold) ~= 0); % 找突变点 for k = 1:2:length(seg_pos) char_img = img_denose(:, seg_pos(k):seg_pos(k+1)); % 截取单个字符 if size(char_img,2) > 5 % 过滤噪声 chars{end+1} = imresize(char_img,[110 55]); % 统一尺寸 end end这里有个坑——车牌第2个字符和后面的间隔不一样,得单独处理间隔阈值。有时候会把"川"字分成两半,后来加了宽高比校验才解决。
模板匹配才是重头戏。数据库里存了各省简称+字母数字的模板:
function [char, max_score] = template_match(input_char) templates = load('charset.mat'); % 预加载模板 input_features = extractHOGFeatures(input_char); % 提取特征 for n = 1:length(templates) score(n) = corr2(input_features, templates(n).HOG); end [max_score, idx] = max(score); char = templates(idx).label; end最初用直接像素对比,识别率卡在60%上不去。换成HOG特征后涨了10个百分点,但计算量也上来了。后来发现预处理时统一字符尺寸到110x55,比原论文推荐的尺寸更适合国内车牌。
GUI界面藏着几个实用技巧:在axes控件显示图像时加上hold on,不然切换图片会闪屏;进度条用waitbar反而影响实时性,改成了自己绘制的色块进度显示。
实测发现雨天识别率暴跌到50%,泥点子容易导致字符粘连。后来在预处理加了顶帽运算处理反光,算是救回来一点。要说改进方向,得把模板匹配升级成深度学习,但那就不是新手向的玩法了。
完整代码里每个函数都标了调试时的踩坑记录,比如"千万别在循环里imshow会卡死"这种血泪经验。需要源码的老铁可以看简介里的获取方式,附带半小时的GUI操作视频,手把手教怎么改参数测试。