【车牌识别】基于matlab车牌识别系统GUI界面设计【源码5期】

 一、简介

基于matlab车牌识别系统GUI界面设计,车牌识别的难点主要有两部分:第一部分是车牌照片本身的问题,第二部分是系统的问题。

车牌照片的原因:在车牌识别系统中,有许多汽车图片都是在汽车行驶的过程中拍摄的,这就会使得汽车图像本身存在着大量的问题,比如图像模糊,难以对它进行处理。还有是光线的原因,光线照射在汽车图片上,图片反光也就模糊了图像,使得字符不清晰。还有就是环境的变换,也会导致图像变得不可辨别,一些灰尘或者是水滴,这都会让图像变得模糊。以上都是因为汽车图像本身的原因,会让识别的效果变得很差。

系统的原因有:我国对车牌的理没有统一的标准,字符和背景的颜色有各种各样的,所以在识别的过程中,对车牌上的文字分割这方面的难度比较大。在我国的车牌图片上,它的信息比较多,有汉字、数字和字母,它们字符的种类比较多,所以正确的识别它们是比较困难的,这也会提高对车牌识别的难度。还有最后的一点就是车牌在汽车上的位置不是固定的,比如轿车和卡车,它们所在的位置就有很大区别。这些都是车牌在识别过程中,遇到的难点。

二、部分源码

function varargout = main(varargin)
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
[filename, pathname] = uigetfile({'*.jpg;*.tif;*.png;*.gif', 'All Image Files';...
    '*.*', '所有文件' }, '选择图像文件', fullfile(pwd, 'images/川F1A666.jpg'));

if filename == 0
    return;
end
% 文件名
file = fullfile(pathname, filename);
% 图像矩阵
Img = imread(file);
%激活第一个轴对象
axes(handles.axes1);
imshow(Img, []);
%激活第二个轴对象
axes(handles.axes2);
imshow(Img, []);
%保存为全局变量
handles.Img = Img;
guidata(hObject, handles);

% --- Executes on button press in pushbutton2.
Img=handles.Img;
%对图像I进行灰度处理
I_gray=rgb2gray(Img);
axes(handles.axes3);
imshow(I_gray);
title('灰度图像');
%利用Sobel算子进行边缘检测
I_edge=edge(I_gray,'sobel');
axes(handles.axes4);
imshow(I_edge)
title('边缘检测后图像');
se=[1;1;1];
%对边缘图像进行腐蚀
I_erode=imerode(I_edge,se);
axes(handles.axes5);
imshow(I_erode);
title('腐蚀后边缘图像');
se=strel('rectangle',[25,25]);
%填充图像
I_close=imclose(I_erode,se);
axes(handles.axes6);
imshow(I_close)
title('填充后图像');
%去除聚团灰度值小于1500的部分
I_final=bwareaopen(I_close,1500);
axes(handles.axes7);
imshow(I_final);
title('形态滤波后图像');

I_new=zeros(size(I_final,1),size(I_final,2));
location_of_1=[];
%寻找二值图像中白的点的位置
for i=1:size(I_final,1)
    for j=1:size(I_final,2)
        if I_final(i,j)==1;
            newlocation=[i,j];
            location_of_1=[location_of_1;newlocation];
        end
    end
end
mini=inf;maxi=0;
%寻找所有白点中,x坐标与y坐标的和最大,最小的两个点的位置
for i=1:size(location_of_1,1)
    temp=location_of_1(i,1)+location_of_1(i,2);
    if temp<mini
        mini=temp;
        a=i;
    end
    if temp>maxi
        maxi=temp;
        b=i;
    end
end
%和最小的点为车牌的左上角
first_point=location_of_1(a,:);
%和最大的点为车牌的右下角
last_point=location_of_1(b,:);
%坐标值修正
x1=first_point(1)+10;
x2=last_point(1)-4;
y1=first_point(2)+10;
y2=last_point(2)-4;
I_plate=Img(x1:x2,y1:y2);
g_max=double(max(max(I_plate)));
g_min=double(min(min(I_plate)));
% T为二值化的阈值
T=round(g_max-(g_max-g_min)/3);
I_plate =im2bw (I_plate,T/256);
I_plate=bwareaopen(I_plate,20);
I_plate(: ,y2)=0;
axes(handles.axes8);
I_plate=bwareaopen(I_plate,100);
%画出最终车牌
imshow(I_plate)
title('车牌提取')
 

三、运行结果

四、matlab版本

MATLAB R2019a

五、学习与交流

文中不足之处请大家多多指教,学习与交流可以联系企鹅:3752243968

文中部分源码仅供参考,若需要全部代码可以私信(有偿)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值