转载 图片分析验证码

具体实现思路:以4位数字的验证码为例

1、人工将验证码的4位数字每位对应的代码存入数据库中,每位存入0-9对应的代码,每个数可以多存这样可以提高识别率;

2、获取验证码image以后,对其进行去背景、灰度处理、去噪点处理、分片处理以后生成每位数字对应的代码;

3、去背景色,这一步的目的是把验证码和背景颜色区别开来。

去除背景的算法,依赖于验证码图像的特征:

1、首先需要知道背景色  
  最简单的方法就是把最左上角的点的量化值作为背景色。
  优化一点可以取图像矩形的topleft,topright,bottomleft,bottomright这4个点比对。
  或者取更边界上更多点比对。

2、扫描m*n图像矩形,从每个具有背景色的点出发找到整个连接块,设置matrix[i,j]=0。
  这是一个很简单的带剪枝的DFS算法,很快就能把背景色去除,本例用第二种。

4、去噪声:这一步要取出图像上的孤立点。这些孤立点被认为是噪声。
  孤立点的定义:某个点,周围没有与该点等值的点。
  或者某个连接块,该连接块的元素的个数小于某个给定值K, 把元素个数很小的连接块也定义为孤立点,有助于去处噪声。
  去噪声算法:参照去背景算法。

5、图像锐化:图像锐化的目的是增强边界。这一步是可选的。看验证码的情况,这一步可以跳过。

6、图片有效区域截取:这个操作是将图片除验证码字符以外的边框去掉,只留下验证码字符图片,这样保证分片的准确性。

7、图片分片处理,这个处理是将整个图片分割成单个字符图片。

1、连接块法:找到矩阵中除背景外所有的连接块,把每个连接块作为一个子图。
  不适用于子图存在断裂的情形。
   实现:带剪枝的DFS。

2、子图分割:如果验证码是定长的,且字符之间等距。
  可以用一个简单的垂直分割把子图提取出来。
  这种方法适用于子图断裂,用连接块法提取失败的情形。 本例用第二种。

3、有某些类型的验证码用上面2个方法都难以提取子图

posted @ 2013-10-02 22:25  meetweb  阅读(1139)  评论(0编辑  收藏  举报