图像处理和理解大作业_第1页
图像处理和理解大作业_第2页
图像处理和理解大作业_第3页
图像处理和理解大作业_第4页
图像处理和理解大作业_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

图像处理和理解PAGEPAGE1目录TOC\o"1-3"\f\h\z1.整体方案设计 32.各模块具体实现 52.1原始图像 52.2图像灰度化处理 52.3车牌定位 62.4车牌字符的分割 72.5车牌字符识别 93.程序调试与结果分析 104.总结 105.附录 11摘要:当今生活中汽车的作用越来越重要,带给了人们生活无尽便利,车辆总数越来越大,对汽车的管理也越来越困难。在这样的背景下图像处理领域内的汽车车牌识别技术具有巨大实用性的意义,而MATLAB有其突出的处理图像数据的能力,运用MATLAB实现对图像的预处理、车牌定位、车牌字符分割以及字符识别,进行车牌的自动识别。关键词:MATLAB;图像处理;车牌定位;字符分割;字符识别整体方案设计TC"1.整体方案设计"\fC车牌识别的整体方案流程图如下:图像采集包括CCD摄像机、照明设备、图像采集卡等。感应设备发出的信号出发图像采集卡,采集卡将模拟信号转换为数字信号后送到计算机。图像预处理:因为车牌图像都是在室外拍摄的,所以会受到光照、气候等因素的影响,而且车辆的移动会造成图像的模糊。要去除这些干扰就得先对车牌图像进行预处理。由于当前数码相机的像素较高,原始图像的数据一般比较大,输入的彩色图像包含大量颜色信息,会占用较多的存储空间,且处理时也会降低系统的执行速度。因此对图像进行识别等处理时,常将彩色图像转换为灰度图像,以加快处理速度。对图像进行灰度化处理后常用的方法是图像二值化、去除背景图像、增强处理、边缘检测、滤波等处理等。车牌定位方法:车牌识别前期的关键就是准确定位车牌的位置,然后才能进行车牌中字符的识别。经过查阅资料发现目前主要有以下四种车牌定位的方法:基于灰度边缘检测与形态学重构的方法。这种方法只要利用车牌区域局部对比度明显和有规律的纹理特征来定位,然后利用形态学方法将车牌区域与其它背景区域分离。基于直线检测的方法。这种方法主要Hough变换的方法来检测车牌周围边框直线,利用车牌形状特性来定位车牌。根据车牌的固有长宽比进行定位的方法。因为中外车牌的长宽比都是固定的3.1:1,在预处理完成后对二值化的图像进行膨胀腐蚀,计算联通区域长宽比确定车牌位置。基于彩色图像的车牌定位方法。现在的牌照有四种类型:第一种是最常见的小型汽车所用的蓝底白字牌照;第二种是大型汽车所用的黄底黑字牌照;第三种是军用或警用的白底黑字、红字牌照;第四种是国外驻华机构用的黑底白字、红字牌照。基于彩色图像的车牌定位方法主要利用车牌颜色与车身其他部位颜色具有明显不同的差异来分割与提取车牌。为了与课程内容联系我选择了第一种方法进行实验,即边缘检测与形态学重构的方法。字符分割:字符分割是指将车牌区域分割成单个的字符区域,分割越准确,识别效果越好。目前有许多种车牌字符分割算法,由于在车牌字符分割中存在噪声干扰,边框、铆钉影响,车牌旋转和光照不均等问题,造成分割不准确,甚至分割错误,目前很难找到普遍适用的分割方法。常用的字符分割法主要是基于投影分析字符的分割方法和基于连通域分析的字符分割方法。投影分析常采用的是水平投影法,即沿水平方向计算每一列属于车牌字符的象素数目,在字符的间隙处取得局部最小值,分割位置应在其附近。先根据车牌水平投影的统计特征呈现出明显“波峰——波谷——波峰”,进行水平方向上的粗分割,若字符出现合并和粘连现象,再采用递归回归办法进行二次字符分割。投影法进行字符分割实现起较为简单,但在预处理效果不好的情况下,较难获得满足条件的列。若增加预处理,则使处理后的图像不可避免地损失一部分有用信息,还可能导致额外误差。基于连通域聚类分析切分车牌字符的方法按照属于同一个字符的像素构成一个连通域的原则,结合牌照字符的固定高度和间距比例关系等先验知识,较好地解决了汽车牌照在复杂背景条件下的字符切分问题,降低了对车牌定位准确度的要求,对不规范的车牌识别也具有一定的适用性。字符识别方法:现阶段主要使用的方法是基于模板匹配和神经网络的方法。模板匹配法是最简单的一种字符识别方法。将待识别字符经分割归一化成模板字体的大小,将它输入字符识别模块进行匹配。根据实际字符和模板图像之间匹配方差最小的原则,判定车牌图像字符所属类别。这种方法对于标准、规范的字符识别效果较好。但在复杂环境下的车牌字符会与理想模板字符不完全一致,这导致了识别结果存在较大误差。模版匹配法简单、成熟,但其自适应不强。对于字符有断裂和粘连等情况容易造成误判。神经网络匹配法具有良好的容错性、自适应和学习能力,但样本的训练收敛速度慢,而大规模并行处理为此提供了解决途径。其中一种方法是采用并行识别的BP网络,让汉字、英文、阿拉伯数字,阿拉伯数字分别送到各自的网络识别。还有学者结合小波变化的优点,提出基于小波和BP神经网络的车牌字符识别新方法,采用小波变换提取字符特征,神经网络实现字符识别,加快了算法的执行,提高了识别率。各模块具体实现TC"2.各模块具体实现"\fC原始图像TC"2.1原始图像"\fC如下:图像灰度化处理TC"2.2图像灰度化处理"\fC由于彩色图像含有大量的颜色信息,它的存储空间占用大。如果直接使用彩色图像将大大降低图像处理的速度,通过将图像灰度化处理将彩色图像转换为256个级别的灰度图像可以大大减小存储量和提高处理速度。Prewitt算子是一种一阶微分算子的边缘检测,利用像素点上下、左右邻点的灰度差,在边缘处达到极值检测边缘,去掉部分伪边缘,对噪声具有平滑作用。与使用Sobel算子的方法一样,图像中的每个点都用两个核进行卷积,取最大值输出。它与Sobel算子不同,这一算子没有把重点放在接近模板中心的像素点。Prewitt边缘检测算子近似计算对x和y的偏导数:计算出,的值后,用下式计算点处的梯度值:计算出各点的值后,设定一个合适的阈值T,如果处的则认为该点的边缘点。由于车牌一般是由字符、背景和边框组成,提取图像的边缘图像后,在字符与背景处就形成了较强的边缘。再考虑汽车本身的特点,通常车牌位于汽车缓冲器上或附近,靠近整幅图像的下部,在往下便是路面,路面一般是比较光滑,因此可以在边缘提取时就很有效的将这部分杂质滤除掉,而使干扰图像的噪声处于车牌之上,如车灯,或散热片。进行边缘检测后,使用自定义线性结构元素se=[1;1;1]进行图像边缘的腐蚀,得到更加清晰的边缘图像。然后使用矩形结构元素对图像进行聚类和填充。最后通过bwareaopen(I4,2000);去除灰度团小于2000的部分。下图是经过边缘提取、腐蚀、填充、形态滤波得到最终的边缘图像。车牌定位TC"2.3车牌定位"\fC车牌定位问题其本质就是图像的分割问题,即如何把具有特征性或规律性的区域提取出来的过程。图像分割是由图像处理转到图像分析的关键。一方面,它是目标图像表达的基础,对特征测量有重要的影响。另一方面,图像分割和分割的且标表达、特征提取和参数测量等将原始图像转化为数学表达形式,使得利用计算机进行图像分析和理解成为可能。采用行列像素点灰度值累计的统计方法来定位车牌的位置,车牌内的行和列的像素点灰度值的累计和会较大,因此得到灰度值累积和的多出峰值就能够确定车牌的起始和终止的行和列,进而确定车牌位置。下图是行列像素点灰度值累计和的曲线,车牌位置可以从图中观察得到。用上图计算得到的车牌位置坐标去截取彩色图像,得到彩色车牌:车牌字符的分割TC"2.4车牌字符的分割"\fC确定车牌位置后下一步的任务就是进行字符切分分离出车牌号码的全部字符图像。考虑到基于投影分析字符的分割方法和基于连通域分析的字符分割方法实现起来比较复杂,于是我就综合前人方法总结出自己的算法。车牌字符分割包括字符分割和单个字符识别两个模块。考虑到获取的图像可能存在一定缺陷,因此在进行字符分割之前要先对定位后的车牌图像进行预处理,以方便后面的工作车牌上共有7个字符,间距相等,设平均字宽为,还有一个分隔符“﹒”占1/2字宽。通过之前的预处理,可以将分隔符“﹒”用滤波器去掉。设是文字的二维点阵图形,有文字处为1,否则为0。首先在处切割,若两个文字相粘连时,其间隔处便不会出现,此时就要辅之以求平均字宽的方法。若某个字宽,说明中含有一个以上的文字,需要继续分割。由于在字符识别中我准备采用模板匹配的方法,因此需要将已分割出来的字符进行归一化处理。因为我所采用的模板的尺寸为,因此需要将分割出来的字符也归一化为40×20的尺寸。首先对彩色车牌进行二值化:g_max=double(max(max(I1)));g_min=double(min(min(I1)));T=round(g_max-(g_max-g_min)/3);通过以上代码得到原彩色图像的灰度图像的二值化阈值,使用这个阈值将彩色车牌灰度化后的灰度图像二值化为黑白图像,便于车牌中字符的识别。下图为二值化的车牌图像:同样通过形态学滤波,去掉像素点小于500的区域,由于车牌中汉字有比较小的笔划容易被滤除,所以像素点的个数不宜取的过大。经过滤波后的黑白车牌图像图下图所示:由于滤波的作用字母A后面的圆点消失了。接下来通过列像素点灰度值累计和来分割字符。由于车牌字符间有空隙,因此累计和的图像上一定有多出为0的列,按照这些为0的列来分割车牌就能够达到理想的提取字符的目的。采用的方法同车牌定位的方法相同。下图是列方向上的像素点灰度值累计和曲线:观察上图,车牌被6个灰度值累计和为0的列区域分为很明显的七个区域,即七个字符所在的位置。最后得到七个字符的图像:车牌字符识别TC"2.5车牌字符识别"\fC对分割出来的字符进行识别的方法很多,主要有以下几种方法:A.利用字符的结构特征和变换(如Fourier变换、Karhunen-Loeve变换等)进行特征提取。该方法对字符的倾斜、变形都有很高的适应性,但运算量大,对计算机性能的要求较高。B.利用字符统计特征进行特征提取。如提取字符的投影特征、网格特征和轮廓特征组成字符特征矢量进行匹配的方法,识别率较高。C.基于字符结构分析的识别方法。该方法可以识别有较大旋转、变形、缩放的字符图像,但需要进行复杂的字符笔划分析和抽取,对字图像质量要求较高。D.模板匹配法。由于车辆牌照字符中只有26个大写英文字母、10个阿拉伯数字和约50个汉字,所以字符集合较小,该方法对于有一定变形、污损或笔画缺损的字符图像有较好的识别效果,总体识别率较高,同时也能满足实时性的要求。考虑到本字符识别只涉及31个汉字26个字母以及10个数字,字符库很容易建立,运用模板匹配法应该是最好的选择。首先需要建立字库,可将每个字符模板(模板均为二值图像)按约定好的顺序大小依次排入一张.bmp图中,再用matlab调用图片与所要识别图像用corr2()函数一一比较,找出其中最大值及其对应位置编号再用switch函数赋相应的值即完成。最终识别结果:程序调试与结果分析TC"3.程序调试与结果分析"\fC在程序设计过程中,碰到很多的问题。一个函数只能对灰度图像处理,不能对RGB图像处理,那么如何才能对RGB图像处理呢?这主要是对MATLAB函数的不够清楚,用到的很多函数是针对二维数据的,而RGB图像的数据是一个三维矩阵,所以处理要与灰度图像不同,在开始的时候,我认为应该找一个能够应用于三维矩阵的函数,结果却没找到,后来想到可以把三维数据进行降维处理,同样使用二维的函数,只要是同样处理三次。比如,彩色图像的滤波处理,直方图均衡等。同一个操作对灰度图像可以使用,当用户选择的是彩色图像时,该操作就会出错?这是由于设计程序时,本身程序是有针对性的,有些程序只能对灰度图像有效,有些对彩色图像有效,但是用户并不清楚这些,所以在设计的过程中就要考虑全面,要分开设计。在本次课程设计中,我均对每个程序的开始时,用ifisrgb(x)进行判断。经过几幅图像的测试,本系统都能较好的识别出来,但系统还是存在适用范围,对于车牌在整副图片中占的比例很小时不能够准确的识别,受到背景的干扰十分严重,所以在应用时应该尽可能获得足够清晰的车牌,并且车牌在整幅照片中应该占有相当大的比例。在边缘检测阶段尝试了不同的边缘检测算子,并且对其效果进行了比较。梯度算子计算简单,但精度不高,只能检测出图像大致的轮廓,而对于比较细的边缘可能会忽略。Prewitt和Sobel算子比Roberts效果要好一些。Canny算子的检测效果优于梯度算子,能够检测出图像较细的边缘部分。不同的系统,针对不同的环境条件和要求,选择合适的算子来对图像进行边缘检测。总结TC"4.总结"\fC本次作业我主要是对车牌识别系统的软件部分进行了研究,分别从图像预处理、车牌定位、字符分割以及字符识别等方面进行了系统的分析。通过这次车牌识别系统的课程设计的完成,对数字图像处理和理解课程的作用和意义有了更深的理解,对课程所教授的内容也在实践中灵活运用加深了印象,也学会了运用MATLAB这一数学编程工具。对于科研的一般过程有了了解。同时也提升了独立解决问题的能力,以及一些自己的创新能力。总结起来主要有以下三点:1、巩固了数字图像处理课上所学的知识,比如滤波、膨胀、腐蚀、边缘提取等等。2、通过这次大作业使我对Matlab的使用更加熟练了。3、为了完成车牌识别系统,从网上查阅了不少资料,与同学交流经验和自学,使自己学到了不少知识,也经历了不少艰辛,在整个设计中我懂得了许多东西,也培养了我独立工作的能力,树立了对自己工作能力的信心,相信会对今后的学习工作生活有非常重要的影响。参考文献[1]崔江、王友仁.车牌自动识别方法中的关键技术研究.计算机测量与控制,2003.11[2]崔江王友仁.车牌自动识别方法中的关键技术研究[J]计算机测量与控制,2003.11(4)[3]王刚,冀小平.基于MATLAB的车牌识别系统的研究.中国科技论文在线[4]潘中杰,车牌自动识别技术的研究与实现,广东:中山大学,2007[5]孙彬.车牌自动识别图像处理关键技术研究.电子科技大学学位论文附录TC"5.附录"\fC字符提取程序代码:I=imread('P1.jpg');%¶ÁȡͼÏñfigure();imshow(I),title('ԭʼͼÏñ');I1=rgb2gray(I);%ת»¯Îª»Ò¶ÈͼÏñfigure();imshow(I1),title('»Ò¶ÈͼÏñ');I2=edge(I1,'prewitt',0.065,'both');%²ÉÓÃrobertËã×Ó½øÐбßÔµ¼ì²â%I2=edge(I1,'robert');%²ÉÓÃrobertËã×Ó½øÐбßÔµ¼ì²âfigure();subplot(2,2,1),imshow(I2),title('±ßÔµ¼ì²âºóͼÏñ');se=[1;1;1];%ÏßÐͽṹԪËØI3=imerode(I2,se);%¸¯Ê´Í¼Ïñsubplot(2,2,2),imshow(I3),title('¸¯Ê´ºó±ßԵͼÏñ');se=strel('rectangle',[25,25]);%¾ØÐνṹԪËØI4=imclose(I3,se);%ͼÏñ¾ÛÀà¡¢Ìî³äͼÏñsubplot(2,2,3),imshow(I4),title('Ìî³äºóͼÏñ');I5=bwareaopen(I4,2000);%È¥³ý¾ÛÍŻҶÈֵСÓÚ2000µÄ²¿·Ösubplot(2,2,4),imshow(I5),title('ÐÎ̬Â˲¨ºóͼÏñ');[y,x,z]=size(I5);I6=double(I5);Y1=zeros(y,1);fori=1:yforj=1:xif(I6(i,j,1)==1)Y1(i,1)=Y1(i,1)+1;endendend[tempMaxY]=max(Y1);figure();subplot(1,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);forj=1:xfori=PY1:PY2if(I6(i,j,1)==1)X1(1,j)=X1(1,j)+1;endendendsubplot(1,2,2),plot(0:x-1,X1),title('Áз½ÏòÏñËصã»Ò¶ÈÖµÀۼƺÍ'),xlabel('ÁÐÖµ'),ylabel('ÏñËØ');%%%%%%%ÇóµÄ³µÅƵÄÁÐÆðʼλÖúÍÖÕֹλÖÃ%%%%%%%%%PX1=1;while((X1(1,PX1)<3)&&(PX1<x))PX1=PX1+1;endPX2=x;while((X1(1,PX2)<3)&&(PX2>PX1))PX2=PX2-1;endPX1=PX1-1;PX2=PX2+1;%·Ö¸î³ö³µÅÆͼÏñ%dw=I(PY1:PY2,PX1:PX2,:);figure();imshow(dw),title('¶¨Î»¼ôÇкóµÄ²ÊÉ«³µÅÆͼÏñ');I1=rgb2gray(I);%½«RGBͼÏñת»¯Îª»Ò¶ÈͼÏñg_max=double(max(max(I1)));g_min=double(min(min(I1)));T=round(g_max-(g_max-g_min)/3);%TΪ¶þÖµ»¯µÄãÐÖµI1=im2bw(dw,T/256);figure();imshow(I1),title('¶þÖµ»¯³µÅÆͼÏñ');I2=bwareaopen(I1,500);figure();imshow(I2),title('ÐÎ̬ѧÂ˲¨ºóµÄ¶þÖµ»¯Í¼Ïñ');%%ѵÁ·Ñù±¾Ç°ÆÚ´¦ÀíI1=rgb2gray(I);I1=imresize(I1,[5025]);%½«Í¼Æ¬Í³Ò»»®Îª50*25´óСI1=im2bw(I1,0.9);[m,n]=size(I1);inpt=zeros(1,m*n);%%½«Í¼Ïñ°´ÁÐת»»³ÉÒ»¸öÐÐÏòÁ¿forj=1:nfori=1:minpt(1,m*(j-1)+i)=I1(i,j);endend%end%StringSplitº¯Êý£º%function[PIN0,PIN1,PIN2,PIN3,PIN4,PIN5,PIN6]=StringSplit(I2)[y1,x1,z1]=size(I2);I3=double(I2);TT=1;%%%%%%%È¥³ýͼÏñ¶¥¶ËºÍµ×¶ËµÄ²»¸ÐÐËȤÇøÓò%%%%%Y1=zeros(y1,1);fori=1:y1forj=1:x1if(I3(i,j,1)==1)Y1(i,1)=Y1(i,1)+1;endendendPy1=1;Py0=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();imshow(I2),title('Ä¿±ê³µÅÆÇøÓò');%%%%%%·Ö¸î×Ö·û°´ÐлýÀÛÁ¿%%%%%%%X1=zeros(1,x1);forj=1:x1fori=1:y1if(I3(i,j,1)==1)X1(1,j)=X1(1,j)+1;endendendfigure();plot(0:x1-1,X1),title('Áз½ÏòÏñËصã»Ò¶ÈÖµÀۼƺÍ'),xlabel('ÁÐÖµ'),ylabel('ÀÛ¼ÆÏñËØÁ¿');Px0=1;Px1=1;%%%%%%%%%%%%·Ö¸î×Ö·û%%%%%%%%%%%%%%%%%%fori=1:7while((X1(1,Px0)<3)&&(Px0<x1))Px0=Px0+1;endPx1=Px0;while(((X1(1,Px1)>=3)&&(Px1<x1))||((Px1-Px0)<10))Px1=Px1+1;endZ=I2(:,Px0:Px1,:);switchstrcat('Z',num2str(i))case'Z1'PIN0=Z;case'Z2'PIN1=Z;case'Z3'PIN2=Z;case'Z4'PIN3=Z;case'Z5'PIN4=Z;case'Z6'PIN5=Z;otherwisePIN6=Z;endfigure(11);subplot(1,7,i);imshow(Z);Px0=Px1;End模板匹配法识别字符程序代码:liccode=char(['0':'9''A':'Z''ËÕԥɳ']);%½¨Á¢×Ô¶¯Ê¶±ð×Ö·û´úÂë±íSubBw2=zeros(40,20);I=1;forI=1:7ii=int2str(I);t=imread([ii,'.jpg']);SegBw2=imresize(t,[4020],'nearest');ifl==1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论