matlab车牌识别课程设计报告(附源代码)
- 格式:doc
- 大小:1.36 MB
- 文档页数:19
基于 matlab 的车牌鉴别系统一、对车辆图像进行预办理1.载入车牌图像:function [d]=main(jpg)[filename, pathname] = uigetfile({'*.jpg',文件 (*.jpg)'});'JPEG if(filename == 0), return, endglobal FILENAME % 定义全局变量FILENAME = [pathname filename];I=imread(FILENAME);figure(1),imshow(I);title(' 原图像 ');% 将车牌的原图显示出来结果以下:2.将彩图变换为灰度图并绘制直方图:I1=rgb2gray(I);%将彩图变换为灰度图figure(2),subplot(1,2,1),imshow(I1);title(' 灰度图像');figure(2),subplot(1,2,2),imhist(I1);title(' 灰度图直方图');% 绘制灰度图的直方图结果以下所示:3.用 roberts 算子进行边缘检测:I2=edge(I1,'roberts',0.18,'both');% 选择阈值,用 roberts 算子进行边缘检测figure(3),imshow(I2);title('roberts算子边缘检测图像');结果以下:4.图像推行腐化操作:se=[1;1;1];I3=imerode(I2,se);% 对图像推行腐化操作,即膨胀的反操作figure(4),imshow(I3);title('腐化后图像');5.圆滑图像se=strel('rectangle',[25,25]);% 构造构造元素以正方形构造一个seI4=imclose(I3,se);%图像聚类、填充图像figure(5),imshow(I4);title('圆滑图像');结果以下所示:6.删除二值图像的小对象I5=bwareaopen(I4,2000);% 去除聚团灰度值小于 2000 的部分figure(6),imshow(I5);title(' 从对象中移除小的对象 ');结果以下所示:二、车牌定位[y,x,z]=size(I5);%返回 I5 各维的尺寸,储藏在x,y,z中myI=double(I5);% 将 I5 变换成双精度tic%tic表示计时的开始,toc 表示计时的结束Blue_y=zeros(y,1);%产生一个y*1 的零阵for i=1:yfor j=1:xif(myI(i,j,1)==1)% 若是myI(i,j,1) 即myI 的图像中坐标为(i,j) 的点值为1,即该点为车牌背景颜色蓝色% 则Blue_y(i,1) 的值加 1Blue_y(i,1)= Blue_y(i,1)+1;% 蓝色像素点统计endendend[temp MaxY]=max(Blue_y);%Y方向车牌地域确定%temp 为向量 white_y的元素中的最大值,MaxY为该值的索引PY1=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 方向车牌地域确定%%%%%%方X向 %%%%%%%%%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;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('定位裁剪后的车牌彩色图像');的车牌区域以下所示:三、字符切割及办理1.车牌的进一步办理对切割出的彩色车牌图像进行灰度变换、二值化、均值滤波、腐化膨胀以及字符切割以从车牌图像中分别出组成车牌号码的单个字符图像,对切割出来的字符进行预办理(二值化、归一化),此后解析提取,对切割出的字符图像进行鉴别给出文本形式的车牌号码。
matlab车牌识别课程设计一、课程目标知识目标:1. 学生将理解车牌识别技术的原理和实现流程,掌握使用MATLAB进行图像处理的基本方法。
2. 学生将学会运用MATLAB内置函数进行车牌定位、字符分割和识别,并了解相关算法。
3. 学生将掌握利用MATLAB进行车牌识别系统的设计与实现,提高解决实际问题的能力。
技能目标:1. 学生能够运用MATLAB软件进行图像的读取、显示、预处理等操作。
2. 学生能够独立完成车牌的定位、分割和识别,具备一定的编程实践能力。
3. 学生能够通过本课程的学习,将理论知识与实际应用相结合,提高解决复杂问题的能力。
情感态度价值观目标:1. 学生将培养对图像处理技术的兴趣,激发探究精神,提高学习积极性。
2. 学生将形成严谨的科学态度,注重团队协作,善于沟通交流。
3. 学生将认识到车牌识别技术在现实生活中的应用价值,增强社会责任感和创新意识。
本课程针对高年级学生,结合图像处理、模式识别等学科知识,以MATLAB为工具,培养学生的编程实践能力和解决实际问题的能力。
课程目标具体、可衡量,旨在让学生在学习过程中充分了解车牌识别技术的原理和应用,为后续相关领域的学习和研究打下坚实基础。
二、教学内容1. 车牌识别技术原理概述:介绍车牌识别技术的发展背景、系统组成和基本流程,使学生了解整个技术的框架。
2. MATLAB图像处理基础:讲解MATLAB中图像的读取、显示、存储等基本操作,以及图像预处理方法,包括灰度化、二值化、滤波等。
3. 车牌定位:介绍常见的车牌定位算法,如边缘检测、形态学处理等,并运用MATLAB实现车牌定位。
4. 车牌字符分割:讲解车牌字符分割的常用方法,如投影分割、连通域分析等,以及MATLAB实现方法。
5. 车牌字符识别:介绍基于模板匹配、神经网络等算法的字符识别方法,并运用MATLAB实现车牌字符的识别。
6. 车牌识别系统设计与实现:结合前面所学内容,设计并实现一个简单的车牌识别系统,包括模块划分、算法选择和程序编写。
图像处理大作业实验报告--用MATLAB实现车牌识别系统作者东南大学电子系李浩翔06006435指导老师张雄实验日期2010-1-10索引:实验目的实验原理实验步骤1.预处理2.边缘识别3.小区块联通4.车牌区域的识别并截取5.字符截取6.字符识别实验思路分析本程序的局限性附录附录1 程序源代码1.主程序2.子函数(code)附录2 测试图像处理过程汇总1.测试图像12.测试图像2附录3 参考文献及参考程序实验目的(返回索引)使用MATLAB对包含车牌的图片进行处理,利用算法识别出车牌所在的区域,并辨认其数字及字母,最后在屏幕上输出所识别出的车牌号。
实验原理(返回索引)1.将拍摄下的彩色图像转换为灰度图,之后用中值滤波对灰度图像进行预处理,从而减少干扰信息。
2.使用sobel算子识别出图像的边缘,并转化为二值化图像。
并对二值化之后的图像进行卷积,加强边缘的轮廓。
3.用膨胀-再腐蚀的方法分别作用于图像的横轴与纵轴,将小块的联通区域连接起来,使车牌的形状更加清晰,为下一步的识别做好准备。
4.利用车牌长宽比的特性对各个联通区域进行判断,识别出车牌所在区域,并截取。
5.对截取出的车牌区域进行进一步的处理,分割出各个字符。
6.对分割出的字符进行特征判断,从而识别出具体的车牌号。
实验步骤(返回索引)1.预处理(返回索引)A. 将拍摄下的彩色图像转换为灰度图,便于进行接下来的算法处理。
图1 拍摄下的图片B.对灰度图进行中值滤波,减少干扰点对二值化运算结果的影响。
图3 进行中值滤波后的灰度图C.将中值滤波后的灰度图用设定门限灰度的方法(取门限值为0.2)转化为二值化图像,在后继的车牌区域截取运算中作为源图像使用。
图4 使用设定灰度门限的方法获得的二值化图像2.边缘识别(返回索引)A.利用sobel算子识别出图3中的边缘区域,并将其转换为二值化图像。
在转换后的二值化图像中,边缘区域被作为白点标出,而非边缘区域被黑色区域覆盖。
matlab车牌课程设计实验文件一、课程目标知识目标:1. 理解MATLAB编程基础,掌握基本语法和常用函数。
2. 学习图像处理基本原理,掌握车牌识别技术的基本流程。
3. 掌握车牌定位、字符分割和字符识别的方法。
技能目标:1. 能够运用MATLAB编写程序,实现车牌图像的预处理和车牌定位。
2. 能够使用图像处理技术进行车牌字符分割。
3. 能够利用机器学习算法对车牌字符进行识别。
4. 培养学生动手实践能力,提高问题分析和解决能力。
情感态度价值观目标:1. 培养学生对图像处理和机器学习领域的兴趣,激发探索精神。
2. 培养学生合作意识,提高团队协作能力。
3. 增强学生对我国智能交通系统发展的认识,提高社会责任感。
课程性质:本课程为实践性较强的课程设计,结合了计算机视觉、图像处理和机器学习等多个领域的知识。
学生特点:学生具备一定的编程基础,对图像处理和机器学习有一定了解,对实际应用场景感兴趣。
教学要求:教师需引导学生掌握MATLAB编程和图像处理技术,注重实践操作,鼓励学生自主探索和团队协作,提高解决问题的能力。
通过课程设计,使学生能够将理论知识与实际应用相结合,达到学以致用的目的。
后续教学设计和评估将围绕上述具体学习成果展开。
二、教学内容1. MATLAB编程基础:- 数据类型与基本运算- 控制语句与函数编写- 图像读取与显示2. 车牌图像预处理:- 车牌图像灰度化- 图像二值化与滤波- 车牌区域定位3. 车牌字符分割:- 车牌区域提取- 车牌字符分割算法- 字符归一化处理4. 车牌字符识别:- 机器学习基础- 特征提取与选择- 字符识别算法(如SVM、神经网络等)5. 实践项目:- 车牌识别系统设计与实现- 算法优化与调试- 结果分析及评价教学内容安排与进度:- 第一周:MATLAB编程基础及图像读取显示- 第二周:车牌图像预处理与定位- 第三周:车牌字符分割- 第四周:车牌字符识别- 第五周:实践项目,综合运用所学知识完成车牌识别系统教学内容关联教材章节:- 《数字图像处理》第四章:图像增强- 《数字图像处理》第五章:图像分割- 《机器学习》第三章:特征工程- 《机器学习》第四章:分类算法三、教学方法1. 讲授法:- 对于MATLAB编程基础、图像处理原理和机器学习算法等理论知识,采用讲授法进行教学,为学生奠定扎实的基础。
MATLAB课程设计报告书课题名称基于MATLAB的车牌识别课程设计姓名学号学院专业指导教师2016年6月21日基于MATLAB的车牌识别课程设计目录一.课程设计目的……………………………………………二.设计原理…………………………………………………三.详细设计步骤……………………………………………四. 设计结果及分析…………………………………………五. 总结………………………………………………………六. 设计体会…………………………………………………七. 参考文献…………………………………………………一、课程设计目的车牌定位系统的目的在于正确获取整个图像中车牌的区域,并识别出车牌号。
通过设计实现车牌识别系统,能够提高学生分析问题和解决问题的能力,还能培养一定的科研能力。
二、设计原理:牌照自动识别是一项利用车辆的动态视频或静态图像进行牌照、牌照颜色自动识别的模式识别技术。
其硬件基础一般包括触发设备、摄像设备、照明设备、图像采集设备、识别车牌的处理机等,其软件核心包括车牌定位算法、车牌字符分割算法和光学字符识别算法等。
某些牌照识别系统还具有通过视频图像判断车辆驶入视野的功能称之为视频车辆检测。
一个完整的牌照识别系统应包括车辆检测、图像采集、牌照识别等几部分。
当车辆检测部分检测到车辆到达时触发图像采集单元,采集当前的视频图像。
牌照识别单元对图像进行处理,定位出牌照位置,再将牌照中的字符分割出来进行识别,然后组成牌照输出。
三、详细设计步骤:1. 提出总体设计方案:牌照、颜色识别为了进行牌照识别,需要以下几个基本的步骤:a.牌照定位,定位图片中的牌照位置;b.牌照字符分割,把牌照中的字符分割出来;c.牌照字符识别,把分割好的字符进行识别,最终组成牌照。
牌照识别过程中,牌照颜色的识别依据算法不同,可能在上述不同步骤实现,通常与牌照识别互相配合、互相验证。
(1)牌照定位:自然环境下,汽车图像背景复杂、光照不均匀,如何在自然背景中准确地确定牌照区域是整个识别过程的关键。
Matlab车牌定位程序源代码clear;clc;close all;chos=0;possibility=9;while chos~=possibility,chos=menu('车牌定位系统','载入图片','二值化','边缘化','腐蚀','连通','滤波',...'定位','倾斜校正','退出');if chos==1,clc;[namefile,pathname]=uigetfile('*.jpg','Select image');if namefile~=0I=imread(strcat(pathname,namefile));imshow(I);endendif chos==2,I1=rgb2gray(I);imshow(I1);endif chos==3,I2=edge(I1,'robert',0.15,'both');imshow(I2);endif chos==4,se=[1;1;1];I3=imerode(I2,se);imshow(I3);endif chos==5,se=strel('rectangle',[25,25]);I4=imclose(I3,se);imshow(I4);endif chos==6,I5=bwareaopen(I4,2000);imshow(I5);[y,x,z]=size(I5);myI=I5;endif chos==7,%%%%%%%%%%% 统计分析%%%%%%%%%%%%%%%%%%%%%%% Y 方向%%%%%%%%%%whitr_y=zeros(y,1);for i=1:yfor j=1:xif(myI(i,j,1)==1) % 白色RGB的灰度范围whitr_y(i,1)= whitr_y(i,1)+1; % 白色象素点统计endendend[temp MaxY]=max(whitr_y); % Y方向车牌区域确定PY1=MaxY;while ((whitr_y(PY1,1)>=5)&&(PY1>1))PY1=PY1-1;endPY2=MaxY;while ((whitr_y(PY2,1)>=5)&&(PY2<y))PY2=PY2+1;endIY=I(PY1:PY2,:,:);%%%%%%%% X 方向%%%%%%%%%%whitr_x=zeros(1,x); % 进一步确定X 方向的车牌区域for j=1:xfor i=PY1:PY2if(myI(i,j,1)==1)whitr_x(1,j)= whitr_x(1,j)+1;endendendPX1=1;while ((whitr_x(1,PX1)<3)&&(PX1<x))PX1=PX1+1;endPX2=x;while ((whitr_x(1,PX2)<3)&&(PX2>PX1))PX2=PX2-1;endPlate=I(PY1-13:PY2+13,PX1-5:PX2+5,:);%预留多些利于倾斜校正% t=toc % 读取计时imshow(Plate);endif chos==8,I=Plate;level = graythresh(I);I = im2bw(I,level);%倾斜矫正myI=edge(I,'sobel');theta=0:179;[r1,x1]=radon(myI,theta);R1=sort(r1,'descend');[x,y]=size(R1);R=R1(1:10,:);R=sum(R);a=0.4;E(1)=R(1);for i=2:length(R)E(i)=a*R(i)+(1-a)*E(i-1);enda=tan((91-(find(E==max(E))))*pi/180);I=imrotate(I,a);imshow(I);%水平方向倾斜矫正Rfilter=0; Lfilter=0;for j=alpha+10:length(E)-1if (E(j)<=200)&&(E(j)<E(j-1))&&(E(j)<=E(j+1))Rfilter=j;endendfor j=2:alpha-10if(E(j)<=200)&&(E(j)<E(j-1))&&(E(j)<=E(j+1))Lfilter=j;endendE(Lfilter:Rfilter)=min(E(Lfilter),E(Rfilter));for i=2:179if(E(i)>=200)&&(E(i)>E(i-1))&&(E(i)>=E(i+1))beta=i;elsebeta=0;endendif alpha>91;a=-tan(beta);else a=tan(beta);endtform=maketform('affine',[1 0 0;a 1 0;0 0 1]);goal=imtransform(I,tform,'bicubic');%垂直方向矫正if mean(goal)>0.5goal=~goal;endimshow(goal(15:end-14,11:end-10));endend。
目录一、课程设计目的 (3)二、课程设计要求 (3)三、课程设计的内容 (3)四、题目分析 (3)五、总体设计 (4)六、具体设计 (5)1、文件 (5)1.1、打开 (5)1.2、保存 (5)1.3、退出 (5)2、编辑 (5)6.2.1、灰度 (5)6.2.2、亮度 (6)6.2.3、截图 (7)6.2.4、缩放 (7)3、旋转 (9)6.3.1、上下翻转 (9)6.3.2、左右翻转 (9)6.3.3任意角度翻转 (9)6.4、噪声 (10)6.5、滤波 (10)6.6、直方图统计 (11)6.7、频谱分析 (12)6.7.1、频谱图 (12)6.7.2、通过高通滤波器........................... .. (12)6.7.3、通过低通滤波器...................................... . (13)6.8、灰度图像处理................................................ . . (14)6.8.1、二值图像……………………………………………….. .146.8.2、创建索引图像............................................. (14)6.9、颜色模型转换...................................... .. (14)6.10、操作界面设计 (15)七、程序调试及结果分析 (15)八、心得体会 (16)九、参考文献 (17)十、附录 (18)基于MATLAB的图像处理的课程设计摘要:数字图像处理技术是20世纪60年代发展起来的一门新兴学科,随着图像处理理论和方法的进一步完善,使得数字图像处理技术在各个领域得到了广泛应用,并显示出广阔的应用前景。
MATLAB既是一种直观、高效的计算机语言,同时又是一个科学计算平台。
它为数据分析和数据可视化、算法和应用程序开发提供了最核心的数学和高级图形工具。
数字图像处理期末课程报告题目:车牌识别的matlab实现题目类型:软件型学院信息工程与自动化学院专业:计算机科学与技术年级:XXXX 学号:XXXXXXX学生姓名: xxx指导教师:xx日期:2012-6-8目录摘要: (3)关键词: (3)实验工具: (3)车辆牌照识别流程: (3)实验内容及步骤 (3)1.图像预处理: (3)2.车牌定位——车牌起始位置和终止位置 (5)3.图片二值化 (6)4.列方向像素点灰度值累计 (7)5.字符分割: (8)6.建立字符模板数据库 (9)7.归一化训练 (10)结果分析: (15)摘要:本次课程设计的目的是通过对基于MATLAB 的字符识别的研究,以汽车牌照识别的设计为实例,详细介绍字符识别的相关原理。
整个汽车牌照识别的过程分为预处理、边缘提取、车牌定位、字符分割、字符识别五大模块,用MATLAB 软件编程来实现每一个部分,最后识别出汽车牌照。
在研究的同时对其中出现的问题进行了具体分析,处理。
寻找出对于具体的汽车牌照识别过程的最好的方法。
关键词:MATLAB 字符识别 车牌识别 神经网络 图像处理实验工具:MATLAB 7.8(R2009a )。
车辆牌照识别流程:基于 MATLAB 图像处理的汽车牌照识别,主要包括车牌定位、字符车牌分割、和车牌字符识别三个关键环节。
流程图如下:其中,(1) 原始图像:由数码相机或其它扫描装置拍摄到的图像;(本实验图片由数码相机获得)(2) 图像预处理:对动态采集到的图像进行灰度处理、边缘检测、腐蚀、膨胀、滤波、等处理排除图像干扰;(3) 车牌定位:计算边缘图像的投影面积,寻找峰谷点,大致确定车牌位置,再计算此连通域内的宽高比,剔除不在域值范围内的连通域,最后得到的便为车牌区域;(4) 字符分割:利用投影检测的字符定位分割方法得到单个的字符;(5) 字符数据库:构造训练样本数据库,为第6步的字符识别建立字符模板数据库;(6) 字符识别:通过基于模板匹配的OCR 算法或基于人工神经网络的OCR 算法,通过特征对比或训练识别出相关的字符,得到最后的汽车牌照,包括英文字母和数字。
(完整word版)基于Matlab的车牌识别实现源码function[]=main(jpg)close allclctic %测定算法执行的时间[fn,pn]=uigetfile('timg1,jpg','选择图片') %读入图片I=imread([pn,fn]);figure,imshow(I);title('原始图像'); %显示原始图像Im1=rgb2gray(I);figure(2),subplot(1,2,1),imshow(Im1);title('灰度图');figure(2),subplot(1,2,2),imhist(Im1);title('灰度图的直方图'); %显示图像的直方图Tiao=imadjust(Im1,[0.19,0.78],[0,1]); %调整图片figure(3),subplot(1,2,1),imshow(Tiao);title('增强灰度图');figure(3),subplot(1,2,2),imhist(Tiao);title('增强灰度图的直方图');Im2=edge(Tiao,'Roberts','both'); %使用sobel算子进行边缘检测figure(4),imshow(Im2);title('sobel算子实现边缘检测')se=[1;1;1];Im3=imerode(Im2,se);figure(5),imshow(Im3);se=strel('square',40);%'rectangle',[25,25]/'diamond',25/Im4=imclose(Im3,se);figure(6),imshow(Im4);title('平滑图像的轮廓');Im5=bwareaopen(Im4,1500);figure(7),imshow(Im5);title('移除小对象');[y,x,z]=size(Im5); %返回Im5各维的尺寸,并存储在变量y、x、z中Im6=double(Im5); %将Im5换成双精度数值%开始横向扫描tic %tic计时开始,toc结束,计算tic与toc之间程序的运行时间Blue_y=zeros(y,1); %产生y*1的全0矩阵for i=1:y %逐行扫描for j=1:xif(Im6(i,j,1)==1)%如果Im6图像中坐标为(i,j)的点值为1,即为移除小对象的白色区域,Blue_y(i,1)= Blue_y(i,1)+1;%则y*1列矩阵的相应像素点的元素值加1,endendend[temp MaxY]=max(Blue_y);%temp为向量Blue_y的矩阵中的最大值,MaxY为该值的索引(最大值在向量中的位置)%返回包含最大元素的列,即白色区域最宽的列%Y方向车牌区域确定figure(8),subplot(1,2,1),plot(0:y-1,Blue_y),title('行方向白色像素点累计'),xlabel('行数'),ylabel('个数');PY1=MaxY;while ((Blue_y(PY1,1)>=120)&&(PY1>1))PY1=PY1-1;endPY2=MaxY;while ((Blue_y(PY2,1)>=40)&&(PY2<y))< p="">PY2=PY2+1;IY=I(PY1:PY2,:,:);%IY为原始图像I中截取的纵坐标在PY1:PY2之间的部分%横向扫描完成,开始纵向扫描Blue_x=zeros(1,x);%进一步确定x方向的车牌区域for j=1:x %逐列扫描for i=PY1:PY2if(Im6(i,j,1)==1)Blue_x(1,j)= Blue_x(1,j)+1; %根据Im5的x值确定endendendfigure(8),subplot(1,2,2),plot(0:x-1,Blue_x),title('列方向白色像素点累计'),xlabel('列数'),ylabel('个数'); PX1=1;while ((Blue_x(1,PX1)<3)&&(PX1<x))< p="">PX1=PX1+1;endPX2=x;while ((Blue_x(1,PX2)<3)&&(PX2>PX1))PX2=PX2-1;end%end纵向扫描PX1=PX1-2;%对车牌区域的校正PX2=PX2+2;dw=I(PY1:PY2,PX1:PX2,:);t=toc;figure(9),subplot(1,2,1),imshow(IY),title('垂直方向合理区域');figure(9),subplot(1,2,2),imshow(dw),title('定位剪切后的彩色车牌图像') imwrite(dw,'dw.jpg'); %将图像写入图形文件中a=imread('dw.jpg');b=rgb2gray(a);imwrite(b,'车牌灰度图像.jpg');figure(10);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,'车牌二值图像.jpg');figure(10);subplot(3,2,2),imshow(d),title('2.车牌二值图像')figure(10),subplot(3,2,3),imshow(d),title('3.均值滤波前')h=fspecial('average',3);%建立预定义的滤波算子,average为均值滤波,模板尺寸为3*3d=imbinarize(round(filter2(h,d))); %im2bw,使用指定的滤波器h对h进行d即均值滤波imwrite(d,'均值滤波后.jpg');figure(10),subplot(3,2,4),imshow(d),title('4.均值滤波后')se=eye(2);%单位矩阵[m,n]=size(d); %d为二值图像,返回信息矩阵if bwarea(d)/m/n>=0.365%二值图像中对象的总面积与整个面积的比大于0.365d=imerode(d,se);%进行腐蚀elseif bwarea(d)/m/n<=0.235%二值图像中对象的总面积与整个面积的比值小于0.235 d=imdilate(d,se);%进行膨胀endimwrite(d,'膨胀或腐蚀处理后.jpg');figure(10),subplot(3,2,5),imshow(d),title('5.膨胀或腐蚀处理后.jpg')d=qiege(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=qiege(d);y1=10;y2=0.25;flag=0;word1=[];while flag==0[m,n]=size(d);wide=0;while sum(d(:,wide+1))~=0 %扫过的地方不全为黑色,向右移动,直到不是停止wide=wide+1;endif wide<="" p="">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)],:)));%统计切割区域1/3至2/3行所有元素if two_thirds/all>y2 flag=1;word1=temp;endd(:,[1:wide])=0;d=qiege(d);end[word2,d]=getword(d); %分割出第二个字符[word3,d]=getword(d); %分割出第三个字符[word4,d]=getword(d); %分割出第四个字符[word5,d]=getword(d); %分割出第五个字符[word6,d]=getword(d); %分割出第六个字符[word7,d]=getword(d); %分割出第七个字符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]);figure(11);subplot(2,7,1),imshow(word1),title('1');subplot(2,7,2),imshow(word2),title('2');subplot(2,7,3),imshow(word3),title('3');subplot(2,7,4),imshow(word4),title('4');subplot(2,7,5),imshow(word5),title('5');subplot(2,7,6),imshow(word6),title('6');subplot(2,7,7),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' '辽粤豫鄂鲁陕京津苏浙']);%建立自动识别字符代码表,将t'0':'9' 'A':'Z' '鲁陕苏豫'多个字符串组成一个字符数组,每行对应一个字符串,字符数不足的自动补空格SubBw2=zeros(40,20);%40*20的零矩阵l=1;ii=int2str(I);%整型转换字符串t=imread([ii,'.jpg']);SegBw2=imresize(t,[40 20],'nearest');%改变图片的大小SegBw2=double(SegBw2)>50;%将灰度图转化为二值图像,double产生0-255的灰度值if l==1 %第一位汉字识别kmin=37;kmax=46;%模板中汉字所在的位置elseif l==2 %第二位字母识别kmin=11;kmax=36;%A-Z字母位置elsel>=3 %第三位后字母或数字识别kmin=1;kmax=36;endfor k2=kmin:kmaxfname=strcat('字符模板\',liccode(k2),'.jpg');SamBw2=imread(fname);SamBw2=double(SamBw2)>50;%将模板转换为二值图,double产生0-255的灰度值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 abs(SubBw2(k1,l1))>0Dmax=Dmax+1;endendendError(k2)=Dmax;endError1=Error(kmin:kmax);%模板对应的字符模板进行匹配选择findc=find(Error1==MinError);Code(l*2-1)=liccode(findc(1)+kmin-1);Code(l*2)=' ';l=l+1;endmsgbox(Code,'识别结果')function [word,result]=getword(d) %定义分割字符用函数(1)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=imcrop(d,[1 1 wide m]);%用于返回图像的一个裁剪区域[m1,n1]=size(temp);z=sum(temp,2);count=0;for i=1:m1if z(i)~=0count=count+1;endendif count<="" p="">d(:,[1,wide])=0;d=qiege(d);elsetemp=qiege(imcrop(d,[1 1 wide m]));%用于返回图像的一个裁剪区域[m1,n1]=size(temp);if widey2 %宽度过小,或长大于宽的两倍d(:,[1,wide])=0;if sum(sum(d))~=0 %d中所有元素之和d=qiege(d);%切割出最小范围elseword=[];flag=1;endword=qiege(imcrop(d,[1 1 wide m]));%划分出的temp进行切割d(:,[1:wide])=0;%切割完后该区域变为黑色if sum(sum(d))~=0d=qiege(d);flag=1;elsed=[];endendendendresult=d;function e=qiege(d) %定义分割字符用函数(2)[m,n]=size(d);top=1;bottom=m;left=1;right=n; %intewhile 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>=1right=right-1;enddd=right-left;hh=bottom-top;e=imcrop(d,[left top dd hh]);//字符实别需要字符图库,没有对照图库是识别不了的</x))<></y))<>。
课程设计报告课设题目:matlab车牌识别系统学院:医药信息工程学院姓名: ------学号:---------------指导教师:向征目录一.课程设计任务 (3)二.课程设计原理及设计方案 (3)1.系统简述 (3)2.图像预处理: (4)3.车牌定位 (4)4.字符分割 (5)5.字符识别 (6)三.课程设计的步骤和结果 (6)1.车牌定位 (6)2.字符分割 (10)3.字符识别 (12)四.设计GUI界面 (16)五.课程设计总结和体会 (17)六.参考文献 (17)七.设计总代码 (18)1.chepai_main.m (18)2.chepaidingwei.m (18)3.fenge.m (19)4.rando_bianhuan.m (21)5.zifushibie2.m (21)一.课程设计任务在交通管理过程中,通常采用视频监控方式对闯红灯和超速等违章车辆进行监督。
对违章车辆,需要自动检测车牌信息,提取车牌号码,以便查找车主信息和监督管理。
国内常用的一般车牌通常是是蓝底白字,长宽比3:1。
1、对车牌图像进行预处理,然后进行车牌定位;2、进行字符分割;2、对车牌中的数字、字母和汉字进行提取和识别;3、要求自行设计方案、编写代码实现上述功能,并设计车牌识别的软件界面。
二.课程设计原理及设计方案1.系统简述一个完整的车牌识别系统闭应包括车辆检测、图像采集、图像预处理、车牌定位、字符分割、字符识别等单元。
当车辆到达触发图像采集单元时,系统采集当前的视频图像。
车辆识别单元对图像进行处理,定位出牌照位置,再将车牌中的字符分割出来进行识别,然后组成车牌号码输出。
车牌识别系统原理如图l 所示。
图1 车牌识别系统原理图1)图像预处理:对汽车图像进行图像转换、图像增强等。
2)车牌定位:从预处理后的汽车图像中分割出车牌图像。
即在一幅车辆图像中找到车牌所在的位置。
3)字符分割:对车牌图像进行几何校正、去噪、二值化以及字符分割以从车牌图像中分离出组成车牌号码的单个字符图像4)字符识别:对分割出来的字符进行预处理(二值化、归一化),然后分析提取,对分割出的字符图像进行识别给出文本形式的车牌号码。
Matlab程序设计任务书 分院(系) 信息科学与工程 专业 学生姓名 学号 设计题目 车牌识别系统设计
内容及要求: 车牌定位系统的目的在于正确获取整个图像中车牌的区域, 并识别出车牌号。通过设计实现车牌识别系统,能够提高学生 分析问题和解决问题的能力,还能培养一定的科研能力。
1.牌照识别系统应包括车辆检测、图像采集、牌照识别等几 部分。
2.当车辆检测部分检测到车辆到达时,触发图像采集单元,采 集当前的视频图像。
3.牌照识别单元对图像进行处理,定位出牌照位置,再将牌 照中的字符分割出来进行识别,然后组成牌照号码输出。
进度安排: 19周:Matlab环境熟悉与基础知识学习 19周:课程设计选题与题目分析 20周:程序设计编程实现 20周:课程设计验收与答辩
指导教师(签字): 年 月 日 学院院长(签字):
年 月 日 目 录 一.课程设计目的……………………………………………3 二.设计原理…………………………………………………3 三.详细设计步骤……………………………………………3 四. 设计结果及分析…………………………………………18 五. 总结………………………………………………………19
六. 设计体会…………………………………………………20
七. 参考文献…………………………………………………21
一、课程设计目的 车牌定位系统的目的在于正确获取整个图像中车牌的区域,并识别出车牌号。通过设计实现车牌识别系统,能够提高学生分析问题和解决问题的能力,还能培养一定的科研能力。
二、设计原理: 牌照自动识别是一项利用车辆的动态视频或静态图像进行牌照号码、牌照颜色自动识别的模式识别技术。其硬件基础一般包括触发设备、摄像设备、照明设备、图像采集设备、识别车牌号码的处理机等,其软件核心包括车牌定位算法、车牌字符分割算法和光学字符识别算法等。某些牌照识别系统还具有通过视频图像判断车辆驶入视野的功能称之为视频车辆检测。一个完整的牌照识别系统应包括车辆检测、图像采集、牌照识别等几部分。当车辆检测部分检测到车辆到达时触发图像采集单元,采集当前的视频图像。牌照识别单元对图像进行处理,定位出牌照位置,再将牌照中的字符分割出来进行识别,然后组成牌照号码输出。
三、详细设计步骤:
1. 提出总体设计方案: 牌照号码、颜色识别 为了进行牌照识别,需要以下几个基本的步骤: a.牌照定位,定位图片中的牌照位置; b.牌照字符分割,把牌照中的字符分割出来; c.牌照字符识别,把分割好的字符进行识别,最终组成牌照号码。 牌照识别过程中,牌照颜色的识别依据算法不同,可能在上述不同步骤实现,通常与牌照识别互相配合、互相验证。
(1)牌照定位: 自然环境下,汽车图像背景复杂、光照不均匀,如何在自然背景中准确地确定牌照区域是整个识别过程的关键。首先对采集到的视频图像进行大范围相关搜索,找到符合汽车牌照特征的若干区域作为候选区,然后对这些侯选区域做进一步分析、评判,最后选定一个最佳的区域作为牌照区域,并将其从图象中分割出来。
流程图:
(2)牌照字符分割 : 完成牌照区域的定位后,再将牌照区域分割成单个字符,然后进行识别。字符分割一般采用垂直投影法。由于字符在垂直方向上的投影必然在字符间或字符内的间隙处取得局部最小值的附近,并且这个位置应满足牌照的字符书写格式、字符、尺寸限制和一些其他条件。利用垂直投影法对复杂环境下的汽车图像中的字符分割有较好的效果。
(3)牌照字符识别 : 字符识别方法目前主要有基于模板匹配算法和基于人工神经网络算法。基于模板匹配算法首先将分割后的字符二值化,并将其尺寸大小缩放为字符数据库中模板的大小,然后与所有的模板进行匹配,最后选最佳匹配作为结果。基于人工神经元网络的算法有两种:一种是先对待识别字符进行特征提取,然后用所获得特征来训练神经网络分配器;另一种方法是直接把待处理图像输入网络,由网络自动实现特征提取直至识别出结果。实际应用中,牌照识别系统的识别率与牌照质量和拍摄质量密切相关。牌照质量会受到各种因素的影响,如生锈、污损、油漆剥落、字体褪色、牌照被遮挡、牌照倾斜、高亮反光、多牌照、假牌照等等;实际拍摄过程也会受到环境亮度、拍摄亮度、车辆速度等等因素的影响。这些影响因素不同程度上降低了牌照识别的识别率,也正是牌照识别系统的困难和挑战所在。为了提高识别率,除了不断的完善识别算法,还应该想办法克服各种光照条件,使采集到的图像最利于识别。
2. 各模块的实现: 输入待处理的原始图像: clear ; close all;
导入原始图像 图像预处理增强效果图像 边缘提取 车牌定位 对图像开闭运算
按左右宽度切割出字符 计算水平投影进行车牌水平校正 去掉车牌的框架 分析垂直投影找到每个字符中心位置
切割出的字符送入库中 字符依次分析显示误差最小的图片名字 与数据库的图片相减 分析之差最小的图片是哪张 %Step1 获取图像 装入待处理彩色图像并显示原始图像 Scolor = imread('');%imread函数读取图像文件
图原始图像 图像的灰度化: 彩色图像包含着大量的颜色信息,不但在存储上开销很大,而且在处理上也会降低系统的执行速度,因此在对图像进行识别等处理中经常将彩色图像转变为灰度图像,以加快处理速度。由彩色转换为灰度的过程叫做灰度化处理。选择的标准是经过灰度变换后,像素的动态范围增加,图像的对比度扩展,使图像变得更加清晰、细腻、容易识别。 %将彩色图像转换为黑白并显示 Sgray = rgb2gray(Scolor);%rgb2gray转换成灰度图 figure,imshow(Sgray),title('原始黑白图像');
图原始黑白图像 对原始图像进行开操作得到图像背景图像: s=strel('disk',13);%strei函数 Bgray=imopen(Sgray,s);%打开sgray s图像 figure,imshow(Bgray);title('背景图像');%输出背景图像
图背景图像 灰度图像与背景图像作减法,对图像进行增强处理: Egray=imsubtract(Sgray,Bgray);%两幅图相减 figure,imshow(Egray);title('增强黑白图像');%输出黑白图像
图黑白图像 取得最佳阈值,将图像二值化: 二值图像是指整幅图像画面内仅黑、白二值的图像。在实际的车牌处理系统中,进行图像二值变换的关键是要确定合适的阀值,使得字符与背景能够分割开来,二值变换的结果图像必须要具备良好的保形性,不丢掉有用的形状信息,不会产生额外的空缺等等。车牌识别系统要求处理的速度高、成本低、信息量大,采用二值图像进行处理,能大大地提高处理效率。阈值处理的操作过程是先由用户指定或通过算法生成一个阈值,如果图像中某中像素的灰度值小于该阈值,则将该像素的灰度值设置为0或255,否则灰度值设置为255或0。 fmax1=double(max(max(Egray)));%egray的最大值并输出双精度型 fmin1=double(min(min(Egray)));%egray的最小值并输出双精度型 level=(fmax1-(fmax1-fmin1)/3)/255;%获得最佳阈值 bw22=im2bw(Egray,level);%转换图像为二进制图像 bw2=double(bw22); figure,imshow(bw2);title('图像二值化');%得到二值图像
图二值图像 边缘检测: 两个具有不同灰度值的相邻区域之间总存在边缘,边缘就是灰度值不连续的结果,是图像分割、纹理特征提取和形状特征提取等图像分析的基础。为了对有意义的边缘点进行分类,与这个点相联系的灰度级必须比在这一点的背景上变换更有效,我们通过门限方法来决定一个值是否有效。所以,如果一个点的二维一阶导数比指定的门限大,我们就定义图像中的次点是一个边缘点,一组这样的依据事先定好的连接准则相连的边缘点就定义为一条边缘。经过一阶的导数的边缘检测,所求的一阶导数高于某个阈值,则确定该点为边缘点,这样会导致检测的边缘点太多。可以通过求梯度局部最大值对应的点,并认定为边缘点,去除非局部最大值,可以检测出精确的边缘。一阶导数的局部最大值对应二阶导数的零交叉点,这样通过找图像强度的二阶导数的零交叉点就能找到精确边缘点。 grd=edge(bw2,'canny')%用canny算子识别强度图像中的边界 figure,imshow(grd);title('图像边缘提取');%输出图像边缘
图像边缘提取 对得到图像作开操作进行滤波: 数学形态非线性滤波,可以用于抑制噪声,进行特征提取、边缘检测、图像分割等图像处理问题。腐蚀是一种消除边界点的过程,结果是使目标缩小,孔洞增大,因而可有效的消除孤立噪声点;膨胀是将与目标物体接触的所有背景点合并到物体中的过程,结果是使目标增大,孔洞缩小,可填补目标物体中的空洞,形成连通域。先腐蚀后膨胀的过程称为开运算,它具有消除细小物体,并在纤细处分离物体和平滑较大物体边界的作用;先膨胀后腐蚀的过程称为闭运算,具有填充物体内细小空洞,连接邻近物体和平滑边界的作用。对图像做了开运算和闭运算,闭运算可以使图像的轮廓线更为光滑,它通常用来消掉狭窄的间断和长细的鸿沟,消除小的孔洞,并弥补轮廓线中的断裂。 bg1=imclose(grd,strel('rectangle',[5,19]));%取矩形框的闭运算 figure,imshow(bg1);title('图像闭运算[5,19]');%输出闭运算的图像 bg3=imopen(bg1,strel('rectangle',[5,19]));%取矩形框的开运算 figure,imshow(bg3);title('图像开运算[5,19]');%输出开运算的图像 bg2=imopen(bg3,strel('rectangle',[19,1]));%取矩形框的开运算 figure,imshow(bg2);title('图像开运算[19,1]');%输出开运算的图像