close all
clc
[fn,pn,fi]=uigetfile('ChePaiKu\*.jpg','选择图片');
YuanShi=imread([pn fn]);%输入原始图像
figure(1);subplot(3,2,1),imshow(YuanShi),title('原始图像');
%%%%%%%%%%1、图像预处理%%%%%%%%%%%
YuanShiHuiDu=rgb2gray(YuanShi);%转化为灰度图像
subplot(3,2,2),imshow(YuanShiHuiDu),title('灰度图像');
BianYuan=edge(YuanShiHuiDu,'canny',0.5);%Canny算子边缘检测
subplot(3,2,3),imshow(BianYuan),title('Canny算子边缘检测后图像');
se1=[1;1;1]; %线型结构元素
FuShi=imerode(BianYuan,se1); %腐蚀图像
subplot(3,2,4),imshow(FuShi),title('腐蚀后边缘图像');
se2=strel('rectangle',[25,25]); %矩形结构元素
TianChong=imclose(FuShi,se2);%图像聚类、填充图像
subplot(3,2,5),imshow(TianChong),title('填充后图像');
YuanShiLvBo=bwareaopen(TianChong,2000);%从对象中移除面积小于2000的小对象
figure(2);
subplot(2,2,1),imshow(YuanShiLvBo),title('形态滤波后图像');
%%%%%%%%%%2、车牌定位%%%%%%%%%%%
[y,x]=size(YuanShiLvBo);%size函数将数组的行数返回到第一个输出变量,将数组的列数返回到第二个输出变量
YuCuDingWei=double(YuanShiLvBo);
%%%%%%%%%%2.1、车牌粗定位之一确定行的起始位置和终止位置%%%%%%%%%%%
Y1=zeros(y,1);%产生y行1列全零数组
for i=1:y
for j=1:x
if(YuCuDingWei(i,j)==1)
Y1(i,1)= Y1(i,1)+1;%白色像素点统计
end
end
end
[temp,MaxY]=max(Y1);%Y方向车牌区域确定。返回行向量temp和MaxY,temp向量记录Y1的每列的最大值,MaxY向量记录Y1每列最大值的行号
subplot(2,2,2),plot(0:y-1,Y1),title('原图行方向像素点值累计和'),xlabel('行值'),ylabel('像素');
PY1=MaxY;
while ((Y1(PY1,1)>=50)&&(PY1>1))
PY1=PY1-1;
end
PY2=MaxY;
while ((Y1(PY2,1)>=50)&&(PY2<y))
PY2=PY2+1;
end
IY=YuanShi(PY1:PY2,:,:);
%%%%%%%%%%2.2、车牌粗定位之二确定列的起始位置和终止位置%%%%%%%%%%%
X1=zeros(1,x);%产生1行x列全零数组
for j=1:x
for i=PY1:PY2
if(YuCuDingWei(i,j,1)==1)
X1(1,j)= X1(1,j)+1;
end
end
end
subplot(2,2,4),plot(0:x-1,X1),title('原图列方向像素点值累计和'),xlabel('列值'),ylabel('像数');
PX1=1;
while ((X1(1,PX1)<3)&&(PX1<x))
PX1=PX1+1;
end
PX3=x;
while ((X1(1,PX3)<3)&&(PX3>PX1))
PX3=PX3-1;
end
CuDingWei=YuanShi(PY1:PY2,PX1:PX3,:);
subplot(2,2,3),imshow(CuDingWei),title('粗定位后的彩色车牌图像')
%%%%%%%%%%2.3、车牌精定位之一预处理%%%%%%%%%%%
CuDingWeiHuiDu=rgb2gray(CuDingWei); %将RGB图像转化为灰度图像
c_max=double(max(max(CuDingWeiHuiDu)));
c_min=double(min(min(CuDingWeiHuiDu)));
T=round(c_max-(c_max-c_min)/3); %T为二值化的阈值
CuDingWeiErZhi=im2bw(CuDingWeiHuiDu,T/256);
figure(3);
subplot(2,2,1),imshow(CuDingWeiErZhi),title('粗定位的二值车牌图像')%DingWei
%%%%%%%%%%2.4、车牌精定位之二去除边框干扰%%%%%%%%%%%
[r,s]=size(CuDingWeiErZhi);%size函数将数组的行数返回到第一个输出变量,将数组的列数返回到第二个输出变量
YuJingDingWei=double(CuDingWeiErZhi);%;CuDingWeiErZhi
X2=zeros(1,s);%产生1行s列全零数组
for i=1:r
for j=1:s
if(YuJingDingWei(i,j)==1)
X2(1,j)= X2(1,j)+1;%白色像素点统计
end
end
end
[temp,MaxX]=max(X2);
subplot(2,2,2),plot(0:s-1,X2),title('粗定位车牌图像列方向像素点值累计和'),xlabel('列值'),ylabel('像素');
%%%%%%%%%%2.4.1、去除左侧边框干扰%%%%%%%%%%%
[g,h]=size(YuJingDingWei);
ZuoKuanDu=0;YouKuanDu=0;KuanDuYuZhi=5;
while sum(YuJingDingWei(:,ZuoKuanDu+1))~=0
ZuoKuanDu=ZuoKuanDu+1;
end
if ZuoKuanDu<KuanDuYuZhi % 认为是左侧干扰
YuJingDingWei(:,[1:ZuoKuanDu])=0;%给图像d中1到KuanDu宽度间的点赋值为零
YuJingDingWei=QieGe(YuJingDingWei); %值为零的点会被切割
end
subplot(2,2,3),imshow(YuJingDingWei),title('去除左侧边框的二值车牌图像')
%%%%%%%%%2.4.1、去除右侧边框干扰%%%%%%%%%%%
[e,f]=size(YuJingDingWei);%上一步裁剪了一次,所以需要再次获取图像大小
d=f;
while sum(YuJingDingWei(:,d-1))~=0
YouKuanDu=YouKuanDu+1;
d=d-1;
end
if YouKuanDu<KuanDuYuZhi % 认为是右侧干扰
YuJingDingWei(:,[(f-YouKuanDu):f])=0;%
YuJingDingWei=QieGe(YuJingDingWei); %值为零的点会被切割
end
subplot(2,2,4),imshow(YuJingDingWei),title('精确定位的车牌二值图像')
% % % %%%%%%%%%%2.5、保存车牌图像%%%%%%%%%%%
% % % % imwrite(DingWei,'DingWei.jpg');
% % % % [filename,filepath]=uigetfile('DingWei.jpg','输入一个定位裁剪后的车牌图像');
% % % % jpg=strcat(filepath,filename);
% % % % DingWei=imread('DingWei.jpg');
% % % %%%%%%%%%%3、车牌字符分割%%%%%%%%%%%
% % % %%%%%%%%%%3.1、预处理%%%%%%%%%%%
% % % figure(4);
% % % % subplot(2,2,1),imshow(DingWei),title('车牌图像')
% % % % ChePaiHuiDu=rgb2gray(DingWei); %将RGB图像转化为灰度图像
% % % % subplot(2,2,2),imshow(ChePaiHuiDu),title('车牌灰度图像')
% % % % g_max=double(max(max(ChePaiHuiDu)));
% % % % g_min=double(min(min(ChePaiHuiDu)));
% % % % T=round(g_max-(g_max-g_min)/3); %T为二值化的阈值
% % % % [m,n]=size(ChePaiHuiDu);
% % % % % ChePaiErZhi=(double(ChePaiHuiDu)>=T); %车牌二值图像
% % % % ChePaiErZhi=im2bw(ChePaiHuiDu,T/256);
% % % % % im2bw:通过设定亮度将真彩等图像转换为二值图像,T/256为阈值,范围[0,1]
% % % % subplot(2,2,3),imshow(ChePaiErZhi),title('车牌二值图像')
ChePaiErZhi=YuJingDingWei;%logical()
ChePaiLvBo=bwareaopen(ChePaiErZhi,20);
subplot(1,2,1),imshow(ChePaiLvBo),title('形态学滤波后的车牌二值图像')
ChePaiYuFenGe=double(ChePaiLvBo);
[p,q]=size(ChePaiYuFenGe);
X3=zeros(1,q);%产生1行q列全零数组
for j=1:q
for i=1:p
if(ChePaiYuFenGe(i,j)==1)
X3(1,j)=X3(1,j)+1;
end
end
end
subplot(1,2,2),plot(0:q-1,X3),title('列方向像素点灰度值累计和'),xlabel('列值'),ylabel('累计像素量');
%%%%%%%%%%3.2、字符分割%%%%%%%%%%%p高q宽,倒序分割
Px0=q;%字符右侧限
Px1=q;%字符左侧限
for i=1:6
while((X3(1,Px0)<3)&&(Px0>0))
Px0=Px0-1;
end
Px1=Px0;
while(((X3(1,Px1)>=3))&&(Px1>0)||((Px0-Px1)<15))
Px1=Px1-1;
end
ChePaiFenGe=ChePaiLvBo(:,Px1:Px0,:);
figure(6);subplot(1,7,8-i);imshow(ChePaiFenGe);
ii=int2str(8-i);
imwrite(ChePaiFenGe,strcat(ii,'.jpg'));%strcat连接字符串。保存字符图像。
Px0=Px1;
end
%%%%%%%%%%对第一个字符进行特别处理%%%%%%%%%%%
PX3=Px1;%字符1右侧限
while((X3(1,PX3)<3)&&(PX3>0))
PX3=PX3-1;
end
ZiFu1DingWei=ChePaiYuFenGe(:,1:PX3,:);
subplot(1,7,1);imshow(ZiFu1DingWei);
imwrite(ZiFu1DingWei,'1.jpg');
%%%%%%%%%%%4、车牌字符识别%%%%%%%%%%%
%%%%%%%%%%%4.1、车牌字符预处理%%%%%%%%%%%
ZiFu1=imresize(~imread('1.jpg'), [110 55],'bilinear');%用反色识别
ZiFu2=imresize(~imread('2.jpg'), [110 55],'bilinear');
ZiFu3=imresize(~imread('3.jpg'), [110 55],'bilinear');
ZiFu4=imresize(~imread('4.jpg'), [110 55],'bilinear');
ZiFu5=imresize(~imread('5.jpg'), [110 55],'bilinear');
ZiFu6=imresize(~imread('6.jpg'), [110 55],'bilinear');
ZiFu7=imresize(~imread('7.jpg'), [110 55],'bilinear');
%%%%%%%%%%%4.2、把0-9,A-Z以及省份简称的数据存储方便访问%%%%%%%%%%%
HanZi=DuQuHanZi(imread('MuBanKu\sichuan.bmp'),imread('MuBanKu\guizhou.bmp'),imread('MuBanKu\beijing.bmp'),imread('MuBanKu\chongqing.bmp'),...
imread('MuBanKu\guangdong.bmp'),imread('MuBanKu\shandong.bmp'),imread('MuBanKu\zhejiang.bmp'));
ShuZiZiMu=DuQuSZZM(imread('MuBanKu\0.bmp'),imread('MuBanKu\1.bmp'),imread('MuBanKu\2.bmp'),imread('MuBanKu\3.bmp'),imread('MuBanKu\4.bmp'),...
imread('MuBanKu\5.bmp'),imread('MuBanKu\6.bmp'),imread('MuBanKu\7.bmp'),imread('MuBanKu\8.bmp'),imread('MuBanKu\9.bmp'),...
imread('MuBanKu\10.bmp'),imread('MuBanKu\11.bmp'),imread('MuBanKu\12.bmp'),imread('MuBanKu\13.bmp'),imread('MuBanKu\14.bmp'),...
imread('MuBanKu\15.bmp'),imread('MuBanKu\16.bmp'),imread('MuBanKu\17.bmp'),imread('MuBanKu\18.bmp'),imread('MuBanKu\19.bmp'),...
imread('MuBanKu\20.bmp'),imread('MuBanKu\21.bmp'),imread('MuBanKu\22.bmp'),imread('MuBanKu\23.bmp'),imread('MuBanKu\24.bmp'),...
imread('MuBanKu\25.bmp'),imread('MuBanKu\26.bmp'),imread('MuBanKu\27.bmp'),imread('MuBanKu\28.bmp'),imread('MuBanKu\29.bmp'),...
imread('MuBanKu\30.bmp'),imread('MuBanKu\31.bmp'),imread('MuBanKu\32.bmp'),imread('MuBanKu\33.bmp'));
Z
没有合适的资源?快使用搜索试试~ 我知道了~
基于MATLAB的车牌识别系统源码使用传统算法实现.zip
共66个文件
bmp:43个
jpg:12个
m:10个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 183 浏览量
2024-05-03
10:19:30
上传
评论
收藏 977KB ZIP 举报
温馨提示
基于MATLAB的车牌识别系统源码使用传统算法实现.zip 基于MATLAB的车牌识别系统源码使用传统算法实现.zip 基于MATLAB的车牌识别系统源码使用传统算法实现.zip 基于MATLAB的车牌识别系统源码使用传统算法实现.zip
资源推荐
资源详情
资源评论
收起资源包目录
基于MATLAB的车牌识别系统源码使用传统算法实现.zip (66个子文件)
code
ShiBieShuZi.m 377B
ShiBieSZZM.m 2KB
MuBanKu
31.BMP 4KB
9.BMP 45KB
26.BMP 76KB
5.BMP 19KB
12.BMP 38KB
22.BMP 4KB
7.BMP 44KB
4.BMP 19KB
25.BMP 4KB
6.BMP 31KB
30 - Copy.BMP 5KB
23.BMP 52KB
10.BMP 46KB
14.BMP 33KB
20.BMP 46KB
33.BMP 32KB
zhejiang.bmp 2KB
24.BMP 47KB
2.BMP 19KB
beijing.BMP 2KB
27.BMP 43KB
guizhou.bmp 2KB
17.BMP 4KB
8.BMP 19KB
19.BMP 50KB
16.BMP 41KB
3.BMP 18KB
0.BMP 34KB
28.BMP 4KB
sichuan.bmp 2KB
chongqing.bmp 2KB
15.BMP 44KB
29.BMP 5KB
13.BMP 71KB
shandong.bmp 2KB
21.BMP 17KB
1.BMP 18KB
32.BMP 50KB
jiangsu.BMP 2KB
30.BMP 69KB
18.BMP 4KB
11.BMP 67KB
guangdong.BMP 2KB
ChePaiKu
1 (2).jpg 189KB
1 (3).jpg 138KB
1 (1).jpg 291KB
2 (1).jpg 58KB
2 (2).jpg 276KB
QieGe.m 502B
DuQuZiMu.m 2KB
2.jpg 1KB
ShiBieHanZi.m 764B
DuQuHanZi.m 743B
DuQuSZZM.m 3KB
6.jpg 1KB
1.jpg 1KB
Data.xls 32B
ShiBieZiMu.m 2KB
DuQuShuZi.m 1KB
5.jpg 1KB
ChePai.m 9KB
3.jpg 950B
7.jpg 1KB
4.jpg 915B
共 66 条
- 1
资源评论
生活家小毛.
- 粉丝: 6037
- 资源: 7289
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 使用 Python PyQt4 和 DirectX 编程进行游戏控制的虚拟键盘.zip
- 使用 Premake 进行 assimp.zip
- 使用 Pony 创建 DirectX 游戏的游戏框架 .zip
- MATLAB实现KOA-CNN-BiGRU-Attention多变量时间序列预测(含完整的程序和代码详解)
- 无人机和行人的yolo数据集
- 使用 ImGui 和 DirectX12 展示独立窗口.zip
- 使用 Hieroglyph3 框架的 DirectX 11 教程.zip
- 使用 GSD (DirectX Hook Library) 绘制十字线.zip
- 测试系统,用于平时练习使用
- 基于Flask的农产品价格数据可视化及预测系统设计与实现
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功