详情联系 QQ:3422413312 ( 请 备 注在 哪
信
里
看
到
此
息 )
操作流程;1、选择图片(图中按钮),选取入库车牌 2、开始识别(图中按钮) ;3、出库
识别(图中按钮),同时可以查看车牌的预处理操作内容;
代码流程:
入库:
1、图像预处理包括:车牌粗定位、倾斜矫正、二值化、两次形态处理;
yt=imread(handles.zhaopianlujing); %yt 为原始图像
axes(handles.show);
%显示原图
%显示原图
% axes(handles.axes46);
imshow(yt);
handles.yt = yt;
guidata(hObject,handles);
%================================车牌粗定位
===============================
waitbar(0.1);
[ydown,yup,xright,xleft]=first_bianjie(yt);
%第一张图
if
ydown>0
[ydown,yup,xright,xleft,yuzhi]=xiuzheng(ydown,yup,xright,xleft); %车牌区
域根据面积二次修正
Plate = yt(yup:ydown,xleft:xright,:);
handles.Plate = Plate; %放入 handles 结构体中,方便在其他回调函数中
调用 第二张图片
guidata(hObject,handles);
bw=Plate;
%========数学形态学处理======
bw=im2bw(bw,graythresh(bw)); %graythresh 函数找到二值化阈值
erzhihua = bw;
handles.erzhihua = erzhihua;
guidata(hObject,handles);
bw=bwmorph(bw,'open',5); % 执行形态学开操作(先腐蚀后膨胀)
%第五张图片,二值化后的图片
bw=bwmorph(bw,'hbreak',inf);% 'hbreak'移除连通的像素
bw=bwmorph(bw,'spur',inf);% 移除刺激(孤立)像素。
bw=bwmorph(bw,'open',5);% 执行形态学开操作(先腐蚀后膨胀)
% se=strel('disk',1);
% bw=imdilate(bw,se);
%开启操作
xingtaixue = bw;
handles.xingtaixue = xingtaixue; %第六张图片,第一次形态学处理后的图
片
guidata(hObject,handles);
bw=~bw; %转化车牌信息的颜色
%==对图像进一步裁剪,保证边框贴近字体====
bw=touying(bw);
waitbar(0.5);
%车牌信息为白色
bw=~bw;
diercijiancai = bw;
handles.diercijiancai = diercijiancai;
%第七张图片,第二次剪裁后的图
片
guidata(hObject,handles);
bw = bwareaopen(bw, yuzhi);
dierciyichu = bw;
handles.dierciyichu = dierciyichu;
%移除小对象
%第八张图片,第二次移除小对象后
的图片
guidata(hObject,handles);
bw=~bw;
%黑字白底
[y,~]=size(bw);%对长宽重新赋值
%==========倾斜校正===========
qingxiejiao=rando_bianhuan(bw);
bw=imrotate(bw,qingxiejiao,'bilinear','crop');%取值为负值向右旋转
jiaozhenghou = bw;
handles.jiaozhenghou = jiaozhenghou;
%第四张图片,车牌倾斜矫正后
的图片
guidata(hObject,handles);
waitbar(0.4);
2、车牌精确定位;
%==============================车牌精确定位
===============================
bw=rgb_huiduhua(bw);
chepaihuidu = bw;
handles.chepaihuidu = chepaihuidu;
guidata(hObject,handles);
%第三张图片
%将车牌彩色图变换为灰度图
3、车牌字符分割;
%=========================================字符分割
============================================
fenge=shuzifenge(bw);
waitbar(0.7);
%============ 剪裁七个字符===========
han_zi =bw( 1:y,fenge(1):fenge(2));
zi_mu
=bw( 1:y,fenge(3):fenge(4));
xuhao_1 =bw( 1:y,fenge(5):fenge(6));
xuhao_2 =bw( 1:y,fenge(7):fenge(8));
xuhao_3 =bw( 1:y,fenge(9):fenge(10));
xuhao_4 =bw( 1:y,fenge(11):fenge(12));
xuhao_5 =bw( 1:y,fenge(13):fenge(14));
4、字符识别选择
%=====显示分割图像结果========
axes(handles.axes2);
imshow(han_zi);
axes(handles.axes15);
imshow(zi_mu);
axes(handles.axes16);
imshow(xuhao_1);
axes(handles.axes17);
imshow(xuhao_2);
axes(handles.axes18);
imshow(xuhao_3);
axes(handles.axes19);
imshow(xuhao_4);
axes(handles.axes20);
imshow(xuhao_5);
waitbar(0.8);
%==========================================识别
================================================
%=======将分割后的字符归一化=========
guiyihua_hanzi =
guiyihua_zimu =
[110 70],'bilinear');
guiyihua_xuhao1= imresize(xuhao_1,[110 70],'bilinear');
guiyihua_xuhao2 = imresize(xuhao_2,[110 70],'bilinear');
guiyihua_xuhao3 = imresize(xuhao_3,[110 70],'bilinear');
guiyihua_xuhao4 = imresize(xuhao_4,[110 70],'bilinear');
imresize(han_zi, [110 70],'bilinear');
imresize(zi_mu,
guiyihua_xuhao5 = imresize(xuhao_5,[110 70],'bilinear');
%============ 把 0-9 , A-Z 以及省份简称的数据存储方便访问
====================
muban_hanzi=guiyihua_muban_hanzi;
muban_hanzi = ~muban_hanzi;
%因数字和字母比例不同。这里要修改
muban_shuzizimu = guiyihua_muban_szzm;
mubna_zimu = guiyihua_muban_zimu;
waitbar(0.9);
%============================识别结果
================================
jieguohanzi = shibiehanzi(muban_hanzi,guiyihua_hanzi);
shibiejieguo(1) =jieguohanzi;
jieguozimu
shibiejieguo(i) =jieguozimu;
shibiejieguo(i) ='·';
i=i+1;
jieguozm_sz_1= shibiezm_sz(muban_shuzizimu,guiyihua_xuhao1);
shibiejieguo(i) =jieguozm_sz_1;i=i+1;
jieguozm_sz_2= shibiezm_sz(muban_shuzizimu,guiyihua_xuhao2);
shibiejieguo(i) =jieguozm_sz_2;i=i+1;
jieguozm_sz_3= shibiezm_sz(muban_shuzizimu,guiyihua_xuhao3);
shibiejieguo(i) =jieguozm_sz_3;i=i+1;
jieguozm_sz_4= shibiezm_sz(muban_shuzizimu,guiyihua_xuhao4);
shibiejieguo(i) =jieguozm_sz_4;i=i+1;
jieguozm_sz_5= shibiezm_sz(muban_shuzizimu,guiyihua_xuhao5);
shibiejieguo(i) =jieguozm_sz_5;
= shibiezimu(mubna_zimu,guiyihua_zimu);
i=2;
i=i+1;
handles.shibiejieguo=shibiejieguo;
guidata(hObject,handles);
set(handles.chepai,'string',shibiejieguo);
%显示识别的车牌 即之前的
“车牌信息”
入库:车位减少,之前 100 变成 99;
出库,
识别:(同上)
车位增加恢复到 100;计算停车时间和停车费用;