数字图像处理|Matlab-基于颜色的车牌识别程序

Matlab-车牌识别⻋牌自动识别技术的关键在于⻋牌定位、字符切割、字符识别及后续处理等Hough变换的方法在⻋牌区域变形或图象被污损情况下容易失效灰度分割则比直线检测的方法要稳定,但当图象在有许多与⻋牌的灰度非常相似的区域时,该方法也容易失效纹理分析在遇到类似⻋牌纹理特征的其他因素干扰时,⻋牌定位正确率也会受到影响过程&结果????Matlab代码????main.m????cl...
摘要由CSDN通过智能技术生成

Matlab-车牌识别

修改优化后代码链接:https://download.csdn.net/download/qq_43571150/12033276

⻋牌自动识别技术的关键在于⻋牌定位、字符切割、字符识别及后续处理等

  1. Hough变换的方法在⻋牌区域变形或图象被污损情况下容易失效
  2. 灰度分割则比直线检测的方法要稳定,但当图象在有许多与⻋牌的灰度非常相似的区域时,该方法也容易失效
  3. 纹理分析在遇到类似⻋牌纹理特征的其他因素干扰时,⻋牌定位正确率也会受到影响

过程&结果👇
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Matlab代码👇

main.m👇

clc;
clear all;
%主要模块如下:
%颜色信息提取、车牌区域定位、识别、提取、检测倾斜度、车牌校正
%车牌区域2值化、擦除干扰区域、文字分割、模版匹配、结果输出
%
%

%% 自动弹出提示框读入图片
[fn,pn,fi]=uigetfile('*.jpg','选择图片');
I=imread([pn fn]);
figure,imshow(I);title('原始图像');      %显示原始图像
chepailujing=[pn fn];
I_bai=I;
[PY2,PY1,PX2,PX1]=caitu_fenge(I);       %图像分割,车牌定位,并得到车牌的上边界PY1、下边界PY2、左边界PX1、右边界 PX2


%% 分割车牌区域
[PY2,PY1,PX2,PX1,threshold]=SEC_xiuzheng(PY2,PY1,PX2,PX1);  %车牌区域根据面积二次修正
Plate=I_bai(PY1:PY2,PX1:PX2,:);

bw=Plate;figure,imshow(bw);title('车牌图像');

%根据图像的倾斜度进行选择
bw=rgb2gray(bw);figure,imshow(bw);title('灰度图像');
qingxiejiao=rando_bianhuan(bw);     %倾斜校正
bw=imrotate(bw,qingxiejiao,'bilinear','crop');figure,imshow(bw);title('倾斜校正');%取值为负值向右旋转

bw=im2bw(bw,graythresh(bw));    %graythresh功能:使用最大类间方差法找到图片的一个合适的阈值,更好地把一张灰度图像转换为二值图像
bw=bwmorph(bw,'hbreak',inf);    %对二值图像inf 无穷大的形态学处理,直到图像不再发生变化, 'hbreak':断开图像中的H型连接
bw=bwmorph(bw,'spur',inf);      %'spur':去除小的分支(毛刺)
bw=bwmorph(bw,'open',5);        %指定的形态学处理5'open':进行形态学开运算(即先膨胀后腐蚀)
bw = bwareaopen(bw, threshold); %删除二值图像bw中面积小于P的对象,默认情况下conn使用8邻域

figure,imshow(bw);title('擦除');
bw=~bw;%倒置二进制矩阵bw
figure,imshow(bw);title('擦除反色'); 

%上下边框的去除,对图像进一步裁剪,保证边框贴近字体
bw=touying(bw);     %投影法
figure;imshow(bw);title('Y方向处理');
bw=~bw;
bw=bwareaopen(bw, threshold);
bw=~bw;
[y,x]=size(bw);     %对长宽重新赋值


%% 文字分割
fenge=shuzifenge(bw,qingxiejiao);
[m,k]=size(fenge);

%显示分割图像结果
figure;
for s=1:2:k-1
    subplot(1,k/2,(s+1)/2);imshow(bw( 1:y,fenge(s):fenge(s+1)));
end

%给七张图片定位
han_zi  =bw( 1:y,fenge(1):fenge(2));
zi_mu   =bw( 1:y,fenge(3):fenge(4));
zm_sz_1 =bw( 1:y,fenge(5):fenge(6));
zm_sz_2 =bw( 1:y,fenge(7):fenge(8));  
shuzi_1 =bw( 1:y,fenge(9):fenge(10)); 
shuzi_2 =bw( 1:y,fenge(11):fenge(12)); 
shuzi_3 =bw( 1:y,fenge(13):fenge(14)); 


%% 识别

%把修正数据读入
xiuzhenghanzi   = imresize(han_zi, [110 55],'bilinear');
xiuzhengzimu    = imresize(zi_mu,  [110 55],'bilinear');
xiuzhengzm_sz_1 = imresize(zm_sz_1,[110 55],'bilinear');
xiuzhengzm_sz_2 = imresize(zm_sz_2,[110 55],'bilinear');
xiuzhengshuzi_1 = imresize(shuzi_1,[110 55],'bilinear');
xiuzhengshuzi_2 = imresize(shuzi_2,[110 55],'bilinear');
xiuzhengshuzi_3 = imresize(shuzi_3,[110 55],'bilinear');

%0-9 , A-Z以及省份简称的数据存储方便访问
hanzishengfen=duquhanzi(imread('cpgui.bmp'),imread('cpguizhou.bmp'),imread('cpjing.bmp'),imread('cpsu.bmp'),imread('cpyue.bmp'));%识别汉字

%数字和字母比例不同
shuzizimu=duquszzm(imread('0.bmp'),imread('1.bmp'),imread('2.bmp'),imread('3.bmp'),imread('4.bmp'),...
                   imread('5.bmp'),imread('6.bmp'),imread('7.bmp'),imread('8.bmp'),imread('9.bmp'),...
                   imread('10.bmp'),imread('11.bmp'),imread('12.bmp'),imread('13.bmp'),imread('14.bmp'),...
                   imread('15.bmp'),imread('16.bmp'),imread('17.bmp'),imread('18.bmp'),imread('19.bmp'),...
                   imread('20.bmp'),imread('21.bmp'),imread('22.bmp'),imread('23.bmp'),imread('24.bmp'),...
                   imread('25.bmp'),imread('26.bmp'),imread('27.bmp'),imread('28.bmp'),imread('29.bmp'),...
                   imread('30.bmp'),imread('31.bmp'),imread('32.bmp'),imread('33.bmp'));
               
zimu  = duquzimu(imread('10.bmp'),imread('11.bmp'),imread('12.bmp'),imread('13.bmp'),imread('14.bmp'),...
                 imread('15.bmp'),imread('16.bmp'),imread('17.bmp'),imread('18.bmp'),imread('19.bmp'),...
                 imread('20.bmp'),imread('21.bmp'),imread('22.bmp'),imread('23.bmp'),imread('24.bmp'),...
                 imread('25.bmp'),imread('26.bmp'),imread('27.bmp'),imread('28.bmp'),imread('29.bmp'),...
                 imread('30.bmp'),imread('31.bmp'),imread('32.bmp'),imread('33.bmp'));
             
shuzi = duqushuzi(imread('0.bmp'),imread('1.bmp'),imread('2.bmp'),imread('3.bmp'),imread('4.bmp'),...
                 imread('5.bmp'),imread('6.bmp'),imread('7.bmp'),imread('8.bmp'),imread('9.bmp')); 

%% 识别结果
i=1;
jieguohanzi  = shibiehanzi(hanzishengfen,xiuzhenghanzi);shibiejieguo(1,i) =jieguohanzi;  i=i+1;
jieguozimu   = shibiezimu(zimu,xiuzhengzimu);           shibiejieguo(1,i) =jieguozimu;   i=i+1;
jieguozm_sz_1= shibiezm_sz(shuzizimu,xiuzhengzm_sz_1);  shibiejieguo(1,i) =jieguozm_sz_1;i=i+1;
jieguozm_sz_2= shibiezm_sz(shuzizimu,xiuzhengzm_sz_2);  shibiejieguo(1,i) =jieguozm_sz_2;i=i+1;
jieguoshuzi_1= shibieshuzi(shuzi,xiuzhengshuzi_1);      shibiejieguo(1,i) =jieguoshuzi_1;i=i+1;
jieguoshuzi_2= shibieshuzi(shuzi,xiuzhengshuzi_2);      shibiejieguo(1,i) =jieguoshuzi_2;i=i+1;
jieguoshuzi_3= shibieshuzi(shuzi,xiuzhengshuzi_3);      shibiejieguo(1,i) =jieguoshuzi_3;i=i+1;

%对话框显示显示
shibiejieguo;
msgbox(shibiejieguo,'识别结果');

caitu_fenge.m👇

function [PY2,PY1,PX2,PX1]=caitu_fenge(I)
[y,x,z]=size(I);    %行数/列数/RGB层数
myI=double(I);      %将I数据转换成双精度型
Y_threshlow=5;      %阈值 决定提取的彩图质量
X_firrectify=5;     %干扰因子 适当提高可抗干扰,但是小图会照成剪裁太多

%% Y 方向
Blue_y=zeros(y,1);      %创建y列向量,统计蓝色像素点
for i=1:y
    for j=1:x   
        if(
  • 17
    点赞
  • 134
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值