C#图片验证码识别代码

上传人:大米 文档编号:489074640 上传时间:2023-12-08 格式:DOC 页数:8 大小:78.50KB
返回 下载 相关 举报
C#图片验证码识别代码_第1页
第1页 / 共8页
C#图片验证码识别代码_第2页
第2页 / 共8页
C#图片验证码识别代码_第3页
第3页 / 共8页
C#图片验证码识别代码_第4页
第4页 / 共8页
C#图片验证码识别代码_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《C#图片验证码识别代码》由会员分享,可在线阅读,更多相关《C#图片验证码识别代码(8页珍藏版)》请在金锄头文库上搜索。

1、去噪:用于验证码图片识别的类续(C#代码) 自从发表了用于验证码图片识别的类(C#代码)后,不断有网友下载这个类后,问如何用于一些特定的验证码。总结一下网友们的提问,很多都是不会从复杂背景中提到干净的字符图片来,这主要就是一个去噪问题,即除去图片上的背景、干扰点、干扰线等信息。这当中要用到很多图像学数学算法,首先声明,本人不是学图像学的,以下方法理论说得不对,敬请多批评指正。 1、如何设前景/背景的分界值 UnCodebase类中有一个GetPicValidByValue( intdgGrayValue) 函数,可以得到前景的有效区域,常有人问我前景/背景的分界值dgGrayValue是如何确

2、定的(常用的是灰度128)。这个值的获取是有数学算法,叫最大类间方差法,即图像的前后景的平方差为最大时的值就是我们关心的分界值,对付如 这样较复杂的背景非常管用,下面是具体的C#代码。Code/得到灰度图像前景背景的临界值最大类间方差法,yuanbao,2007.08/前景背景的临界值publicintGetDgGrayValue()intpixelNum=newint256;/图象直方图,共256个点intn,n1,n2;inttotal;/total为总和,累计值doublem1,m2,sum,csum,fmax,sb;/sb为类间方差,fmax存储最大方差值intk,t,q;intthr

3、eshValue=1;/阈值intstep=1;/生成直方图for(inti=0;ibmpobj.Width;i+)for(intj=0;jbmpobj.Height;j+)/返回各个点的颜色,以RGB表示pixelNumbmpobj.GetPixel(i,j).R+;/相应的直方图加1/直方图平滑化for(k=0;k=255;k+)total=0;for(t=-2;t=2;t+)/与附近2个灰度做平滑化,t值应取较小的值q=k+t;if(q255)q=255;total=total+pixelNumq;/total为总和,累计值pixelNumk=(int)(float)total/5.0+

4、0.5);/平滑化,左边2个+中间1个+右边2个灰度,共5个,所以总和除以5,后面加0.5是用修正值/求阈值sum=csum=0.0;n=0;/计算总的图象的点数和质量矩,为后面的计算做准备for(k=0;k=255;k+)sum+=(double)k*(double)pixelNumk;/x*f(x)质量矩,也就是每个灰度的值乘以其点数(归一化后为概率),sum为其总和n+=pixelNumk;/n为图象总的点数,归一化后就是累积概率fmax=-1.0;/类间方差sb不可能为负,所以fmax初始值为-1不影响计算的进行n1=0;for(k=0;kfmax)/如果算出的类间方差大于前一次算出的

5、类间方差fmax=sb;/fmax始终为最大类间方差(otsu)threshValue=k;/取最大类间方差时对应的灰度的k就是最佳阈值returnthreshValue; 2、如何去除干扰点/干扰线 2.1 干扰点/干扰线的特征分析 现在网上的大多数的验证码都是加了干扰的,一般分为干扰点和干扰线,如下图。标用1、2、3的分别为点、线、字符。 去干扰,一般是逐点分析,这三种情况下,每一点及周边8个点的情况都不一样(分别为1点,3点,8点),这是一种干扰信息的粒度比字符的粒度小的典型情况。现在就可以动手编写去杂代码了。 2.2 根据周边有效点数去噪函数Code/去掉杂点(适合杂点/杂线粗为1)/

6、背前景灰色界限/publicvoidClearNoise(intdgGrayValue,intMaxNearPoints)Colorpiexl;intnearDots=0;intXSpan,YSpan,tmpX,tmpY;/逐点判断for(inti=0;ibmpobj.Width;i+)for(intj=0;jbmpobj.Height;j+)piexl=bmpobj.GetPixel(i,j);if(piexl.RdgGrayValue)nearDots=0;/判断周围8个点是否全为空if(i=0|i=bmpobj.Width-1|j=0|j=bmpobj.Height-1)/边框全去掉bmpobj.SetPixel(i,j,Color.FromArgb(255,255,255);elseif(bmpobj.GetPixel(i-1,j-1).RdgGrayValue)nearDots+;if(bmpobj.GetPixel(i,j-1).RdgGrayValue)nearDots+;if(bmpobj.GetPixel(i+1,j-1).RdgGrayValue)nearDots+;if(bmpobj.GetPixel(i-1,j).RdgGrayValue)nearDots+;if(

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 营销创新

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号