数字图像处理车牌识别课程设计matlab实现附源代码
(完整版)基于matlab的车牌识别(含子程序)
基于 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车牌识别课实验报告计报告(附源代码20)
matlab车牌识别课实验报告计报告(附源代码20)目录一.课程设计目的 (3)二.设计原理 (3)三.详细设计步骤 (3)四. 设计结果及分析 (18)五. 总结 (19)六. 设计体会 (20)七. 参考文献 (21)%Step1 获取图像装入待处理彩色图像并显示原始图像Scolor = imread('3.jpg');%imread函数读取图像文件图2.1原始图像2.2图像的灰度化:彩色图像包含着大量的颜色信息,不但在存储上开销很大,而且在处理上也会降低系统的执行速度,因此在对图像进行识别等处理中经常将彩色图像转变为灰度图像,以加快处理速度。
由彩色转换为灰度的过程叫做灰度化处理。
选择的标准是经过灰度变换后,像素的动态范围增加,图像的对比度扩展,使图像变得更加清晰、细腻、容易识别。
%将彩色图像转换为黑白并显示Sgray = rgb2gray(Scolor);%rgb2gray转换成灰度图figure,imshow(Sgray),title('原始黑白图像');图2.2原始黑白图像2.3对原始图像进行开操作得到图像背景图像:s=strel('disk',13);%strei函数Bgray=imopen(Sgray,s);%打开sgray s图像figure,imshow(Bgray);title('背景图像');%输出背景图像图2.3背景图像2.4灰度图像与背景图像作减法,对图像进行增强处理:Egray=imsubtract(Sgray,Bgray);%两幅图相减figure,imshow(Egray);title('增强黑白图像');%输出黑白图像图2.4黑白图像2.5取得最佳阈值,将图像二值化:二值图像是指整幅图像画面内仅黑、白二值的图像。
在实际的车牌处理系统中,进行图像二值变换的关键是要确定合适的阀值,使得字符与背景能够分割开来,二值变换的结果图像必须要具备良好的保形性,不丢掉有用的形状信息,不会产生额外的空缺等等。
实验报告用MATLAB实现车牌识别系统
图像处理大作业实验报告--用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车牌识别程序代码
% 车牌识别程序主体clc;close all;clear all;%==========================================================%说明:%%%===========================================================% ==============测定算法执行的时间,开始计时=================tic %%%%%记录程序运行时间%=====================读入图片================================[fn,pn,fi]=uigetfile('*.jpg','选择图片');I=imread([pn fn]);figure;imshow(I);title('原始图像');%显示原始图像chepailujing=[pn fn]I_bai=I;[PY2,PY1,PX2,PX1]=caitu_fenge(I);% I=rgb2hsv(I);% [PY2,PY1,PX2,PX1]=caitu_tiqu(I,I_bai);%用HSI模型识别蓝色,用rgb模型识别白色%================分割车牌区域=================================%===============车牌区域根据面积二次修正======================[PY2,PY1,PX2,PX1,threshold]=SEC_xiuzheng(PY2,PY1,PX2,PX1);%==============更新图片=============================Plate=I_bai(PY1:PY2,PX1:PX2,:);%使用caitu_tiqu%==============考虑用腐蚀解决蓝色车问题=============bw=Plate;figure,imshow(bw);title('车牌图像');%hsv彩图提取图像%==============这里要根据图像的倾斜度进展选择这里选择的图片.jpgbw=rgb2gray(bw);figure,imshow(bw);title('灰度图像');%================倾斜校正======================qingxiejiao=rando_bianhuan(bw)bw=imrotate(bw,qingxiejiao,'bilinear','crop');figure,imshow(bw);title('倾斜校正');%取值为负值向右旋转%==============================================bw=im2bw(bw,graythresh(bw));%figure,imshow(bw);bw=bwmorph(bw,'hbreak',inf);%figure,imshow(bw);bw=bwmorph(bw,'spur',inf);%figure,imshow(bw);title('擦除之前');bw=bwmorph(bw,'open',5);%figure,imshow(bw);title('闭合运算');bw = bwareaopen(bw, threshold);figure,imshow(bw);title('擦除');%==================参加进度条================================% h=waitbar(0,'程序运行中,请稍等......')% for i=1:10000% waitbar(i/5000,h)% end% close(h);%wavplay(wavread('程序运行中.wav'),22000);%==========================================================bw=~bw;figure,imshow(bw);title('擦除反色');%=============对图像进一步裁剪,保证边框贴近字体===========bw=touying(bw);figure;imshow(bw);title('Y方向处理');bw=~bw;bw = bwareaopen(bw, threshold);bw=~bw;%figure,imshow(bw);title('二次擦除');[y,x]=size(bw);%对长宽重新赋值%=================文字分割=================================fenge=shuzifenge(bw,qingxiejiao)[m,k]=size(fenge);%=================显示分割图像结果=========================figure;for s=1:2:k-1subplot(1,k/2,(s+1)/2);imshow(bw( 1:y,fenge(s):fenge(s+1)));end%================ 给七图片定位===============桂AV6388han_zi =bw( 1:y,fenge(1):fenge(2));zi_mu =bw( 1:y,fenge(3):fenge(4));zm_sz_1 =bw( 1:y,fenge(5):fenge(6));zm_sz_2 =bw( 1:y,fenge(7):fenge(8));shuzi_1 =bw( 1:y,fenge(9):fenge(10));shuzi_2 =bw( 1:y,fenge(11):fenge(12));shuzi_3 =bw( 1:y,fenge(13):fenge(14));%==========================识别====================================%======================把修正数据读入============================== xiuzhenghanzi = imresize(han_zi, [110 55],'bilinear');xiuzhengzimu = imresize(zi_mu, [110 55],'bilinear');xiuzhengzm_sz_1= imresize(zm_sz_1,[110 55],'bilinear');xiuzhengzm_sz_2 = imresize(zm_sz_2,[110 55],'bilinear');xiuzhengshuzi_1 = imresize(shuzi_1,[110 55],'bilinear');xiuzhengshuzi_2 = imresize(shuzi_2,[110 55],'bilinear');xiuzhengshuzi_3 = imresize(shuzi_3,[110 55],'bilinear');%============ 把0-9 , A-Z以与省份简称的数据存储方便访问==================== hanzishengfen=duquhanzi(imread('cpgui.bmp'),imread('cpguizhou.bmp'),imread('cpj ing.bmp'),imread('cpsu.bmp'),imread('cpyue.bmp'));%因数字和字母比例不同。
基于matlab的车牌识别(含子程序)
基于matlab的车牌识别系统一、对车辆图像进行预处理1.载入车牌图像:function [d]=main(jpg)[filename, pathname] = uigetfile({'*.jpg', 'JPEG 文件(*.jpg)'});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');%选择阈值0.18,用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代码
clear ;close all;%Step1 获取图像装入待处理彩色图像并显示原始图像Scolor = imread('C:\Users\lenovo\Desktop\程序\chepai\l2.jpg'); %将彩色图像转换为黑白并显示Sgray = rgb2gray(Scolor);figure,imshow(Scolor),title('原始彩色图像');figure,imshow(Sgray),title('原始灰度图像');%bw3=medfilt2(Sgray,[5 5]);%figure,imshow(bw3);title('图像中值滤波');%bw4=imfilter(bw3,fspecial('laplacian'));%figure,imshow(bw4);title('图像中值滤波');%Egray=imsubtract(bw3,bw4);%figure,imshow(Egray);%Step2 图像预处理对Sgray 原始黑白图像进行开操作得到图像背景s=strel('disk',10);Bgray=imopen(Sgray,s);figure,imshow(Bgray);title('背景图像');%用原始图像与背景图像作减法,增强图像Egray=imsubtract(Sgray,Bgray);figure,imshow(Egray);title('增强黑白图像');%Step3 取得最佳阈值,将图像二值化%fmax1=double(max(max(Egray)));%fmin1=double(min(min(Egray)));%level=(fmax1-(fmax1-fmin1)/3)/255;%level=graythresh(Egray);%%bw3=filter2(fspecial('average',3),Egray);%%Egray=medfilt2(Egray,[3 3]);%figure,imshow(Egray);title('图像中值滤波');bw2=im2bw(Egray,level);figure,imshow(bw2);title('图像二值化');%bw4=im2bw(bw3,level);%figure,imshow(bw4);title('图像二值化');%Step4 对得到二值图像作开闭操作进行滤波grd=edge(bw2,'canny');figure,imshow(grd);title('图像边缘提取');%bg1=imclose(grd,strel('rectangle',[5,19]));%figure,imshow(bg1);title('图像闭运算[5,19]');bg2=bwareaopen(bg1,2000);figure,imshow(bg2);title('小对象');bg2=imclose(bg2,strel('rectangle',[20,50]));%bg3=imclose(bg2,strel('rectangle',[20,50]));bg2=imopen(bg2,strel('rectangle',[5,20]));figure,imshow(bg2);title('图像开运算[5,19]');bg2=imopen(bg2,strel('rectangle',[19,1]));figure,imshow(bg2);title('图像开运算[19,1]');%Step5 对二值图像进行区域提取,并计算区域特征参数。
课程设计--matlab车牌识别系统 精品
课程设计报告课设题目: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程序(程序-讲解-模板)
clcclearclose allI=imread('chepai.jpg');subplot(3,2,1);imshow(I), title('原始图像');I_gray=rgb2gray(I);subplot(3,2,2),imshow(I_gray),title('灰度图像');%====================== 形态学预处理======================I_edge=edge(I_gray,'sobel');subplot(3,2,3),imshow(I_edge),title('边缘检测后图像');se=[1;1;1];I_erode=imerode(I_edge,se);subplot(3,2,4),imshow(I_erode),title('腐蚀后边缘图像');se=strel('rectangle',[25,25]);I_close=imclose(I_erode,se); %图像闭合、填充图像subplot(3,2,5),imshow(I_close),title('填充后图像');I_final=bwareaopen(I_close,2000); %去除聚团灰度值小于2000的部分subplot(3,2,6),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];endendendmini=inf;maxi=0;for i=1:size(location_of_1,1)%寻找所有白点中,x坐标与y坐标的和最大,最小的两个点的位置temp=location_of_1(i,1)+location_of_1(i,2);if temp<minimini=temp;a=i;endif temp>maximaxi=temp;b=i;endendfirst_point=location_of_1(a,:); %和最小的点为车牌的左上角last_point=location_of_1(b,:); %和最大的点为车牌的右下角x1=first_point(1)+4; %坐标值修正x2=last_point(1)-4;y1=first_point(2)+4;y2=last_point(2)-4;I_plate=I(x1:x2,y1:y2);I_plate=OTSU(I_plate); %以OTSU算法对分割出的车牌进行自适应二值化处理I_plate=bwareaopen(I_plate,50);figure,imshow(I_plate),title('车牌提取') %画出最终车牌%========================= 字符分割============================X=[]; %用来存放水平分割线的横坐标flag=0;for j=1:size(I_plate,2)sum_y=sum(I_plate(:,j));if logical(sum_y)~=flag %列和有变化时,记录下此列X=[X j];flag=logical(sum_y);endendfigurefor n=1:7char=I_plate(:,X(2*n-1):X(2*n)-1); %进行粗分割for i=1:size(char,1) %这两个for循环对分割字符的上下进行裁剪if sum(char(i,:))~=0top=i;breakendendfor i=1:size(char,1)if sum(char(size(char,1)-i,:))~=0bottom=size(char,1)-i;breakendendchar=char(top:bottom,:);subplot(2,4,n);imshow(char);char=imresize(char,[32,16],'nearest'); %归一化为32*16的大小,以便模板匹配eval(strcat('Char_',num2str(n),'=char;')); %将分割的字符放入Char_i中end%========================== 字符识别============================= char=[];store1=strcat('京','津','沪','渝','冀','晋','辽','吉','黑','苏','浙'... %汉字识别,'皖','闽','赣','鲁','豫','鄂','湘','粤','琼','川','贵','云','陕'...,'甘','青','藏','桂','皖','新','宁','港','鲁','蒙');for j=1:34Im=Char_1;Template=imread(strcat('chinese\',num2str(j),'.bmp')); %chinese文件附在最后Template=im2bw(Template);Differ=Im-Template;Compare(j)=sum(sum(abs(Differ)));endindex=find(Compare==(min(Compare)));char=[char store1(index)];store2=strcat('A','B','C','D','E','F','G','H','J','K','L','M','M','N','P','Q','R'...,'S','T','U','V','W','X','Y','Z','0','1','2','3','4','5','6','7','8','9');for i=2:7 %字母数字识别for j=1:35Im=eval(strcat('Char_',num2str(i)));Template=imread(strcat('cha&num\',num2str(j),'.bmp')); %cha&num文件附在最后Template=im2bw(Template);Differ=Im-Template;Compare(j)=sum(sum(abs(Differ)));endindex=find(Compare==(min(Compare)));char=[char store2(index)];endfigure,imshow(I),title(strcat('车牌为:',char))信研-11 XX 2011301XXXXXX模式识别作业—车牌识别1、作业要求:要求:任给一幅符合假定的图片,自动识别出车牌号。
Matlab车牌定位程序源代码
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);endif 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; % 白色象素点统计endend%%%%%%%%%%叵板X%%%%%%%%=■ ■cxr A d =A d )llA -pu①H +(N A d H (N A d((A V (N A d )0303(9H A (L7Ad)A —」壬M))①Z M>xel/\IH(NAdpu ①TLAdHLAd((L ALA d )0303(9H A ( L ・LAd)A —」壬 M))①Z MAxelAIHLAd((X V L x d )0303o v (LXd・L)x —」壬 M))HHLXdpu①pu①pu ①H+(rL)xl 」±M""r L x l b z M(LH H(L:=P )_AE M(NAdtAd上」3J G LPX1=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);end if 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;endend E(Lfilter:Rfilter)=min(E(Lfilter),E(Rfilter));for i=2:179 if(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); end tform=maketform('affine',[1 0 0;a1 0;0 0 1]); goal=imtransform(I,tform,'bicubic');%垂直方向矫正if mean(goal)>0.5 goal=~goal;end imshow(goal(15:end-14,11:end-10));end。
数字图像处理课程设计报告-车牌识别系统的设计
数字图像处理——车牌识别学院:信息工程学院专业:信号与信息处理小组成员:学号:指导教师:2010年12月车牌识别系统的设计1.摘要:汽车牌照自动识别系统是制约道路交通智能化的重要因素,包括车牌定位、字符分割和字符识别三个主要部分。
本文首先确定车辆牌照在原始图像中的水平位置和垂直位置,从而定位车辆牌照,然后采用局部投影进行字符分割。
在字符识别部分,提出了在无特征提取情况下基于支持向量机的车牌字符识别方法。
实验结果表明,本文提出的方法具有良好的识别性能。
随着公路逐渐普及,我国的公路交通事业发展迅速,所以人工管理方式已经不能满着实际的需要,微电子、通信和计算机技术在交通领域的应用极大地提高了交通管理效率。
汽车牌照的自动识别技术已经得到了广泛应用。
关键词:车牌识别字符分隔二值化模块匹配字符识别2.设计目的:1、使学生在巩固理论课知识的同时,加强实践能力的提高,理论联系实践。
2、激发学生的研究潜能,提高学生的协作精神,锻炼学生的动手能力。
3、养成自己独立分析和解决问题的能力。
3.设计原理车辆牌照在交通管理中具有不可替代的作用,因此车辆牌照识别系统应具有很高的识别正确率,对环境光照条件、拍摄位置和车辆行驶速度等因素的影响应有较大的容阈,并且要求满足实时性要求,能在一定情况下准确的反应出信息。
图1 牌照识别系统原理图车牌识别系统是计算机图像处理与字符识别技术在智能化交通管理系统中的应用,它主要由图像的采集和预处理、牌照区域的定位和提取、牌照字符的分割和识别等几个部分组成,如图1 所示。
其基本工作过程如下:(1)用手机和相机拍下一个在运动中或是静止的车的图像,尽量考虑下光照,因为该程序具有一定的局限性。
(2)由摄像机或手机拍摄的含有车辆牌照的图像通视频卡输入计算机进行预处理,图像预处理包括图像转换、图像增强、滤波和水平较正等;(3)由检索模块进行牌照搜索与检测,定位并分割出包含牌照字符号码的矩形区域;(4)对牌照字符进行二值化并分割出单个字符,经归一化后输入字符识别系统进行识别,最后输出车牌号码。
Matlab详细代码识别车牌
%%%%选择车牌图片%%%%[filename,pathname]=uigetfile({'*.jpg';'*.bmp';'*.gif'},'选择图片'); str=[pathname filename];I=imread(str);%将选择的图片读取,并赋于Ifigure(1),subplot(3,2,1),imshow(I);title('原始图像');I1=rgb2gray(I);%转化为灰度图像figure(1),subplot(3,2,2),imshow(I1),title('灰度图像');I2=edge(I1,'roberts',0.09,'both');%采用robert算子进行边缘检测figure(1),subplot(3,2,3),imshow(I2),title('边缘检测后图像');se=[1;1;1];%线型结构元素I3=imerode(I2,se);%腐蚀图像figure(1),subplot(3,2,4),imshow(I3),title('腐蚀后边缘图像');se=strel('rectangle',[25,25]);%矩形结构元素I4=imclose(I3,se);%图像聚类、填充图像figure(1),subplot(3,2,5),imshow(I4),title('填充后图像');I5=bwareaopen(I4,2000);%去除聚团灰度值小于2000的部分figure(1),subplot(3,2,6),imshow(I5),title('形态滤波后图像');%%%%车牌定位%%%%[y,x]=size(I5);%获取滤波后图像的尺寸,及长宽I6=double(I5);Y1=zeros(y,1);%创建一个y行1列的0矩阵for i=1:yfor j=1:xif(I6(i,j)==1)Y1(i,1)=Y1(i,1)+1;endendend[~,MaxY]=max(Y1);figure(2),subplot(2,2,1),plot(0:y-1,Y1);title('行方向像素点灰度值累计和'),xlabel('行值'),ylabel('像素'); %%%%%%%求的车牌的行起始位置和终止位置%%%%%%%%%PY1=MaxY;while((Y1(PY1,1)>=50)&&(PY1>1))PY1=PY1-1;endPY2=MaxY;while((Y1(PY2,1)>=50)&&(PY2<y))PY2=PY2+1;endIY=I(PY1:PY2,:,:);X1=zeros(1,x);for j=1:xfor i=PY1:PY2if(I6(i,j,1)==1)X1(1,j)=X1(1,j)+1;endendendfigure(2),subplot(2,2,2),plot(0:x-1,X1);title('列方向像素点灰度值累计和');xlabel('列值');ylabel('像数'); %%%%%%%求的车牌的列起始位置和终止位置%%%%%%%%%PX1=1;while((X1(1,PX1)<5)&&(PX1<x))PX1=PX1+1;endPX2=x;while((X1(1,PX2)<5)&&(PX2>PX1))PX2=PX2-1;end%分割出车牌图像%dw=I(PY1:PY2,PX1:PX2,:);imwrite(dw,'dw.jpg','jpg');figure(2),subplot(2,2,3),imshow(dw);title('定位剪切后的彩色车牌图像'); %%%字符切割%%%figure(3),subplot(2,2,1),imshow(dw);title('定位后的车牌图像');I1=rgb2gray(dw);%将RGB图像转化为灰度图像g_max=double(max(max(I1)));%获取I1中灰度最大值g_min=double(min(min(I1)));%获取I1中灰度最小值T=round(g_max-(g_max-g_min)/3);%计算二值化的阈值后赋值于TI1=im2bw(I1,T/256);subplot(2,2,2);imshow(I1),title('二值化车牌图像');I2=bwareaopen(I1,20);%删除面积小于20的区域figure(3),subplot(2,2,3),imshow(I2);title('形态学滤波后的二值化图像'); [y1,x1]=size(I2);I3=double(I2);%%%%%%%去除图像顶端和底端的不感兴趣区域%%%%%Y1=zeros(y1,1);for i=1:y1for j=1:x1if(I3(i,j,1)==1)Y1(i,1)=Y1(i,1)+1;endendendPy0=1;while((Y1(Py0,1)<20)&&(Py0<y1))Py0=Py0+1;endPy1=Py0;while((Y1(Py1,1)>=20)&&(Py1<y1))Py1=Py1+1;endI2=I2(Py0:Py1,:,:);figure(3),subplot(2,2,4),imshow(I2);title('目标车牌区域');%%%%%%分割字符按行积累量%%%%%%%X1=zeros(1,x1);for j=1:x1for i=1:y1if(I3(i,j)==1)X1(1,j)=X1(1,j)+1;endendendfigure(4),plot(0:x1-1,X1);title('列方向像素点灰度值累计和'),xlabel('列值'),ylabel('累计像素量'); %%%%%%%%%%%%分割字符%%%%%%%%%%%%%%%%%%Px0=1;k=1;%记录存储图片的个数for i=1:7while((X1(1,Px0)<5)&&(Px0<x1))Px0=Px0+1;endPx1=Px0;while(((X1(1,Px1)>=5)&&(Px1<x1)))Px1=Px1+1;endif((Px1-Px0)<15)%%此处加一个if语句作用是除去识Px0=Px1+1;%%别时区域X轴区域小于15的部分,为while((X1(1,Px0)<5)&&(Px0<x1))%%了去除不是字符的部分,例如:Px0=Px0+1;%%[豫A*A375G]中两个A之间end%%的那个点,由于滤波不能滤掉这个比较Px1=Px0;%%大一点的点,所以在此去除。
基于matlab的汽车牌照识别源程序
基于matlab的车牌识别的源程序clcclearfilename='E:\matlab7.0\car.jpg';%图片的路径I=im2gray(filename);%调用自编函数读取图像,并转化为灰度图象;tic%计时开始[height,width]=size(I);%预处理I_edge=zeros(height,width);%创建height*width矩阵for i=1:width-1%对每一列进行遍历I_edge(:,i)=abs(I(:,i+1)-I(:,i));%每列的值赋为原图像中左右两列相减的绝对值(即梯度)end%归一化处理(0~255)I_edge=(255/(max(max(I_edge))-min(min(I_edge))))*(I_edge-min(min(I_edge)));[I_edge,y1]=select(I_edge,height,width);%%%%%%调用select函数选择图像的某个区域BW2 = I_edge;%%%%%%%%%%%%%%%%%一些形态学处理SE=strel('rectangle',[10,10]);%创建10*10的建构元素IM2=imerode(BW2,SE);%腐蚀IM2=bwareaopen(IM2,20);%删除小面积IM3=imdilate(IM2,SE);%膨胀%先腐蚀再膨胀,进行了开运算,消除小物体%%%%%%%%%%%%%%%%%%投影以粗略估计车牌位置p_h=projection(double(IM3),'h');%调用projection函数,水平方向if(p_h (1)>0)p_h=[0,p_h];endp_v=projection(double(IM3),'v');%调用projection函数,垂直方向if(p_v (1)>0)p_v=[0,p_v];end%%%%%%p_h=double((p_h>5));%水平方向p_h=find(((p_h(1:end-1)-p_h(2:end))~=0));len_h=length(p_h)/2;%%%%%p_v=double((p_v>5));%垂直方向p_v=find(((p_v(1:end-1)-p_v(2:end))~=0));len_v=length(p_v)/2;%%%%%%%%%%% %%%%%%%%%%%%%%%%%粗略计算车牌候选区k=1;for i=1:len_hfor j=1:len_vs=IM3(p_h(2*i-1):p_h(2*i),p_v(2*j-1):p_v(2*j));if(mean(mean(s))>0.1)p{k}=[p_h(2*i-1),p_h(2*i)+1,p_v(2*j-1),p_v(2*j)+1];k=k+1;endendendk=k-1; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%进一步缩小车牌候选区for i=1:kedge_IM3=double(edge(double(IM3(p{i}(1):p{i}(2),p{i}(3):p{i}(4))),'canny'));[x,y]=find(edge_IM3==1); p{i}=[p{i}(1)+min(x),p{i}(2)-(p{i}(2)-p{i}(1)+1-max(x)),...p{i}(3)+min(y),p{i}(4)-(p{i}(4)-p{i}(3)+1-max(y))];p_center{i}=[fix((p{i}(1)+p{i}(2))/2),fix((p{i}(3)+p{i}(4))/2)];p_ratio(i)=(p{i}(4)-p{i}(3))/(p{i}(2)-p{i}(1));end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%对上面参数和变量的说明:p为一胞元,用于存放每个图像块的左上和右下两个点的坐标;%存放格式为:p{k}=[x1,x2,y1,y2];x1,x2分别为行坐标,y1,y2为列坐标%p_center为一胞元,用于存放每个图像块的中心坐标,p_center{k}=[x,y];x,y分别为行,列坐标%p_ratio为一矩阵,用来存放图像块的长宽比例%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%合并临近区域%%%%%%%%如果有多个区域则执行合并if k>1n=0;ncount=zeros(1,k);for i=1:k-1%%%需要调整if条件中的比例%%%需要调整%检查是否满足合并条件if(abs(p{i}(1)+p{i}(2)-p{i+1}(1)-p{i+1}(2))<=height/30&&abs(p{i+1}(3)-p{i}(4))<=width/15)p{i+1}(1)=min(p{i}(1),p{i+1}(1));p{i+1}(2)=max(p{i}(2),p{i+1}(2));p{i+1}(3)=min(p{i}(3),p{i+1}(3));(4)=max(p{i}(4),p{i+1}(4));%向后合并n=n+1;ncount(n)=i+1;endend%如果有合并,求出合并后最终区域if(n>0)d_ncount=ncount(2:n+1)-ncount(1:n);%避免重复记录临近的多个区域。
matlab车牌识别课程设计报告(附源代码)
Matlab 程序设计任务书分院(系)信息科学与工程专业学生姓名学号设计题目车牌识别系统设计内容及要求:车牌定位系统的目的在于正确获取整个图像中车牌的区域,并识别出车牌号。
通过设计实现车牌识别系统,能够提高学生分析问题和解决问题的能力,还能培养一定的科研能力。
1.牌照识别系统应包括车辆检测、图像采集、牌照识别等几部分。
2.当车辆检测部分检测到车辆到达时 , 触发图像采集单元,采集当前的视频图像。
3.牌照识别单元对图像进行处理,定位出牌照位置,再将牌照中的字符分割出来进行识别,然后组成牌照号码输出。
进度安排:19 周: Matlab 环境熟悉与基础知识学习19周:课程设计选题与题目分析20周:程序设计编程实现20周:课程设计验收与答辩指导教师(签字):学院院长(签字):年月日年月日目录一.课程设计目的⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯3二.设计原理⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯3三.详细设计步骤⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯3四.设计结果及分析⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯18五.总结⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯19六.设计体会⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯20七.参考文献⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯21一、课程设计目的车牌定位系统的目的在于正确获取整个图像中车牌的区域,并识别出车牌号。
通过设计实现车牌识别系统,能够提高学生分析问题和解决问题的能力,还能培养一定的科研能力。
二、设计原理 :牌照自动识别是一项利用车辆的动态视频或静态图像进行牌照号码、牌照颜色自动识别的模式识别技术。
其硬件基础一般包括触发设备、摄像设备、照明设备、图像采集设备、识别车牌号码的处理机等,其软件核心包括车牌定位算法、车牌字符分割算法和光学字符识别算法等。
某些牌照识别系统还具有通过视频图像判断车辆驶入视野的功能称之为视频车辆检测。
一个完整的牌照识别系统应包括车辆检测、图像采集、牌照识别等几部分。
MATLAB车牌识别论文加源码
xxxx大学数字图像处理本科生课程论文论文题目:___车牌识别方法研究______完成时间:___2016年6月1日_______所在专业:___软件工程______________所在年级:___大三年级______________基于MATLAB的车牌识别方法研究xxx级软件专业1班 xxx xx摘要:汽车车牌的识别是智能交通管理的重要组成部分之一。
本文主要介绍车牌区域提取、字符切割、字符识别。
车牌区域提取主要包括图像灰度图转化、图像边缘检测、灰度图腐蚀、图像平滑处理、边界值计算。
字符切割主要包括图像去噪处理、图像膨胀和腐蚀处理。
字符识别主要包括图像膨胀和腐蚀处理、字符归一化。
关键词:MATLAB、车牌区域提取、字符识别、字符切割1 研究背景随着经济社会的迅猛发展,人们的生活水平的提高,机动车辆的数量也越来越多。
为了提高车辆的管理效率,缓解公路上的交通压力,我们必须找到一种解决方案。
而作为汽车“身份证”的汽车车牌,是在公众场合能够唯一确定汽车身份的凭证。
我们可以以此为依据,设计一种车牌识别系统监控各个车辆的情况。
车牌识别的难点:① 我国汽车牌照自身特征的复杂性1) 汉字、字母、数字混合。
我国的车牌不单单有英文字母和阿拉伯数字,还有汉字。
2) 颜色种类多。
国外的车牌颜色种类相对于国内较少一些,我国的车牌颜色种类较多。
3) 人为因素复杂。
由于环境、道路或者人为因素造成车牌有严重污渍、车牌模糊不清或者车牌偏斜角度很大的车辆,在我国都可以上路行驶。
4) 车牌格式多。
我国的车牌格式很多,包括:民用车牌、公安警察车牌、武警车牌、军车车牌、外交车牌、特种车牌、消防车牌等。
② 外部环境影响1) 外部光照条件各不相同,白天和晚上的光照各不相同。
光照对采集的图像质量产生很大的影响。
不同的光照角度对车牌光照的不均匀影响也很大。
不同的气候条件、背景光照环境、车牌反光程度都决定了车牌的亮度特征。
2) 外界背景的复杂程度也影响车牌的定位准确率。
数字图像处理车牌识别课程设计matlab实现附源代码
基于 matlab 的车牌识别系统一、目的与要求目的:利用 matlab 实现车牌识别系统,熟悉matlab应用软件的根底知识,了解了根本程序设计方法,利用其解决数字信号处理的实际应用问题,从而加深对理论知识的掌握,并把所学的知识系统、高效的贯穿到实践中来,防止理论与实践的脱离,稳固理论课上知识的同时,加强实践能力的提高,理论联系实践,提高自身的动手能力。
同时不断的调试程序也提高了自己独立编程水平,并在实践中不断完善理论根底,有助于自身综合能力的提高。
要求:1.理解各种图像处理方法确切意义。
2.独立进展方案的制定,系统构造设计要合理。
3.在程序开发时,那么必须清楚主要实现函数的目的和作用,需要在程序书写时说明做适当的注释。
如果使用matlab 来进展开发,要理解每个函数的具体意义和适用X围,在写课设报告时,必须要将主要函数的功能和参数做详细的说明。
4、通过多幅不同形式的图像来检测该系统的稳定性和正确性。
二、设计的内容学习 MATLAB 程序设计,利用MATLAB 函数功能,设计和实现通过设计一个车牌识别系统。
车牌识别系统的根本工作原理为:将手机拍摄到的包含车辆牌照的图像输入到计算机中进展预处理,再对牌照进展搜索、检测、定位,并分割出包含牌照字符的矩形区域,然后对牌照字符进展二值化并将其分割为单个字符,然后将其逐个与创立的字符模板中的字符进行匹配,匹配成功那么输出,最终匹配完毕那么输出那么为车牌的数字。
车牌识别系统的根本工作原理图如图1所下所示:车辆字符分割字符识别图像采集车牌的定位三、总体方案设计车辆牌照识别整个系统主要是由车牌定位和字符分割识别两局部组成,其中车牌定位又可以分为图像预处理及边缘提取模块和牌照的定位及分割模块;字符识别可以分为字符分割和单个字符识别两个模块。
为了用于牌照的分割和牌照字符的识别,原始图象应具有适当的亮度,较大的比照度和清晰可辩的牌照图象。
但由于是采用智能手机在开放的户外环境拍照,加之车辆牌照的整洁度、自然光照条件、拍摄时摄像机与牌照的矩离等因素的影响,牌照图象可能出现模糊、歪斜和缺损等严重缺陷,因此需要对原始图象进展识别前的预处理。
车牌识别matlab代码
close allclc[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,'robert',0.09,'both');%Robert算子边缘检测subplot(3,2,3),imshow(BianYuan),title('Robert算子边缘检测后图像');se1=[1;1;1]; %线型结构元素FuShi=imerode(BianYuan,se1); %腐蚀图像subplot(3,2,4),imshow(FuShi),title('腐蚀后边缘图像');se2=strel('rectangle',[30,30]); %矩形结构元素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:yfor j=1:xif(YuCuDingWei(i,j)==1)Y1(i,1)= Y1(i,1)+1;%白色像素点统计endendend[temp,MaxY]=max(Y1);%Y方向车牌区域确定。
matlab车牌识别课实验报告计报告(附源代码)
目录一.课程设计目的 (3)二.设计原理 (3)三.详细设计步骤 (3)四. 设计结果及分析 (18)五. 总结 (19)六. 设计体会 (20)七. 参考文献 (21)一、课程设计目的车牌定位系统的目的在于正确获取整个图像中车牌的区域,并识别出车牌号。
通过设计实现车牌识别系统,能够提高学生分析问题和解决问题的能力,还能培养一定的科研能力。
二、设计原理:牌照自动识别是一项利用车辆的动态视频或静态图像进行牌照号码、牌照颜色自动识别的模式识别技术。
其硬件基础一般包括触发设备、摄像设备、照明设备、图像采集设备、识别车牌号码的处理机等,其软件核心包括车牌定位算法、车牌字符分割算法和光学字符识别算法等。
某些牌照识别系统还具有通过视频图像判断车辆驶入视野的功能称之为视频车辆检测。
一个完整的牌照识别系统应包括车辆检测、图像采集、牌照识别等几部分。
当车辆检测部分检测到车辆到达时触发图像采集单元,采集当前的视频图像。
牌照识别单元对图像进行处理,定位出牌照位置,再将牌照中的字符分割出来进行识别,然后组成牌照号码输出。
三、详细设计步骤:1. 提出总体设计方案:牌照号码、颜色识别为了进行牌照识别,需要以下几个基本的步骤:a.牌照定位,定位图片中的牌照位置;b.牌照字符分割,把牌照中的字符分割出来;c.牌照字符识别,把分割好的字符进行识别,最终组成牌照号码。
牌照识别过程中,牌照颜色的识别依据算法不同,可能在上述不同步骤实现,通常与牌照识别互相配合、互相验证。
(1)牌照定位:自然环境下,汽车图像背景复杂、光照不均匀,如何在自然背景中准确地确定牌照区域是整个识别过程的关键。
首先对采集到的视频图像进行大范围相关搜索,找到符合汽车牌照特征的若干区域作为候选区,然后对这些侯选区域做进一步分析、评判,最后选定一个最佳的区域作为牌照区域,并将其从图象中分割出来。
流程图:完成牌照区域的定位后,再将牌照区域分割成单个字符,然后进行识别。
字符分割一般采用垂直投影法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于matlab的车牌识别系统一、目的与要求目的:利用matlab实现车牌识别系统,熟悉matlab应用软件的基础知识,了解了基本程序设计方法,利用其解决数字信号处理的实际应用问题,从而加深对理论知识的掌握,并把所学的知识系统、高效的贯穿到实践中来,避免理论与实践的脱离,巩固理论课上知识的同时,加强实践能力的提高,理论联系实践,提高自身的动手能力。
同时不断的调试程序也提高了自己独立编程水平,并在实践中不断完善理论基础,有助于自身综合能力的提高。
要求:1.理解各种图像处理方法确切意义。
2.独立进行方案的制定,系统结构设计要合理。
3.在程序开发时,则必须清楚主要实现函数的目的和作用,需要在程序书写时说明做适当的注释。
如果使用matlab来进行开发,要理解每个函数的具体意义和适用范围,在写课设报告时,必须要将主要函数的功能和参数做详细的说明。
4、通过多幅不同形式的图像来检测该系统的稳定性和正确性。
二、设计的内容学习MATLAB程序设计,利用MATLAB函数功能,设计和实现通过设计一个车牌识别系统。
车牌识别系统的基本工作原理为:将手机拍摄到的包含车辆牌照的图像输入到计算机中进行预处理,再对牌照进行搜索、检测、定位,并分割出包含牌照字符的矩形区域,然后对牌照字符进行二值化并将其分割为单个字符,然后将其逐个与创建的字符模板中的字符进行匹配,匹配成功则输出,最终匹配结束则输出则为车牌号码的数字。
车牌识别系统的基本工作原理图如图1所下所示:三、总体方案设计车辆牌照识别整个系统主要是由车牌定位和字符分割识别两部分组成,其中车牌定位又可以分为图像预处理及边缘提取模块和牌照的定位及分割模块;字符识别可以分为字符分割和单个字符识别两个模块。
为了用于牌照的分割和牌照字符的识别,原始图象应具有适当的亮度,较大的对比度和清晰可辩的牌照图象。
但由于是采用智能手机在开放的户外环境拍照,加之车辆牌照的整洁度、自然光照条件、拍摄时摄像机与牌照的矩离等因素的影响,牌照图象可能出现模糊、歪斜和缺损等严重缺陷,因此需要对原始图象进行识别前的预处理。
牌照的定位和分割是牌照识别系统的关键技术之一,其主要目的是在经图象预处理后的原始灰度图象中确定牌照的具体位置,并将包含牌照字符的一块子图象从整个图象中分割出来,供字符识别子系统识别之用,分割的准确与否直接关系到整个牌照字符识别系统的识别率。
由于拍摄时的光照条件、牌照的整洁程度的影响,和摄像机的焦距调整、镜头的光学畸变所产生的噪声都会不同程度地造成牌照字符的边界模糊、细节不清、笔划断开或粗细不均,加上牌照上的污斑等缺陷,致使字符提取困难,进而影响字符识别的准确性。
因此,需要将拍出的车牌进行处理,在这个过程中,我采用画图工具,将汽车图像的车牌部分进行裁剪,并将车牌的蓝色部分过亮的地方颜色加深,还将车牌中的一个白色的原点抹去,另外还将车牌上的铆钉使用车牌的蓝色背景覆盖,这样分割出的字符更加准确。
车牌识别的最终目的就是对车牌上的文字进行识别。
主要应用的为模板匹配方法。
因为系统运行的过程中,主要进行的都是图像处理,在这个过程中要进行大量的数据处理,所以处理器和内存要求比较高,CPU要求主频在600HZ及以上,内存在128MB 及以上。
系统可以运行于Windows7、Windows2000或者Windows XP操作系统下,程序调试时使用matlabR2011a。
四、各个功能模块的主要实现程序(一)首先介绍代码中主要的函数功能及用法:1.Imerode功能:对图像实现腐蚀操作,即膨胀操作的反操作。
用法:IM2 = imerode(IM,SE)IM2 = imerode(IM,NHOOD)IM2 = imerode(IM,SE,PACKOPT,M)IM2 = imerode(...,PADOPT)IM2 = imerode(IM,SE) 腐蚀灰度,二值,压缩二值图像IM,返回IM2。
参数SE为由strel 函数返回的结构元素或者结构元素对象组。
IM2 = imerode(IM,NHOOD)腐蚀图像IM,这里NHOOD是定义结构元素邻域0和1的矩阵。
IM2 = imerode(...,PADOPT)指出输出图像的大小(是否与输入图像大小一致)。
2.imdilate功能:对图像实现膨胀操作。
用法:IM2 = imdilate(IM,SE)IM2 = imdilate(IM,NHOOD)IM2 = imdilate(IM,SE,PACKOPT)IM2 = imdilate(...,PADOPT)IM2 = imdilate(IM,SE) 膨胀灰度,二值,压缩二值图像IM,返回IM2。
参数SE为由strel 函数返回的结构元素或者结构元素对象组。
IM2 = imdilate(IM,NHOOD)膨胀图像IM,这里NHOOD是定义结构元素邻域0和1的矩阵。
IM2 = imdilate(IM,SE,PACKOPT)定义IM是否是一个压缩的二值图像。
IM2 = imdilate(...,PADOPT)指出输出图像的大小。
3.strel功能:用于膨胀腐蚀及开闭运算等操作的结构元素对象(本论坛随即对膨胀腐蚀等操作进行讲解)。
用法:SE = strel(shape,parameters)创建由指定形状shape对应的结构元素。
其中shape的种类有‘arbitrary','pair','diamond','periodicline','disk','rectangle''line','square','octagon参数parameters一般控制SE的大小。
4.edgeBW = edge(I)采用灰度或一个二值化图像I作为它的输入,并返回一个与I相同大小的二值化图像BW,在函数检测到边缘的地方为1,其他地方为0。
BW = edge(I,'sobel') 自动选择阈值用Sobel算子进行边缘检测。
BW = edge(I,'sobel',thresh) 根据所指定的敏感度阈值thresh,用Sobel算子进行边缘检测,它忽略了所有小于阈值的边缘。
当thresh为空时,自动选择阈值。
BW = edge(I,'sobel',thresh,direction) 根据所指定的敏感度阈值thresh,在所指定的方向direction上,用Sobel 算子进行边缘检测。
Direction可取的字符串值为horizontal(水平方向)、vertical(垂直方向)或both(两个方向)。
[BW,thresh] = edge(I,'sobel',...) 返回阈值BW = edge(I,'prewitt') 自动选择阈值用prewitt算子进行边缘检测。
BW = edge(I,'prewitt',thresh) 根据所指定的敏感度阈值thresh,用prewitt算子进行边缘检测,它忽略了所有小于阈值的边缘。
当thresh为空时,自动选择阈值。
BW = edge(I,'prewitt',thresh,direction) 根据所指定的敏感度阈值thresh,在所指定的方向direction上,用prewitt算子进行边缘检测。
Direction可取的字符串值为horizontal(水平方向)、vertical(垂直方向)或both(两个方向)默认方向为both。
BW = edge(I,'roberts') 自动选择阈值用roberts算子进行边缘检测。
BW = edge(I,'roberts',thresh) 根据所指定的敏感度阈值thresh,用Roberts算子进行边缘检测,它忽略了所有小于阈值的边缘。
当thresh为空时,自动选择阈值。
5.Imclose功能:对图像实现闭运算,闭运算也能平滑图像的轮廓,但与开运算相反,它一般融合窄的缺口和细长的弯口,去掉小洞,填补轮廓上的缝隙。
用法:IM2 = imclose(IM,SE)IM2 = imclose(IM,NHOOD)用法和imopen相同。
6.imopen功能:对图像实现开运算,开运算一般能平滑图像的轮廓,消弱狭窄的部分,去掉细的突出。
用法:IM2 = imopen(IM,SE)IM2 = imopen(IM,NHOOD)IM2 = imopen(IM,SE)用结构元素SE实现灰度图像或二值图像的IM的形态开运算。
SE可以是单个结构元素对象或者结构元素对象数组。
IM2 = imopen(IM,NHOOD)用结构元素strel(NHOOD)执行开运算。
7.bwareaopen功能:删除小面积对象格式:BW2 = bwareaopen(BW,P,conn)作用:删除二值图像BW中面积小于P的对象,默认情况下conn使用8邻域。
8.tic和toc函数这两个函数一般配合使用,tic表示计时的开始,toc表示计时的结束。
格式如:tic任意表达式toct=toc9.fspecial功能:用于建立预定义的滤波算子,其语法格式为:h = fspecial(type)h = fspecial(type,para)其中type指定算子的类型,para指定相应的参数;type的类型有:1、'average'averaging filter为均值滤波,参数为hsize代表模板尺寸,默认值为【3,3】。
'disk'circular averaging filter为圆形区域均值滤波,参数为radius代表区域半径,默认值为5.'gaussian'Gaussian lowpass filter为高斯低通滤波,有两个参数,hsize表示模板尺寸,默认值为【3 3】,sigma为滤波器的标准值,单位为像素,默认值为0.5.'prewitt'Prewitt horizontal edge-emphasizing filter用于边缘增强,大小为【3 3】,无参数'sobel'Sobel horizontal edge-emphasizing filter用于边缘提取,无参数9. filter2J = filter2(h,I);使用指定的滤波器h对I进行滤波,结果保存在J中10.bwarea函数功能:计算二值图像中对象的总面积。
调用格式:total = bwarea(BW)估算二值图像BW中对象的总面积。
返回的total是一个标量,它的值大致地反映了和图像中on像素的个数。