欢迎来到天天文库
浏览记录
ID:28592977
大小:261.00 KB
页数:13页
时间:2018-12-11
《车牌识别及验证码识别.doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、车牌识别及验证码识别引言:本文主要对于车牌识别系统来说,D,0,O,I,1等等太相似了。然后,汉字的识别难度也不小,因此很难达到分辨率在95%以上,但是可以作为图像处理技术的小论文,在此放出,同时描述一下思路及算法。一、车牌/验证码识别的普通方法车牌、验证码识别的普通方法为:(1)将图片灰度化与二值化(2)去噪,然后切割成一个一个的字符(3)提取每一个字符的特征,生成特征矢量或特征矩阵(4)分类与学习。将特征矢量或特征矩阵与样本库进行比对,挑选出相似的那类样本,将这类样本的值作为输出结果。下面借着代码,描述一下上述过程。因为更新SVNServer,我以前以bd
2、b储存的代码访问不了,因此部分代码是用Reflector反编译过来的,望见谅。(1)图片的灰度化与二值化这样做的目的是将图片的每一个象素变成0或者255,以便以计算。同时,也可以去除部分噪音。图片的灰度化与二值化的前提是bmp图片,如果不是,则需要首先转换为bmp图片。用代码说话,我的将图片灰度化的代码(算法是在网上搜到的):Code1protectedstaticColorGray(Colorc)2{3intrgb=Convert.ToInt32((double)(((0.3*c.R)+(0.59*c.G))+(0.11*c.B)));4returnColo
3、r.FromArgb(rgb,rgb,rgb);5}6通过将图片灰度化,每一个象素就变成了一个0-255的灰度值。然后是将灰度值二值化为0或255。一般的处理方法是设定一个区间,比如,[a,b],将[a,b]之间的灰度全部变成255,其它的变成0。这里我采用的是网上广为流行的自适应二值化算法。Code1publicstaticvoidBinarizate(Bitmapmap)2{3inttv=ComputeThresholdValue(map);4intx=map.Width;5inty=map.Height;6for(inti=0;i4、r(intj=0;j=tv)11{12map.SetPixel(i,j,Color.FromArgb(0xff,0xff,0xff));13}14else15{16map.SetPixel(i,j,Color.FromArgb(0,0,0));17}18}19}20}2122privatestaticintComputeThresholdValue(Bitmapimg)23{24inti;25intk;26doublecsum;27intthresholdValue=1;28int[]ihis5、t=newint[0x100];29for(i=0;i<0x100;i++)30{31ihist[i]=0;32}33intgmin=0xff;34intgmax=0;35for(i=1;i<(img.Width-1);i++)36{37for(intj=1;j<(img.Height-1);j++)38{39intcn=img.GetPixel(i,j).R;40ihist[cn]++;41if(cn>gmax)42{43gmax=cn;44}45if(cn6、intn=0;53for(k=0;k<=0xff;k++)54{55sum+=k*ihist[k];56n+=ihist[k];57}58if(n==0)59{60return60;61}62doublefmax=-1.0;63intn1=0;64for(k=0;k<0xff;k++)65{66n1+=ihist[k];67if(n1!=0)68{69intn2=n-n1;70if(n2==0)71{72returnthresholdValue;73}74csum+=k*ihist[k];75doublem1=csum/((double)n1);76doubl7、em2=(sum-csum)/((double)n2);77doublesb=((n1*n2)*(m1-m2))*(m1-m2);78if(sb>fmax)79{80fmax=sb;81thresholdValue=k;82}83}84}85returnthresholdValue;86}8788灰度化与二值化之前的图片:灰度化与二值化之后的图片:注:对于车牌识别来说,这个算法还不错。对于验证码识别,可能需要针对特定的网站设计特殊的二值化算法,以过滤杂色。(2)去噪,然后切割成一个一个的字符上面这张车牌切割是比较简单的,从左到右扫描一下,碰见空大的,咔嚓一刀,8、就解决了。但有一些车牌,比如这张:简单
4、r(intj=0;j=tv)11{12map.SetPixel(i,j,Color.FromArgb(0xff,0xff,0xff));13}14else15{16map.SetPixel(i,j,Color.FromArgb(0,0,0));17}18}19}20}2122privatestaticintComputeThresholdValue(Bitmapimg)23{24inti;25intk;26doublecsum;27intthresholdValue=1;28int[]ihis
5、t=newint[0x100];29for(i=0;i<0x100;i++)30{31ihist[i]=0;32}33intgmin=0xff;34intgmax=0;35for(i=1;i<(img.Width-1);i++)36{37for(intj=1;j<(img.Height-1);j++)38{39intcn=img.GetPixel(i,j).R;40ihist[cn]++;41if(cn>gmax)42{43gmax=cn;44}45if(cn6、intn=0;53for(k=0;k<=0xff;k++)54{55sum+=k*ihist[k];56n+=ihist[k];57}58if(n==0)59{60return60;61}62doublefmax=-1.0;63intn1=0;64for(k=0;k<0xff;k++)65{66n1+=ihist[k];67if(n1!=0)68{69intn2=n-n1;70if(n2==0)71{72returnthresholdValue;73}74csum+=k*ihist[k];75doublem1=csum/((double)n1);76doubl7、em2=(sum-csum)/((double)n2);77doublesb=((n1*n2)*(m1-m2))*(m1-m2);78if(sb>fmax)79{80fmax=sb;81thresholdValue=k;82}83}84}85returnthresholdValue;86}8788灰度化与二值化之前的图片:灰度化与二值化之后的图片:注:对于车牌识别来说,这个算法还不错。对于验证码识别,可能需要针对特定的网站设计特殊的二值化算法,以过滤杂色。(2)去噪,然后切割成一个一个的字符上面这张车牌切割是比较简单的,从左到右扫描一下,碰见空大的,咔嚓一刀,8、就解决了。但有一些车牌,比如这张:简单
6、intn=0;53for(k=0;k<=0xff;k++)54{55sum+=k*ihist[k];56n+=ihist[k];57}58if(n==0)59{60return60;61}62doublefmax=-1.0;63intn1=0;64for(k=0;k<0xff;k++)65{66n1+=ihist[k];67if(n1!=0)68{69intn2=n-n1;70if(n2==0)71{72returnthresholdValue;73}74csum+=k*ihist[k];75doublem1=csum/((double)n1);76doubl
7、em2=(sum-csum)/((double)n2);77doublesb=((n1*n2)*(m1-m2))*(m1-m2);78if(sb>fmax)79{80fmax=sb;81thresholdValue=k;82}83}84}85returnthresholdValue;86}8788灰度化与二值化之前的图片:灰度化与二值化之后的图片:注:对于车牌识别来说,这个算法还不错。对于验证码识别,可能需要针对特定的网站设计特殊的二值化算法,以过滤杂色。(2)去噪,然后切割成一个一个的字符上面这张车牌切割是比较简单的,从左到右扫描一下,碰见空大的,咔嚓一刀,
8、就解决了。但有一些车牌,比如这张:简单
此文档下载收益归作者所有