图像识别技术——验证码识别

[1]1、数字图像处理基础

一幅图像能够定义为一个二维数组f(x,y),这里x,y是空间坐标,而在任何一对空间坐标(x,y)上的幅值f称为该点图像的强度或灰度。当x,y和幅值f为有限的、离散的数值时,称该图像为数字图像。 html

天然界呈如今人眼中的图像是连续的模拟信号,在计算机处理前,必须用图像传感器把光信号转换为表示亮度的电信号,再经过取样和量化获得一副数字图像。取样是对图像在坐标上进行离散化的过程,每个取样点称为一个像素。量化是对图像灰度上的离散化过程。取样后将获得M*N个像素,每一个像素量化获得一个灰度值L,以L表示灰度值的容许取值范围,则数字图像存储须要的比特数b能够表示为: 算法

clip_image002

图像的灰度值取值范围被称为图像的动态范围。把占有灰度级所有有效段的图像称为高动态范围图像,高动态范围图像有较高的对比度。相反,地动态范围的图像看上去是冲淡了的灰暗格调。 数组

 

2、图像的预处理:

主要是对图像进行灰度化、二值化、抑噪(滤波)等技术。 网络

一、图像的灰度化 人工智能

RGB系统中一个颜色值由3个份量组成,这样的图像称为彩色图像,RGB系统称为颜色空间模型。常见的颜色空间模型还有HSI、CMYK等。若是一幅图像的颜色空间是一维的(一个颜色值只有一个颜色份量),则这幅图像就是一副灰度图。在位图图像中,通常以R=G=B来显示灰度图像。 .net

clip_image004

图 1 原始图片 3d

经常使用的灰度化方法有如下三种: code

clip_image006 (2.1) htm

clip_image008 (2.2) blog

clip_image010 (2.3)

其中,公式(2.1)的方法来源于I色彩空间中I份量的计算公式,公式(2.2)来源于NTSC色彩空间中Y份量的计算公式。公式(2.3)是基于采用保留最小亮度(黑色)的方法。

clip_image012

图 2 用公式2.2灰度化后的图片

RGB彩色图像能够当作是由3副单色的灰度图像构成的,能够直接取RGB通道中的任一个通道获得灰度化图像,如clip_image014,前提是图像中目标像素的亮度信息主要分布在B通道上,不然灰度化结果将是亮度信息的大量丢失。灰度图像又叫亮度图像,由归一化的取值表示亮度,最大取值表示白色,最小取值表示黑色。

以P(x,y)表示图像中一个点,x、y分别是图像的横坐标和纵坐标,R(x,y)表示R通道的颜色份量,G(x,y)表示G通道的颜色份量,B(x,y)表示B通道的颜色份量。点P(x,y)的亮度值用L(x,y)表示。彩色图像的亮度没有严格的定义和计算公式,通常用公式(2.1)来计算,咱们记做L1(x,y)。一样的用公式(2.2)计算的亮度值记做L2(x,y),用公式(2.3)计算的亮度值记做L3(x,y)。能够证实:

clip_image016 (2.4)

clip_image018 (2.5)

公式(2.1)取RGB通道的平均值,获得的图像相对比较柔和,同时也缩小了目标和背景的平均亮度差,不利于后续的阀值处理。公式(2.2)考虑了人眼对绿色的适应度最强,蓝色次之,红色最差。在处理绿色调和蓝色调的验证码图像时,公式(2.2)的效果使人满意,但在处理红色调的图像时,由于公式中红色的权值很小,灰度化后目标像素和背景像素的亮度差值被严重缩小,效果还不如公式(2.1)。公式(2.3)基于一个前提,那就是有限保留目标像素的亮度信息,利于后续的阀值分割。

须要说明的是,要根据图像灰度化的目的不一样,原图色彩特征的不一样,选择合适的灰度化方法。

二、图像的二值化

通常24位RGB图像的灰度图是8位256个灰度级的,若是把这个灰度级减小到1位2个灰度级,就获得一副二值图,二值图像中的数据所有是0或1。

clip_image020

图 3 二值化后图像

 

3、字符分割:

字符分割包括从验证码图像中分割出字符区域和把字符区域划分红单个字符两个部分。若是采用统计特征匹配以及神经网络法识别,必需要先分割出单个的字符。简单的分割方法包括等距分割、积分投影分割、交叉点分割、求连通区等。其中,粘连字符的分割是一个难点,复杂的粘连状况下分割比较困难,是一个硬人工智能问题。

 

4、字符识别

字符识别就是把处理后的图片还原回字符文本的过程。能够分红基于字符分割的识别(包括采用神经网络、SVM、各类统计距离的识别法)和模板匹配法识别。

字符识别的经常使用作法是:先获取该字符的特征码,而后使用各类分类算法将对该特征码进行分类,将其打上相应的类标签。分类模型的训练,是对字符库中的每一个字符进行特征化处理,获得每一个字符的特征码,该字符的标签就是该字符自己,利用特征码加上字符的标签对字符库中的全部数据进行训练,获得相应的分类模型。

固然,获得了待识别字符的特征码后,也可使用类似性度量和字符库中的字符的特征码进行比较,将该字符识别为与其特征码类似性最高的字符。

如今的问题就集中在如何获取字符的特征码。文章[2]中介绍了一种简单的获取特征码的方法:

对于二值化后的图像进行分割,分割出来的图像是一个个的字符,以下图所示:

clip_image022

图 4 对图像进行分割,肯定每一个图像的边界

在每一个字符的边界内,按行(或列)扫描该图片,检测其中的每一个像素点,若是像素为白色则为0,若是像素为黑色则为1,将这些0和1连起来组成的字符串就构成了该字符图片的特征码。

 

 

参考文献:


[1] 《带干扰的验证码识别研究》 吕刚 浙江工业大学硕士学位论文

[2] 《C#中识别验证码》 http://www.360doc.com/content/11/0117/16/4304924_87149528.shtml

[3] 一些经常使用的代码 http://www.sharejs.com/codes/csharp/5611

[4] C#验证码识别实践  http://blog.csdn.net/stevenkylelee/article/details/8263890

相关文章
相关标签/搜索