验证码识别过程(二)

来源:互联网 发布:京东怎么做淘宝客 编辑:程序博客网 时间:2024/06/05 23:53
      验证码是别过程:
  1. 将图像从jpg等格式转换为位图便于处理,方法在上一篇文章中讲过了。
  2. 去除干扰素:<a>线条的:检查该线条是否贯通的直线条,如果是则去掉,<b>点:检查该点是否是孤立的,如果是则去掉。
  3. 图像灰度化-中值滤波等,同时可以实现背景的去除。
  4. .二值化:一般图片都是彩色的,按照逼真程度,可能很多级别。为了降低计算复杂度,方便后续的处理,如果在不损失关键信息的情况下,能将图片处理成黑白两种颜色,那就最好不过了。
  5. .细化:找出图像的骨架,图像线条可能是很宽的,通过细化将宽度将为1,某些地方可能大于1。不同的细化算法,可能有不同的差异,比如是否更靠近线条中间,比如是否保持联通行等。
  6. .边缘检测:主要是理解边缘的概念。边缘实际上是图像中图像像素属性变化剧烈的地方。可能通过一个固定的门限值来判断,也可能是自适应的。门限可能是图像全局的,也可能是局部的。不能说那个就一定好,不过大部分时候,自适应的局部的门限可能要好点。被分析的,可能是颜色,也可能是灰度图像的灰度。
  7. 图片分割和识别.
     需要提醒的是:bmp图片在扫描行所占的字节数是4的倍数,不足的以0填充,在读取像数值是要注意你的图片每行是否有填充的0,有的话也要读入但不计算,不然,当把图片灰度化后,像素存入图片,图片会错乱。。。。。
         图片灰度化: 比如原来的图片图片灰度化后的效果.,
         图像二值化的意思就是将图像的有效点给分离出来,然后将图片用0和1两个值进行表示,因为我们没必要知道他们的具体色值,我们的目的就是要知道他们的具体形状,他们的特征.
         而二值化的关键就在于找一个合适的阈(yu)值,找阈值的算法很多,比如大津法,OSTU分水岭算法等等,但有时这些算法算出的阈值也不一定准确,还有一种方法就是自定义阈值,进行比试,进而找到一个满意的阈值,bmp 图片一般像素值越小,颜色越黑。二值化的思想是什么呢?其实,二值化就是把小于这阈值的像素全设为0,而大于此阈值的像素设为255,二值化后的图片效果
          图片分割,每个人都有自己的分割方法,大体的就是求出每个字符的高度和宽度范围,这里就不多说了。
           验证码识别:(方法:特征向量法)
             1.(建两个模板)第一个模板,把每个字符的像素保存在一个二维数组中,的二个模板,把与第一模板相同的字符像素也保存在二维数组中,与一模板不同的是,@每个字符从上到下,从左到右,依次寻找,如果这一行有多个黑像素值(0)相邻,就记一个1,接着如果遇见多个白色像素值(255)相邻,但就记一个0,就这样每行进行计算#//,每个字符都这样计算,最后得到两个模板, ($$) 接着读图片字符,先把读入的一个字符与一模板第一个字符的像素值进行一对一比较,算出相同位置上的1的个数num1,再与二模板第一个二维数组进行逐行逐数比较,算出这个二维数组中相同的行数num2(读入的字符也执行@~#//),num3[i] = num1 * num2;重复执行($$)后的算法,最后得到 i 个num3;然后找出这i个num3中最大值的下标,此下标对应的字符就为识别字符,最后,仍有几个没识别,可特意把它加进模板中。
            2.(建立一个模板):欧式距离法,将一个字符都放在16*16(是因为我这图片中字符宽和长都接近16)的矩阵中,可将这16*16的矩阵看作16个4*4的矩阵,你也可以定义其他大小的矩阵,但是,一定要能分成m个 n * n的小矩阵。然后,分别计算这16个4*4小矩阵中黑像素的个数num1,这样就能得到16个特征向量,为了提高识别精确度,再找其他图片上同一字符,算出特征量,这样一个字符就会有多组不同的特征量组,然后,把各组特征向量对应求平均值,就会得到一个平均特征向量组,并把它保存成模板,依照上面的做法就能得到所有字符的模板库,之后,就读子符匹配识别,这里就用到“欧几里德距离公式算法”;
欧氏距离的公式
  d=sqrt( ∑(xi1-xi2)^2 ) 这里i=1,2..n
  xi1表示第一个点的第i维坐标,xi2表示第二个点的第i维坐标
  n维欧氏空间是一个点集,它的每个点可以表示为(x(1),x(2),...x(n)),其中x(i)(i=1,2...n)是实数,称为x的第i个坐标,两个点x和y=(y(1),y(2)...y(n))之间的距离d(x,y)定义为上面的公式.
欧氏距离的比仿意义
欧氏距离看作信号的相似程度。 距离越近就越相似,就越容易相互干扰,误码率就越高。

友情资源链接:http://wenku.baidu.com/view/06a6ea45a8956bec0975e362.html
                       http://www.cnblogs.com/cntlis/archive/2009/01/15/1376465.html
                       http://www.pudn.com/search_db.asp?keyword=%B3%B5%C5%C6
知识拓展链接:http://www.doc88.com/p-986628216997.html                




阅读(114) | 评论(2) | 转发(0) |
0

上一篇:验证码识别

下一篇:验证码识别部分代码

相关热门文章
  • 江苏镇江自愿连鎖经营“办理申...
  • 港媒曝TVB男星涉同性卖淫:5万...
  • 驱动设备号、节点等等...
  • Oracle 12C 多租户(Oracle Mu...
  • 食堂承包方注意的问题...
  • test123
  • 编写安全代码——小心有符号数...
  • 使用openssl api进行加密解密...
  • 一段自己打印自己的c程序...
  • sql relay的c++接口
  • 那一台服务器也没5T的存储空间...
  • 公司有5T的数据用于下载,数据...
  • CACTI监控ESXI中的虚拟机,监...
  • 如何挂载一块以前做过LVM的硬...
  • 做主主同步,只同步个别的几张...

不黑的夜2012-11-28 21:12:15

回复 | 举报

不黑的夜2012-11-28 21:11:47

回复 | 举报
评论热议
原创粉丝点击