基于matlab-汽车号牌识别系统设计

合集下载

基于MATLAB的车牌识别系统设计

基于MATLAB的车牌识别系统设计

基于MATLAB的车牌识别系统设计
在1 汽车牌照识别系统总体设计与主要功能模块设计
基于MATLAB 汽车牌照识别系统,主要实现了数字
2 沥青混合料数字2.1 由于汽车长期置于户外环境中,使降低了车牌的
清洁度,另外还有自然光照的条件、照相机与汽车牌照之间的矩离以及角度等因素的影响,汽车牌照
2.2 车牌定位与分割模块
由于本系统采集到的汽车牌照数字同时可通过峰谷分析中车牌的水平、垂直投影确定车牌字符高度的范围,为之后的字符提取打好基础。


2.3 字符分割与识别模块
字符提取主要通过对旋转后的车牌进行水平投影和垂直投影分析,计算出汽车牌照字符的高度、宽度、字符顶行、字符尾行以及字符的中心位置来进行实现。

由于汽车车牌字符间的间隔较大,较少出现字符粘连现象,所以本文采用查找连续有文字区域的方法实现字符分割。

通过字符分割,得到单个字符,其中包三大类汉字、字母和数字。

由于分割得到的单个字符大小不一,所以需要对单个字符进行归一化处理,防止因为牌照倾斜导致的单个字符在位置和大小上的误差。

目前字符识别主要有两种识别方法:模板匹配法和神经网络法。

本文主要是运用模板匹配法对分割出来的字符进行识别。

字符提取、分割和识别的效果如
3 结语
本文主要以数字图像处理技术在汽车牌照识别中的应用为基础,基于MATLAB 平台开发了汽车牌照识别系统。

并给出了汽车牌照识别系统的总体。

基于MATLAB的车牌智能识别设计

基于MATLAB的车牌智能识别设计

基于MATLAB的车牌智能识别设计摘要:车牌智能识别技术是智能交通系统中的重要组成部分,能够提高交通管理效率和安全性。

本文基于MATLAB平台,设计了一种车牌智能识别系统,通过图像处理和模式识别技术实现车牌号码的准确识别。

该系统能够实现对车辆行驶过程中的车牌信息进行实时提取和识别,具有较高的准确性和稳定性,可以有效应用于停车场管理、交通违法抓拍等领域。

关键词:车牌智能识别;MATLAB;图像处理;模式识别一、引言随着汽车数量的快速增长,交通拥堵和交通管理成为社会发展中的一大难题。

为了提高交通管理效率和安全性,智能交通系统得到了广泛的关注和应用。

车牌智能识别技术作为智能交通系统中的重要组成部分,能够实现对车辆行驶过程中的车牌信息进行实时提取和识别,为交通管理和监控提供了重要的支持。

二、相关技术及方法1. 图像处理技术图像处理技术是车牌智能识别系统中的核心技术之一,主要包括灰度化、二值化、边缘检测、形态学处理等操作。

灰度化是将彩色图像转换为灰度图像,简化了图像信息的处理;二值化将灰度图像转换为二值图像,方便进行特征提取和分割操作;边缘检测可以准确提取车牌的轮廓信息;形态学处理可以用于去除图像中的噪声点和填充孔洞,提高字符的连通性。

2. 字符分割与特征提取字符分割是指将车牌图像中的字符分离出来,是车牌识别的关键步骤之一。

在字符分割后,需要进行字符的特征提取,包括字符的大小、形状、像素点分布等特征。

这些特征可以用于字符的识别和分类,提高识别的准确性和鲁棒性。

3. 模式识别算法模式识别算法是车牌智能识别系统中的另一个核心技术,主要包括基于模板匹配的模式识别、基于统计学习的模式识别、基于深度学习的模式识别等方法。

这些算法能够对字符进行准确的识别和分类,为车牌智能识别系统提供了强大的分析和识别能力。

三、车牌智能识别系统设计基于MATLAB平台,设计的车牌智能识别系统主要包括图像预处理、字符分割与特征提取、模式识别和结果输出四个主要模块。

基于MATLAB的车牌识别系统的设计毕业设计

基于MATLAB的车牌识别系统的设计毕业设计

毕业设计基于MATLAB的车牌识别系统的设计摘要:汽车车牌的识别系统是现代智能交通管理的重要组成部分之一。

车牌识别系统使车辆管理更智能化,数字化,有效的提升了交通管理的方便性和有效性。

车牌识别系统主要包括了图像采集、图像预处理、车牌定位、字符分割、字符识别等五大核心部分。

本文主要介绍图像预处理、车牌定位、字符分割三个模块的实现方法。

本文的图像预处理模块是将图像灰度化和用Roberts算子进行边缘检测的步骤。

车牌定位和分割采用的是利用数学形态法来确定车牌位置,再利用车牌彩色信息的彩色分割法来完成车牌部位分割。

字符的分割采用的方法是以二值化后的车牌部分进行垂直投影,然后在对垂直投影进行扫描,从而完成字符的分割。

本文即是针对其核心部分进行阐述并使用MATLAB软件环境中进行字符分割的仿真实验。

关键词:MATLAB、图像预处理、车牌定位、字符分割一、发展背景车辆的牌照是机动车的识别标志,在交通管理中有着重要的作用。

通过汽车车牌识别系统可以监控车辆的信息和行驶状况,可以最迅速的实现车辆控制以及交通状况的调控,所以对于现代智能交通至关重要。

该系统主要有两大模块:图像处理模块和字符识别模块。

本文主要对图像处理模块进行设计和研究。

图像处理模块的质量好坏更是衡量整个系统成功与否的关键。

MATLAB语言对于图像的处理非常方便,能够直接调用编好的函数,为整个系统提供了保障。

二、系统框架结构以及流程汽车车牌自动识别系统主要包括触发拍照、图像采集、图像预处理、车牌定位、字符分割、字符识别、输出结果等单元。

触发拍照:该单元会自动检测车辆在指定区域的存在,现有的成熟技术的有线圈触发、视频触发、红外触发、雷达触发以及激光触发。

其中线圈触发和视频触发得到了广泛的应用。

图像采集:该单元是指道路上安装的摄像头在检测到有车辆通过的同时进行拍照并借助网络传送到汽车自动识别系统。

图像预处理:该单元是指车牌识别系统对拍摄的汽车图片进行灰度化和边缘检测等处理。

基于Matlab的车牌识别(完整版)

基于Matlab的车牌识别(完整版)

基于Matlab的车牌识别摘要:车牌识别技术是智能交通系统的重要组成部分,在近年来得到了很大的发展。

本文从预处理、边缘检测、车牌定位、字符分割、字符识别五个方面,具体介绍了车牌自动识别的原理。

并用MATLAB软件编程来实现每一个部分,最后识别出汽车车牌。

一、设计原理车辆车牌识别系统的基本工作原理为:将摄像头拍摄到的包含车辆车牌的图像通过视频卡输入到计算机中进行预处理,再由检索模块对车牌进行搜索、检测、定位,并分割出包含车牌字符的矩形区域,然后对车牌字符进行二值化并将其分割为单个字符,然后输入JPEG或BMP格式的数字,输出则为车牌号码的数字。

车牌自动识别是一项利用车辆的动态视频或静态图像进行车牌号码、车牌颜色自动识别的模式识别技术。

其硬件基础一般包括触发设备、摄像设备、照明设备、图像采集设备、识别车牌号码的处理机等,其软件核心包括车牌定位算法、车牌字符分割算法和光学字符识别算法等。

某些车牌识别系统还具有通过视频图像判断车辆驶入视野的功能称之为视频车辆检测。

一个完整的车牌识别系统应包括车辆检测、图像采集、车牌识别等几部分。

当车辆检测部分检测到车辆到达时触发图像采集单元,采集当前的视频图像。

车牌识别单元对图像进行处理,定位出车牌位置,再将车牌中的字符分割出来进行识别,然后组成车牌号码输出。

二、设计步骤总体步骤为:基本的步骤:a.车牌定位,定位图片中的车牌位置;b.车牌字符分割,把车牌中的字符分割出来;c.车牌字符识别,把分割好的字符进行识别,最终组成车牌号码。

车牌识别过程中,车牌颜色的识别依据算法不同,可能在上述不同步骤实现,通常与车牌识别互相配合、互相验证。

(1)车牌定位:自然环境下,汽车图像背景复杂、光照不均匀,如何在自然背景中准确地确定车牌区域是整个识别过程的关键。

首先对采集到的视频图像进行大范围相关搜索,找到符合汽车车牌特征的若干区域作为候选区,然后对这些侯选区域做进一步分析、评判,最后选定一个最佳的区域作为车牌区域,并将其从图象中分割出来。

基于Matlab的车牌识别系统设计论文 【完整】.

基于Matlab的车牌识别系统设计论文 【完整】.

中国矿业大学模式识别--------------------------------------------------------------------------------------------------------------------------------------------------------------------——基于matlab的车牌识别系统设计指导教师: 梁志贞周世斌姓名:田凯班级:信科10-1班学号: 08103476时间:二〇一三年六月目录1 绪论 (2)1.1 车牌号识别研究背景 (2)1.2 车牌号识别技术研究现状和趋势 (3)1.3 车牌识别研究内容 (4)2 车牌识别系统设计原理概述 (5)3 车牌识别系统程序设计 (7)3.1 图像读取及车牌区域提取 (7)3.2 字符切割 (14)3.3字符识别 (17)4 仿真结果及分析 (19)4.1 车牌定位及图像读取及其图像处理 (19)4.2 车牌字符分割及其图像处理 (20)4.3 车牌字符识别及其图像处理 (21)5 结论 (21)附录:程序清单 (22)1 绪论1.1 车牌号识别研究背景随着我国公路交通事业的发展,车辆的数量正在迅速增长,在给出行提供方便的同时,车辆管理上存在的问题日益突出,人工管理的方式已经不能满足实际的需要。

微电子、通信和计算机技术在交通领域的应用极大地提高了交通管理效率。

作为信息来源的自动检测、图像识别技术越来越受到人们的重视。

近年来计算机的飞速发展和数字图像技术的日趋成熟,为传统的交通管理带来巨大转变,先进的计算机处理技术,不但可以将人力从繁琐的人工观察、监测中解放出来,而且能够大大提高其精确度,汽车牌照自动识别系统就是在这样的背景与目的下进行开发的。

汽车牌照等相关信息的自动采集和管理对于交通车辆管理、园区车辆管理、停车场管理、交警稽查等方面有着十分重要的意义,成为信息处理技术的一项重要研究课题。

基于MATLAB的车牌识别系统的设计

基于MATLAB的车牌识别系统的设计

MATLABRobertsMATLAB MATLABMATLAB71H=0.229R+0.588G+0.144BH R GB RGBMATLAB im2gray2RobertsMATLABk=input('Enter the file name:','s');%I=imread(k);imshow(I);figure(1),imshow(I);title('')I1=rgb2gray(I);figure(2),imshow(I1);title('');I2=edge(I1,'roberts',0.15,'both');figure(3),imshow(I2);title('robert') se=[1;1;1];Robert12RGB302552561,2MATLAB1. 2.1. [D]200730-31.2. [J] 201063.MATLAB[J]2009114. [D] 20005..[J]2003.1146..MATLAB[J].200447. MATLAB M.20028. [J].,2006429-30k=input('Enter the file name:','s');%I=imread(k);imshow(I);%I=imread('D:\123\11.jpg');figure(1),imshow(I);title('')I1=rgb2gray(I);figure(2),imshow(I1);title('');I2=edge(I1,'roberts',0.15,'both');figure(3),imshow(I2);title('robert') se=[1;1;1];I3=imerode(I2,se);figure(4),imshow(I3);title('');se=strel('rectangle',[25,25]);I4=imclose(I3,se);figure(5),imshow(I4);title('');I5=bwareaopen(I4,2000);figure(6),imshow(I5);title(''); [y,x,z]=size(I5);myI=double(I5);ticBlue_y=zeros(y,1);for i=1:yfor j=1:xif(myI(i,j,1)==1)Blue_y(i,1)= Blue_y(i,1)+1;%endendend[temp MaxY]=max(Blue_y);%YPY1=MaxY;while ((Blue_y(PY1,1)>=5)&&(PY1>1))PY1=PY1-1;endPY2=MaxY;while ((Blue_y(PY2,1)>=5)&&(PY2<y))PY2=PY2+1;endIY=I(PY1:PY2,:,:);%%%%%% X %%%%%%%%%Blue_x=zeros(1,x);%xfor j=1:xfor i=PY1:PY2if(myI(i,j,1)==1)Blue_x(1,j)= Blue_x(1,j)+1;endendendPX1=1;while ((Blue_x(1,PX1)<3)&&(PX1<x))PX1=PX1+1;endPX2=x;while ((Blue_x(1,PX2)<3)&&(PX2>PX1))PX2=PX2-1;endPX1=PX1-1;%PX2=PX2+1;dw=I(PY1:PY2-8,PX1:PX2,:);t=toc;figure(7),subplot(1,2,1),imshow(IY),title(''); figure(7),subplot(1,2,2),imshow(dw),title('')imwrite(dw,'dw.jpg');[filename,filepath]=uigetfile('dw.jpg','');jpg=strcat(filepath,filename);a=imread('dw.jpg');b=rgb2gray(a);imwrite(b,'1..jpg');figure(8);subplot(3,2,1),imshow(b),title('1.')g_max=double(max(max(b)));g_min=double(min(min(b)));T=round(g_max-(g_max-g_min)/3); % T[m,n]=size(b);d=(double(b)>=T); % d:imwrite(d,'2..jpg');figure(8);subplot(3,2,2),imshow(d),title('2.') figure(8),subplot(3,2,3),imshow(d),title('3.')%h=fspecial('average',3);%average3d=im2bw(round(filter2(h,d))); %imwrite(d,'4..jpg'); %figure(8),subplot(3,2,4),imshow(d),title('4.')%%% se=strel('square',3); %3X3% 'line'/'diamond'/'ball'...se=eye(2); % eye(n) returns the n-by-n identity matrix [m,n]=size(d);if bwarea(d)/m/n>=0.365 %d=imerode(d,se); %elseif bwarea(d)/m/n<=0.235 %d=imdilate(d,se); %endimwrite(d,'5..jpg');%figure(8),subplot(3,2,5),imshow(d),title('5.')%d=qiege(d); %[m,n]=size(d); %bm n m nk1=1;k2=1;s=sum(d);j=1;while j~=nwhile s(j)==0j=j+1;endk1=j;while s(j)~=0 && j<=n-1j=j+1;endk2=j-1;if k2-k1>=round(n/6.5)[val,num]=min(sum(d(:,[k1+5:k2-5])));d(:,k1+num+5)=0; %endend%d=qiege(d);% 7y1=10;y2=0.25;flag=0;word1=[];while flag==0[m,n]=size(d);left=1;wide=0;while sum(d(:,wide+1))~=0wide=wide+1;endif wide<y1 %d(:,[1:wide])=0;d=qiege(d);elsetemp=qiege(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>y2flag=1;word1=temp; % WORD 1endd(:,[1:wide])=0;d=qiege(d);endend%[word2,d]=getword(d);%[word3,d]=getword(d);%[word4,d]=getword(d);%[word5,d]=getword(d);%[word6,d]=getword(d);%[word7,d]=getword(d);figure(9);subplot(2,7,1),imshow(word1),title('1'); figure(9);subplot(2,7,2),imshow(word2),title('2'); figure(9);subplot(2,7,3),imshow(word3),title('3'); figure(9);subplot(2,7,4),imshow(word4),title('4'); figure(9);subplot(2,7,5),imshow(word5),title('5'); figure(9);subplot(2,7,6),imshow(word6),title('6');figure(9);subplot(2,7,7),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]);subplot(3,7,15),imshow(word1),title('1');subplot(3,7,16),imshow(word2),title('2');subplot(3,7,17),imshow(word3),title('3');subplot(3,7,18),imshow(word4),title('4');subplot(3,7,19),imshow(word5),title('5');subplot(3,7,20),imshow(word6),title('6');subplot(3,7,21),imshow(word7),title('7');。

MATLAB车牌识别系统课程设计

MATLAB车牌识别系统课程设计

MATLAB车牌识别系统课程设计一、课程目标知识目标:1. 学生能理解MATLAB编程环境,掌握基本的数据类型、运算符和流程控制语句。

2. 学生能掌握车牌图像的预处理方法,包括图像灰度化、二值化、滤波去噪等。

3. 学生能理解并实现车牌定位和分割的算法,提取车牌字符。

4. 学生能掌握车牌字符识别的方法,如模板匹配、神经网络等。

技能目标:1. 学生能够运用MATLAB编写程序,对车牌图像进行处理和分析。

2. 学生能够独立设计并实现一个简单的车牌识别系统。

3. 学生能够通过实践操作,提高问题解决能力和团队协作能力。

情感态度价值观目标:1. 学生培养对图像处理和模式识别领域的兴趣,激发学习热情。

2. 学生通过实践,认识到编程在解决实际问题中的重要性,增强自信心。

3. 学生在团队协作中,学会尊重他人,培养良好的沟通能力和合作精神。

课程性质:本课程为选修课,旨在让学生在实际项目中运用所学的编程知识,提高解决实际问题的能力。

学生特点:学生为高中年级,已具备一定的编程基础,对新鲜事物充满好奇心,但实践经验不足。

教学要求:结合学生特点和课程性质,注重理论与实践相结合,引导学生通过自主学习和团队协作,完成课程目标。

将目标分解为具体的学习成果,以便后续的教学设计和评估。

二、教学内容1. MATLAB编程基础- 数据类型与运算符- 程序流程控制- 函数与脚本- 图像处理基本操作2. 车牌图像预处理- 图像读取与显示- 灰度化与二值化- 滤波去噪- 边缘检测与轮廓提取3. 车牌定位与分割- 车牌区域提取- 车牌字符分割- 车牌倾斜校正4. 车牌字符识别- 模板匹配法- 神经网络法- 支持向量机法5. 车牌识别系统实现- 系统框架设计- 模块化编程实现- 系统测试与优化教学内容依据课程目标,结合教材章节进行安排。

在教学过程中,注重理论与实践相结合,引导学生逐步掌握MATLAB编程及图像处理方法。

教学内容分为五个部分,每部分对应相应的知识点,确保学生能够系统地学习车牌识别系统的设计原理和实现方法。

【精编完整版】基于MATLAB的车牌识别系统设计_毕业论文设计

【精编完整版】基于MATLAB的车牌识别系统设计_毕业论文设计

南京工程学院毕业设计说明书(论文)院系:计算机工程学院专业:电子信息科学与技术题目:基于MATLAB的车牌识别系统设计2013年5月南京随着计算机多媒体技术的发展,车牌自动识别技术(license plate recognition)已经成为智能交通系统的重要组成部分。

在欧美许多发达国家,车辆识别技术已经广泛的应用在交通管理的各个方面。

由于我国车牌种类多,并且是由汉字、英文字母和数字组成,这给自动识别系统的设计带来较大的难度。

本文在学习研究图像处理理论的基础上,设计了一个车牌自动识别系统。

本系统包括三个主要模块:车辆图像预处理、车牌定位和车牌字符识别。

识别系统处理过程主要包括获取车辆源图像、图像灰度化、图像增强去噪、边缘检测、车牌定位、车牌图像预处理、车牌字符分割、字符识别等部分,其中车牌定位和字符识别部分是整个系统设计的核心和难点。

车牌识别系统可以广泛应用在高速公路自动收费、小区无人停车场、城市道路监控、车辆流量统计等方面,本系统具有一定的实用价值。

关键词:车牌识别车牌定位LPR 模式识别毕业设计说明书(论文)中文摘要毕业设计说明书(论文)外文摘要Title Design of the license plate recognition AbstractWith the development of computer multimedia technology, lice nse plate recognition (LPR) has become an important component ofIntelligent Transportation Systems. In many developed countriesofEurope and America, the license plate recognition technology hasbeen widely used in all aspects of traffic management. Because plates in China have many different styles, in addition, they consist of Chinese letters, English letters and numbers. So, it's very hard to identify Chinese license plates.This study propose a license plate recognition based on kno wledge of image processing. This recognition has three main modu les: preprocessing of original image, locate license plate and c haracters identification. This license plate recognition mainly includes several parts: get original image, make gray, enhance i mage,edge detect, locate license plate, preprocess plate image, segment characters and characters identification. The key of thewhole system is location of license and character recognition.License plate recognition can be extensively used in highwaytoll collection,Intelligent parking, urban road monitoring, traffic flow statistics and so on, what is more, this recognition c anbring some practical value.Key words: plate recognition, plate locate, LPR, pattern recognition目录前言 (1)第一章技术概览 (2)1.1MATLAB简介 (2)1.2MATLAB图像处理工具箱简介 (2)1.3车辆源图像 (3)1.4车牌识别的主要流程 (3)1.5车牌识别系统的结构图 (3)第二章系统人机界面的设计与实现 (5)2.1GUI简介 (5)2.2本文的GUI界面设计 (5)第三章图像预处理及实现 (7)3.1数字图像基本知识 (7)3.2车辆图像灰度化 (8)3.3车辆图像增强 (9)3.4二值化 (14)第四章车牌定位及实现 (18)4.1边缘检测 (18)4.2车牌定位 (24)第五章车牌字符识别及实现 (29)5.1字符分割 (29)5.2车牌字符识别 (32)第六章系统测试及分析 (34)6.1测试的目的 (34)6.2车牌识别系统的测试 (34)6.3测试效果 (35)结束语 (40)参考文献 (42)致谢 (44)附录1:英文技术资料翻译 (45)附录2:程序清单 (60)前言由于我国道路交通的发展迅速,汽车数量特别是轿车数量不断增加,出现了许多车辆管理方面问题。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

汽车号牌识别系统设计**中文摘要:随着二十一世纪到来,经济快速发展和人们生活水平显著提高,汽车逐渐成为家庭的主要交通工具。

汽车的产量快速增多,车辆流动也变得越来越频繁,因此给交通带来了严重问题,如交通堵塞、交通事故等,智能交通系统(Intelligent Transportation System)的产生就是为了从根本上解决交通问题。

在智能交通系统中车牌识别技术占有重要位置,车牌识别技术的推广普及必将对加强道路管理、城市交通事故、违章停车、处理车辆被盗案件、保障社会稳定等方面产生重大而深远的影响。

该设计主要研究基于MATLAB 软件的汽车号牌设别系统设计,系统主要包括图像采集、图像预处理、车牌定位、字符分割、字符识别五大核心部分。

系统的图像预处理模块是将图像经过图像灰度化、图像增强、边缘提取、二值化等操作,转换成便于车牌定位的二值化图像;利用车牌的边缘、形状等特征,再结合Roberts 算子边缘检测、数字图像、形态学等技术对车牌进行定位;字符的分割采用的方法是将二值化后的车牌部分进行寻找连续有文字的块,若长度大于设定的阈值则切割,从而完成字符的分割;字符识别运用模板匹配算法完成。

以上每个功能模块用MATLAB 软件实现,最后识别出车牌,在研究设计的同时对其中出现的问题进行具体分析、处理,并寻求更优的方法。

关键词:MATLAB ,车牌识别系统,字符识别,图像处理一、总体设计汽车号牌识别系统技术是从一幅车辆图像中准确定位出车牌区域,然后经过字符切割和字符识别来实现车辆牌照的自动识别。

主要流程图如下:图1.1二、总体功能模块基于MA TLAB 车牌识别系统主要包括图像采集、图像预处理、车牌定位、字符分割、字符识别五个关键环节[11],其基本工作如下:(1) 图像采集:使用摄像头、照相机拍摄采集图像。

读取图片图像预处理 车牌定位 字符分割 模板库 字符识别(2) 图像预处理:把图像转换成便于定位的二值化图像,需要经过图像灰度化、图像增强、边缘提取、二值化操作。

(3)车牌定位:利用车牌的边缘、形状等特征,再结合Roberts 算子边缘检测、数字图像、形态学等技术对车牌进行定位。

(4)字符分割:以二值化后的车牌部分进行寻找连续有文字的块,若长度大于设定的阈值则切割,从而完成字符的分割。

(5)字符识别:运用模板匹配算法将分割后的字符二值化,并将其尺寸大小缩放为模板库中字符的大小,然后与所有的模板进行匹配,准确地识别车牌。

输出识别结果,并进行数据存储。

由于纹理特征车牌灰度图像的边缘、图像水平方向上的方差、水平方向上的梯度等比较稳定而且易于提取,所以本系统车牌定位算法采用纹理特征作为车牌的主要特征。

在汽车号牌字符识别中,由于汉字的复杂性所以本设计的模板库字符包含5个汉字,26个大写英文字母及10个阿拉伯数字。

首字符为汉字,第2-6个字符为英文字母或数字。

本系统采用的是边缘检测的方法实现车牌定位的,寻找连续有文字的块的方法实现字符分割,模板匹配法来确定最终的识别结果。

三、具体设计下图3.1流程图简要的概述了基本步骤:图3.1图3.2图3.3图3.4图3.5图3.6图3.7图3.8图3.9图3.10由于本系统设计只限用于车牌底色为蓝色的车牌,对于其他颜色如黄色、白色等为底色的车牌则不成功。

所以本系统具有一定的局限性。

下面是分割后的车牌图:图3.11图3.12下图是字符的分割与归一化的流程图:切割去图像上下多余的部分 根据图像的大小,设置一阈值,检测图的X 轴,若宽度等于这一阈值则切割,分离出七个字符。

归一化切割出来的字符图像的大小40*20,与模板中字符图像的大小相匹配。

[m ,n]=size (d ),逐排检查有没有白色像素点,设1<=j<n-1,若图像两边s (j )=0,则切割,去除图像两边多余的部分。

图3.13本系统设计采用的方法是寻找连续有文字的块,若长度大于设定的阈值,则认为该块有两个字符组成,需要分割。

图3.14分割出来的字符可能存在一定的大小差距,所以要进行进一步的处理,以便接下来的字符识别能准确的识别出字符。

本系统设计对分割出来的字符进行了归一化处理,归一化切割出来的字符图像的大小为40*20,与模板中字符图像的大小相匹配。

图3.15本系统的模板匹配的字符识别基本过程是:首先对待识别字符进行二值化并将其尺寸大小缩放为字符数据库中模板的大小,然后与所有的模板进行匹配,最后选最佳匹配作为结果。

模板匹配的主要特点是实现简单,当字符较规整时对字符图像的缺损、污迹干扰适应力强且识别率相当高。

流程图如下:建立自动识别的代码表读取分割出来的字符第一个字符与模板中的汉字模板进行匹配第二个字符与模板中的字母模板进行匹配后5个字符与模板中的字母与数字模板进行匹配待识别字符与模板字符相减,值越小相似度越大,找到最小的一个即为匹配的最好的识别完成,输出此模板对应值图3.16本系统设计采用相减的方法找到出分割字符与模板库中的字符相似度最大的字符,然后输出。

汽车号牌的字符一般有七个,大部分车牌第一位是汉字,通常代表车辆所属省份,接着的是字母与数字。

车牌字符汉字共约50多个,大写英文字母26个,数字10个。

为了提高系统的识别率与实验的方便,本次系统设计只建立了5个汉字26个字母与10个数字的字符模板库。

首先取模板库的字符,接着依次取待识别字符与模板进行匹配,将其与模板库字符相减,得到的0越多那么匹配成功率越高。

把每一幅相减后的图的0值个数保存,即为识别出来的结果并将结果保存在Data.xls文件中。

字符识别图如下:图3.17 四、优化后实现图3.18图3.19五、分析总结汽车号牌识别系统是一个复杂的系统,考虑到时间和本人能力等因素,在这里我只做了一些初步的研究,很不够完善的地方,还需进一步的研究改进。

(1)汽车号牌识别系统是针对车牌为蓝底白字,7个字符水平排列的汽车车牌进行研究。

有些光照条件不理想的图片,需要先进行图象增强处理,让图象灰度动态范围扩展和对比度增强,再进行车牌定位和分割,这样可以提高分割的成功率。

色彩通道的车牌区域分割算法充分利用了车牌图象的色彩信息,简化了算法的实现,加快了图象的处理速度,具有较高的正确率,而且整个程序用MATLAB语言编程实现,运算速度快。

但是也存在一些识别效果不是很理想的图片,这些图片需要做一些前提工作后才能识别出相应的字符。

(2)车牌定位和分割中利用的车牌区域的宽度信息以及字符尺寸信息,是根据采集到的车辆图像通过人工或者经验测算出来的,实际中需要自动检测;(3)由于基于寻找连续有文字的块的字符分割方法容易受噪声和环境光线变化的影响,所以在车牌字符分割的预处理中,需要对分割出的字符车牌进行均值滤波,膨胀或腐蚀的处理。

经过这些处理可以把字符与字符之间的杂色点去除,只有白色的字符和黑色的背景存在,有利于的字符分割进行[19]。

(4)字符识别方法中运用模板匹配的方法,方法简洁但识别率较低。

模板匹配法,是利用要识别的字符图片与字符库中的图片进行两幅图片相减的方法,找到相减后值最小的图片,其相似程度最大的。

模板库的字符制作很重要,必须要用精确的模板,否则就不能正确的识别。

改进方法:(1)在现有的基础上利用水平投影的方法检测非横向排列的7个字符车牌,根据车牌在水平方向上的投影的峰值特征判断牌照所属类型。

(2)在已定位车牌基础上检测牌照字符笔画的宽度,通过投影检测字符的尺寸信息;也可以通过摄像机架设的高度、角度与车道的关系,将这些参数作为系统参数进。

(3)改进字符分割的算法,在车牌定位以后对图像进行去噪处理,或者可以通过照明设备照射车辆,由于车辆牌照区域的反光特性,可以大大改善图像采集的质量,同时突出牌照区域,间接达到减少噪声的效果。

(4)可以考虑单独设备汉字识别器以及数字字母合一的识别来提高识别器的识别率!附录:程序清单1、车牌分割程序:function[PY2,PY1,PX2,PX1]=chepai_fenge(I5) [y,x,z]=size(I5);myI=double(I5);ticY_threshlow=5;%这个数值很重要。

决定了提取的彩图的质量X_firrectify=5;%====================== Y 方向============================Blue_y=zeros(y,1);for i=1:yfor j=1:xif(myI(i,j,1)==1)Blue_y(i,1)=Blue_y(i,1)+1; % 蓝色象素点统计endendend[temp MaxY]=max(Blue_y);% Y方向车牌区域确定 temp(最多点数):所有行中,最多的累积像素点 MaxY(最多点所在行):该行中蓝点最多PY1=MaxY;%有最多蓝点的行付给PY1while((Blue_y(PY1,1)>=Y_threshlow)&&(PY1>1 ))%找到图片上边界PY1=PY1-1;endPY2=MaxY; %PY1:存储车牌上边界值while((Blue_y(PY2,1)>=Y_threshlow)&&(PY2<y ))%阈值为5PY2=PY2+1;endPY1, PY2figure(1),imshow(Blue_y),title('y 方向确定');pause(2);%==============X 方向===============================X_threshhigh=(PY2-PY1)/11;%这个数值很重要。

决定了提取的彩图的质量,适当提高可抗干扰,但是小图会照成剪裁太多Blue_x=zeros(1,x); % 进一步确定X方向的车牌区域for j=1:xfor i=PY1:PY2if(myI(i,j,1)==1)Blue_x(1,j)=Blue_x(1,j)+1;endendend[temp MaxX]=max(Blue_x);PX1=MaxX-6*(PY2-PY1);if PX1<=1PX1=1;endwhile((Blue_x(1,PX1)<=X_threshhigh)&&(PX1< x))%阈值PX1=PX1+1;end %确定出X方向车牌起点PX2=MaxX+6*(PY2-PY1);if PX2>=xPX2=x;endwhile((Blue_x(1,PX2)<=X_threshhigh)&&(PX2> PX1))%阈值PX2=PX2-1;end %确定出X方向车牌终点PX1 ,PX2figure(2),imshow(Blue_x),title('X方向确定');2、车牌校正程序:function[PY2,PY1,PX2,PX1,threshold]=chepai_xi uzheng(PY2,PY1,PX2,PX1)S=(PY2-PY1)*(PX2-PX1)if S<=25000threshold=50;Y_secrectify=3;X_secrectify=3;elseif S>25000&&S<=45000threshold=100;Y_secrectify=-3;X_secrectify=3;elseif S>45000&&S<=80000threshold=200;Y_secrectify=-3;X_secrectify=3;elseif S>80000&&S<=150000threshold=300;Y_secrectify=-10;X_secrectify=-10;elseif S>150000&&S<=400000threshold=600;Y_secrectify=-10;X_secrectify=-10;elsethreshold=1800;Y_secrectify=-10;X_secrectify=-10;endPY1=PY1-Y_secrectify;PY2=PY2+Y_secrectify;PX1=PX1;PX2=PX2;%对车牌区域的进一步修正3、字符分割程序:function e=zifufenge(d)[m,n]=size(d);top=1;bottom=m;left=1;right=n;while sum(d(top,:))==0 && top<=mtop=top+1; endwhile sum(d(bottom,:))==0 && bottom>=1 bottom=bottom-1;endwhile sum(d(:,left))==0 && left<=nleft=left+1;endwhile sum(d(:,right))==0 && right>=1 right=right-1;enddd=right-left;hh=bottom-top;e=imcrop(d,[left top dd hh]);4、获取字符程序:function [word,result]=getword(d)%获取字符word=[];flag=0;y1=8;y2=0.5;while flag==0[m,n]=size(d);wide=0;while sum(d(:,wide+1))~=0 && wide<=n-2wide=wide+1;endtemp=zifufenge(imcrop(d,[1 1 wide m]));[m1,n1]=size(temp);if wide<y1 && n1/m1>y2d(:,[1:wide])=0;if sum(sum(d))~=0d=zifufenge(d); % 切割出最小范围else word=[];flag=1;endelseword=zifufenge(imcrop(d,[1 1 wide m])); d(:,[1:wide])=0;if sum(sum(d))~=0;d=zifufenge(d);flag=1;else d=[];endendendresult=d;5、主函数程序代码: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});endif nargout[varargout{1:nargout}] =gui_mainfcn(gui_State, varargin{:}); elsegui_mainfcn(gui_State,varargin{:});endpause(1);function main_OpeningFcn(hObject, eventdata, handles, varargin)set(handles.process,'enable','on') handles.output = hObject;guidata(hObject, handles);function varargout =main_OutputFcn(hObject, eventdata, handles)ticvarargout{1} = handles.output; function pushbutton1_Callback(hObject, eventdata, handles)[filenamepathname]=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)I = handles.I;I1=rgb2gray(I);guidata(hObject, handles);axes(handles.axes2);imshow(I1);title('灰度图');axes(handles.axes3);imhist(I1);title('灰度图直方图'); pause(2);I2=edge(I1,'robert',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);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_xi uzheng(PY2,PY1,PX2,PX1);%调用车牌校正IY=I(PY1:PY2,:,:);Plate=I5(PY1:PY2,PX1:PX2);global dw;dw=Plate;PX1=PX1-1;%对车牌区域的校正PX2=PX2+1;dw=I(PY1:PY2-8,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),ti tle('车牌灰度图像');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),ti tle('车牌二值图像');figure(3),subplot(3,2,3),imshow(d),ti tle('均值滤波前');pause(1); h=fspecial('average',3);% 滤波d=im2bw(round(filter2(h,d)));figure(3),subplot(3,2,4),imshow(d),ti tle('均值滤波后');se=eye(2); % eye(n) returns the n-by-n identity matrix 单位矩阵[m,n]=size(d);if bwarea(d)/m/n>=0.365d=imerode(d,se);elseif bwarea(d)/m/n<=0.235d=imdilate(d,se);endfigure(3),subplot(3,2,5),imshow(d),ti tle('膨胀或腐蚀处理后');pause(2);%寻找连续有文字的块,若长度大于某阈值,则认为该块有两个字符组成,需要分割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~=nwhile s(j)==0j=j+1;endk1=j;while s(j)~=0 && j<=n-1j=j+1;endk2=j-1;if k2-k1>=round(n/6.5)[val,num]=min(sum(d(:,[k1+5:k2-5]))); d(:,k1+num+5)=0 % 分割endendd=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))~=0wide=wide+1;endif wide<y1 % 认为是左侧干扰d(:,[1:wide])=0;d=zifufenge(d);elsetemp=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>y2flag=1;word1=temp;endd(:,[1:wide])=0;d=zifufenge(d);endend[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),tit le('1');guidata(hObject, handles);axes(handles.axes4);imshow(word2),tit le('2');guidata(hObject, handles);axes(handles.axes4);imshow(word3),tit le('3');guidata(hObject, handles); axes(handles.axes4);imshow(word4),tit le('4');guidata(hObject, handles);axes(handles.axes4);imshow(word5),tit le('5');guidata(hObject, handles);axes(handles.axes4);imshow(word6),tit le('6');guidata(hObject, handles);axes(handles.axes4);imshow(word7),tit le('7');[m,n]=size(word1);word1=imresize(word1,[40 20]); % 商用系统程序中归一化大小为 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),tit le('1');guidata(hObject, handles);axes(handles.axes5);imshow(word2),tit le('2');guidata(hObject, handles);axes(handles.axes6);imshow(word3),tit le('3');guidata(hObject, handles);axes(handles.axes7);imshow(word4),tit le('4');guidata(hObject, handles);axes(handles.axes8);imshow(word5),tit le('5');guidata(hObject, handles);axes(handles.axes9);imshow(word6),tit le('6');guidata(hObject, handles);axes(handles.axes10);imshow(word7),ti tle('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);l=1;for I=1:7ii=int2str(I);t=imread([ii,'.jpg']);SegBw2=imresize(t,[4020],'nearest');if l==1 %第一位汉字识别kmin=37;kmax=41;pause(1);elseif l==2 %第二位 A~Z 字母识别kmin=11;kmax=36;pause(1);else l>=3 %第三位以后是字母或数字识别kmin=1;kmax=36;endfor k2=kmin:kmaxfname=strcat('模板库\',liccode(k2),'.jpg');SamBw2 = imread(fname);for i=1:40for j=1:20SubBw2(i,j)=SegBw2(i,j)-SamBw2(i,j); endend % 以上相当于两幅图相减得到第三幅图Dmax=0;for k1=1:40for l1=1:20if( SubBw2(k1,l1) > 0 || SubBw2(k1,l1) <0 ) Dmax=Dmax+1; endendendError(k2)=Dmax;endError1=Error(kmin:kmax);MinError=min(Error1);findc=find(Error1==MinError);Code(l*2-1)=liccode(findc(1)+kmin-1); Code(l*2)=' ';l=l+1;endguidata(hObject, handles);axes(handles.axes3);imshow(dw),title( ['车牌识别号码:',Code],'fontsize',25,'fontname','隶书');pause(2);fid = fopen('Data.xls', 'a+');fprintf(fid,'%s\r\n',Code,datestr(now ));winopen('Data.xls');fclose(fid);function pushbutton6_Callback(hObject, eventdata, handles)close(gcf);% --- 实现清屏功能.functionpushbutton7_Callback(hObject, eventdata, handles)clc;cla(handles.axes1);cla(handles.axes2);cla(handles.axes3);cla(handles.axes4);cla(handles.axes5);cla(handles.axes6);cla(handles.axes7);cla(handles.axes8);cla(handles.axes9);cla(handles.axes10);。

相关文档
最新文档