function varargout = main(varargin)
% 开始初始化代码 - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @main_OpeningFcn, ...
'gui_OutputFcn', @main_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% 结束初始化代码
pause(1);
% 执行之前主要是可见的。
function main_OpeningFcn(hObject, eventdata, handles, varargin)
set(handles.process,'enable','on')
% 此函数没有输出参数,见 OutputFcn.
% main的选择默认的命令行输出
handles.output = hObject;
% 更新handles 结构
guidata(hObject, handles);
% UIWAIT 等待用户响应 (see UIRESUME)
% uiwait(handles.figure1);
% --- 这个函数的输出返回到命令行。
function varargout = main_OutputFcn(hObject, eventdata, handles)
tic
% 获得缺省命令行输出的把手结构
varargout{1} = handles.output;
% --- 执行按钮在pushbutton1。
function pushbutton1_Callback(hObject, eventdata, handles)
[filename pathname]=uigetfile({'*.jpg';'*.bmp'}, 'File Selector');
I = imread([pathname '\' filename]);
handles.I = I;
% 更新处理结构
guidata(hObject, handles);
axes(handles.axes1);
imshow(I);title('原始图片')
set(handles.process,'enable','on')
% --- 执行过程中按下按钮。
function process_Callback(hObject, eventdata, handles)
set(handles.edit3,'string','正在识别!请稍候...');
I = handles.I;
I1=rgb2gray(I);;%rgb2gray转换成灰度图
guidata(hObject, handles);
axes(handles.axes2);
imshow(I1);title('灰度图');
axes(handles.axes3);
imhist(I1);title('灰度图直方图');
%继续
pause(2);
I2=edge(I1,'roberts',0.15,'both');
guidata(hObject, handles);
axes(handles.axes2);
imshow(I2);title('robert算子边缘检测');
pause(2);
se=[1;1;1];
I3=imerode(I2,se);
guidata(hObject, handles);
axes(handles.axes3);
imshow(I3);title('腐蚀后图像');
%继续
pause(2);
se=strel('rectangle',[10,25]);%生成一个矩阵
I4=imclose(I3,se);%闭运算
guidata(hObject, handles);
axes(handles.axes2);
imshow(I4);title('平滑图像的轮廓');
%继续
pause(2);
I5=bwareaopen(I4,2000);%小于2000的对象都被删除
guidata(hObject, handles);
axes(handles.axes2);
imshow(I5);title('从对象中移除小对象');
%继续
pause(2);
[PY2,PY1,PX2,PX1]=chepai_fenge(I5);%调用分割车牌
global threshold;
[PY2,PY1,PX2,PX1,threshold]=chepai_xiuzheng(PY2,PY1,PX2,PX1);%调用车牌校正
IY=I(PY1:PY2,:,:);
Plate=I5(PY1:PY2,PX1:PX2);%使用caitu_tiqu
global dw;
dw=Plate;
PX1=PX1-1;%对车牌区域的校正
PX2=PX2+1;
dw=I(PY1:PY2,PX1:PX2,:);
axes(handles.axes2);
imshow(dw),title('区域的校正');
pause(2);
t=tic;
guidata(hObject, handles);
axes(handles.axes2);
imshow(IY),title('水平方向合理区域');
axes(handles.axes3);
imshow(dw),title('定位剪切后的彩色图像');
pause(2);
imwrite(dw,'New number plate.jpg');
%[filename,filepath]=uigetfile('New number plate.jpg','输入一个定位裁剪后的车牌图像');
%jpg=strcat(filepath,filename);
a=imread('New number plate.jpg');
b=rgb2gray(a);%对定位后的车牌灰度化
figure(3),subplot(3,2,1),imshow(b),title('灰度图像');
g_max=double(max(max(b)));
g_min=double(min(min(b)));
T=round(g_max-(g_max-g_min)/2); %T 为二值化的阈值
[m,n]=size(b);
d=(double(b)>=T); % d:二值图像
figure(3),subplot(3,2,2),imshow(d),title('二值图像');
figure(3),subplot(3,2,3),imshow(d),title('均值滤波前');
pause(1);
h=fspecial('average',3); %均值滤波器
d=im2bw(round(filter2(h,d)));
figure(3),subplot(3,2,4),imshow(d),title('均值滤波后');
se=eye(2); % eye(n) returns the n-by-n identity matrix 单位矩阵
%字符面积与车牌面积之比在(0.235,0.365)之间
[m,n]=size(d); %如果大于0.365则对图像进行腐蚀,如果小于0.235则对图像进行膨胀
if bwarea(d)/m/n>=0.365%计算面积
d=imerode(d,se);%imerode 实现图像腐蚀 d为待处理图像,se是结构元素对象
elseif bwarea(d)/m/n<=0.235
d=imdilate(d,se);%imdilate 图像膨胀
end
figure(3),subplot(3,2,5),imshow(d),title('膨胀或腐蚀处理后');
pause(2);
saveas(3,'3.fig');
close 3;
% 寻找连续有文字的块,若长度大于某阈值,则认为该块有两个字符组成,需要分割
d=zifufenge(d);
[m,n]=size(d);
guidata(hObject, handles);
axes(handles.axes3);imshow(d);
k1=1;k2=1;s=sum(d);j=1;
while j~=n
while s(j)==0
j=j+1;
end
k1=j;
while s(j)~=0 && j<=n-1
j=j+1;
end
k2=j-1;
if k2-k1>=round(n/6.5)
[val,num]=min(sum(d(:,[k1+5:k2-5])));
d(:,k1+num+5)=0 % 分割
end
end
% 再分割
d=zifufenge(d);
% 切割出 7 个字符
y1=10;y2=0.25;flag=0;word1=[];
while flag==0
[m,n]=size(d);
left=1;wide=0;
while sum(d(:,wide+1))~=0
wide=wide+1;
end
if wide<y1 % 认为是左侧干扰
d(:,[1:wide])=0;
d=zifufenge(d);
else
temp=zifufenge(imcrop(d,[1 1 wide m]));
[m,n]=size(temp);
all=sum(sum(temp));
two_thirds=sum(sum(temp([round(m/3):2*round(m/3)],:)));
if two_thirds/all>y2
flag=1;word1=temp;
end
d(:,[1:wide])=0;
d=zifufenge(d);
end
end
% 分割出第二个字符
[word2,d]=getword(d);
pause(1);
% 分割出第三个字符
[word3,d]=getword(d);
pause(1);
% 分割出第四个字符
[word4,d]=getword(d);
pause(1);
% 分割出第五个字符
[word5,d]=getword(d);
pause(1);
% 分割出第六个字符
[word6,d]=getword(d);
pause(1);
% 分割出第七个字符
[word7,d]=getword(d);
pause(1);
guidata(hObject, handles);
axes(handles.axes4);imshow(word1),title('1');
guidata(hObject, handles);
axes(handles.axes4);imshow(word2),title('2');
guidata(hObject, handles);
axes(handles.axes4);imshow(word3),title('3');
guidata(hObject, handles);
axes(handles.axes4);imshow(word4),title('4');
guidata(hObject, handles);
axes(handles.axes4);imshow(word5),title('5');
guidata(hObject, handles);
axes(handles.axes4);imshow(word6),title('6');
guidata(hObject, handles);
axes(handles.axes4);imshow(word7),title('7');
[m,n]=size(word1);
% 商用系统程序中归一化大小为 40*20,此处演示
word1=imresize(word1,[40 20]);
word2=imresize(word2,[40 20]);
word3=imresize(word3,[40 20]);
word4=imresize(word4,[40 20]);
word5=imresize(word5,[40 20]);
word6=imresize(word6,[40 20]);
word7=imresize(word7,[40 20]);
guidata(hObject, handles);
axes(handles.axes4);imshow(word1),title('1');
guidata(hObject, handles);
axes(handles.axes5);imshow(word2),title('2');
guidata(hObject, handles);
axes(handles.axes6);imshow(word3),title('3');
guidata(hObject, handles);
axes(handles.axes7);imshow(word4),title('4');
guidata(hObject, handles);
axes(handles.axes8);imshow(word5),title('5');
guidata(hObject, handles);
axes(handles.axes9);imshow(word6),title('6');
guidata(hObject, handles);
axes(handles.axes10);imshow(word7),title('7');
imwrite(word1,'1.jpg');
imwrite(word2,'2.jpg');
imwrite(word3,'3.jpg');
imwrite(word4,'4.jpg');
imwrite(word5,'5.jpg');
imwrite(word6,'6.jpg');
imwrite(word7,'7.jpg');
liccode=char(['0':'9' 'A':'Z' '桂鲁苏豫京国家安全你我他']); %建立自动识别字符代码表
SubBw2=zeros(40,20); %初始值归为0矩阵
l=1;
for I=1:7
ii=int2str(I);%将整数转换为字符串
t=imread([ii,'.jpg']);
SegBw2=imresize(t,[40 20],'nearest');%实用最近邻插值法放大图像
% if l==1 %第一位汉字识别
kmin=37;
kmax=48;
pause(1);
% elseif l==2 %第二位 A~Z 字母识别
% kmin=11;
% kmax=36;
% pause(1);
% else l>=3 %第三位以后是字母或数字识别
% kmin=1;
% kmax=36;
% end
for k2=kmin:kmax
fname=strcat('模板库\',liccode(k2),'.jpg'); %读取字符模板库中的图像
SamBw2 = (imread(fname));
if ndims(SamBw2) == 3%如果图片是3维(彩图)
SamBw2 = rgb2gray(SamBw2);%转成灰图
end%结束
for i=1:40
for j=1:20
SubBw2(i,j)=SegBw2(i,j)-SamBw2(i,j);
end
end
% 以上相当于两幅图相减得到第三幅图
Dmax=0;
for k1=1:40
for l1=1:20
if ( SubBw2(k1,l1) > 0 || SubBw2(k1,l1) <0 )
Dmax=Dmax+1; %如果两幅图像对应的图像相
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
1、资源内容:基于Matlab实现中文汉字识别系统+GUI操作界面的毕业设计(源码+图片数据集).rar 2、适用人群:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业或毕业设计,作为“参考资料”使用。 3、更多仿真源码和数据集下载列表(自行寻找自己需要的):https://blog.csdn.net/m0_62143653?type=download 4、免责声明:本资源作为“参考资料”而不是“定制需求”不一定能够满足所有人的需求,需要有一定的基础能够看懂代码,能够自行调试,能够自行添加功能修改代码。由于作者大厂工作较忙,不提供答疑服务,如不存在资源缺失问题概不负责,谢谢理解。
资源推荐
资源详情
资源评论
收起资源包目录
基于Matlab实现中文汉字识别系统+GUI操作界面的毕业设计(源码+图片数据集).rar (90个子文件)
基于Matlab实现中文汉字识别系统+GUI操作界面的毕业设计(源码+图片数据集)
figure(3).mat 6.04MB
2.jpg 900B
New number plate.jpg 9KB
6.jpg 902B
1.jpg 783B
Data.xls 546B
main.m 10KB
3.fig 160KB
QQ图片20201223141806.jpg 41KB
zifufenge.m 497B
chepai_fenge.m 2KB
5.jpg 877B
chepai_xiuzheng.m 730B
main.fig 31KB
main.m.bak 6KB
模板库
Y.jpg 686B
C.jpg 720B
安.jpg 838B
苏.jpg 830B
2.jpg 780B
E.jpg 12KB
Z.jpg 12KB
N.jpg 767B
湘.jpg 1KB
6.jpg 803B
你.jpg 877B
S.jpg 858B
M.jpg 657B
R.jpg 12KB
1.jpg 11KB
L.jpg 509B
J.jpg 566B
B.jpg 798B
F.jpg 11KB
京.jpg 881B
桂.jpg 947B
P.jpg 656B
5.jpg 12KB
0.jpg 699B
T.jpg 11KB
K.jpg 762B
国.jpg 784B
他.jpg 786B
A.jpg 803B
G.jpg 12KB
8.jpg 834B
全.jpg 849B
D.jpg 626B
X.jpg 12KB
我.jpg 902B
W.jpg 12KB
U.jpg 12KB
I.jpg 11KB
Q.jpg 738B
3.jpg 831B
鲁.jpg 867B
7.jpg 583B
皖.jpg 1022B
O.jpg 12KB
H.jpg 579B
V.jpg 780B
9.jpg 773B
豫.jpg 910B
家.jpg 900B
4.jpg 12KB
getword.m 794B
3.jpg 838B
汉字库
2.jpg 2KB
10.jpg 1KB
13.jpg 1KB
14.jpg 1KB
6.jpg 1022B
15.jpg 2KB
16.jpg 1KB
1.jpg 1KB
17.jpg 2KB
21.jpg 1KB
12.jpg 2KB
5.jpg 2KB
8.jpg 1KB
20.jpg 2KB
18.jpg 2KB
11.jpg 1KB
19.jpg 2KB
3.jpg 2KB
7.jpg 2KB
9.jpg 1KB
4.jpg 1KB
7.jpg 786B
4.jpg 849B
共 90 条
- 1
Matlab仿真实验室
- 粉丝: 3w+
- 资源: 2403
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
前往页