简单验证码的识别(matlab实现)

之前同样的验证码用java识别过,文章为地址为http://blog.csdn.net/q651742112/article/details/76405504
最近在学习matlab,就用它实现一下
验证码样本如下:
这里写图片描述 这里写图片描述

验证码采集地址:http://www.quanjing.com/createImg.aspx
识别思路:这个验证码比较规则,数字都是显示在固定的区域,数字也无粘连,实现步骤如下
1.对图像进行分割,分割成一个图像显示一个数字
2.对每个图像进行灰化处理,就是设置一个阈值将他们变成黑白图片
3.建立一个标准的数字图像库
4.将每个被分割的小图片与标准库比较,像素点重合最多的就是该数字
结果图:
这里写图片描述
matlab实现代码如下:

d=imread('D:\image\VerificationCode\123\12.jpg'); %读取图片
%===================标准图片================================
s=rand(12,9,10); %建立三维数组存放标准数字的像素点(有点长,关键代码在下面)
s(:,:,1)=[1     1     0     0     0     1     1     1     1;
     1     0     0     0     0     0     1     1     1;
     0     0     1     1     1     0     0     1     1;
     0     0     1     1     1     0     0     1     1;
     0     0     1     1     1     0     0     1     1;
     0     0     1     1     1     0     0     1     1;
     0     0     1     1     1     0     0     1     1;
     0     0     1     1     1     0     0     1     1;
     0     0     1     1     1     0     0     1     1;
     0     0     1     1     1     0     0     1     1;
     1     0     0     0     0     0     1     1     1;
     1     1     0     0     0     1     1     1     1];%数字0
s(:,:,2)= [1     1     1     0     0     0     1     1     1;
     1     1     0     0     0     0     1     1     1;
     1     0     0     0     0     0     1     1     1;
     0     0     0     0     0     0     1     1     1;
     1     1     1     0     0     0     1     1     1;
     1     1     1     0     0     0     1     1     1;
     1     1     1     0     0     0     1     1     1;
     1     1     1     0     0     0     1     1     1
     1     1     1     0     0     0     1     1     1;
     1     1     1     0     0     0     1     1     1;
     1     1     1     0     0     0     1     1     1;
     1     1     1     0     0     0     1     1     1;];%数字1
 s(:,:,3)=[1     1     0     0     0     1     1     1     1;
     1     0     0     0     0     0     1     1     1;
     0     0     0     1     1     0     0     1     1;
     0     0     1     1     1     0     0     1     1;
     1     1     1     1     1     0     0     1     1;
     1     1     1     1     1     0     0     1     1;
     1     1     1     0     0     0     1     1     1;
     1     1     0     0     0     1     1     1     1;
     1     0     0     0     1     1     1     1     1;
     1     0     0     1     1     1     1     1     1;
     0     0     0     0     0     0     0     1     1;
     0     0     0     0     0     0     0     1     1];%数字2
 s(:,:,4)=[1     1     0     0     0     1     1     1     1;
     1     0     0     0     0     0     1     1     1;
     0     0     1     1     1     0     0     1     1;
     1     1     1     1     1     0     0     1     1;
     1     1     1     0     0     0     0     1     1;
     1     1     1     0     0     0     0     1     1;
     1     1     1     1     1     0     0     1     1;
     1     1     1     1     1     0     0     1     1;
     0     1     1     1     1     0     0     1     1;
     0     0     1     1     1     0     0     1     1;
     1     0     0     0     0     0     1     1     1;
     1     1     0     0     0     1     1     1     1];%数字3
 s(:,:,5)=[1     1     1     1     0     0     1     1     1;
     1     1     1     0     0     0     1     1     1;
     1     1     1     0     0     0     1     1     1;
     1     1     0     0     0     0     1     1     1;
     1     0     0     0     1     0     1     1     1;
     0     0     0     1     0     0     1     1     1;
     0     0     1     1     0     0     1     1     1;
     0     1     0     0     0     0     1     1     1;
     0     0     0     0     0     0     0     1     1;
     1     0     0     0     0     0     0     1     1;
     1     1     1     1     0     0     1     1     1;
     1     1     1     1     0     0     1     1     1];%数字4
 s(:,:,6)=[1     1     0     0     0     0     0     1     1;
     1     0     0     0     0     0     0     1     1;
     0     0     0     1     1     1     1     1     1;
     0     0     0     1     1     1     1     1     1;
     0     0     0     0     0     1     1     1     1;
     1     0     0     0     0     0     1     1     1;
     1     1     1     1     1     0     0     1     1;
     1     1     1     1     1     0     0     1     1;
     0     0     1     1     1     0     0     1     1;
     0     0     0     1     1     0     0     1     1;
     1     0     0     0     0     0     1     1     1;
     1     1     0     0     0     1     1     1     1];%数字5
 s(:,:,7)=[ 1     1     0     0     0     0     1     1     1;
     1     0     0     0     0     0     1     1     1;
     1     0     1     1     1     0     0     1     1;
     0     0     1     1     1     1     1     1     1;
     0     0     0     0     0     0     1     1     1;
     0     0     0     0     0     0     0     1     1;
     0     0     1     1     1     0     0     1     1;
     0     0     1     1     1     0     0     1     1;
     0     0     1     1     1     0     0     1     1;
     0     0     1     1     1     0     0     1     1;
     1     0     0     0     0     0     1     1     1;
     1     1     0     0     0     1     1     1     1];%数字6
 s(:,:,8)=[ 0     0     0     0     0     0     0     1     1;
     0     0     0     0     0     0     0     1     1;
     1     1     1     1     0     0     0     1     1;
     1     1     1     1     0     0     1     1     1;
     1     1     1     0     0     1     1     1     1;
     1     1     1     0     0     1     1     1     1;
     1     1     1     0     1     1     1     1     1;
     1     1     0     0     1     1     1     1     1;
     1     1     0     0     1     1     1     1     1;
     1     1     0     0     1     1     1     1     1;
     1     1     0     1     1     1     1     1     1;
     1     1     0     1     1     1     1     1     1];%数字7
 s(:,:,9)=[ 1     1     0     0     0     1     1     1     1;
     1     0     0     0     0     0     1     1     1;
     0     0     0     0     0     0     0     1     1;
     0     0     1     1     1     0     0     1     1;
     0     0     1     1     1     0     0     1     1;
     1     0     0     0     0     0     1     1     1;
     1     0     0     0     0     0     1     1     1;
     0     0     0     0     0     0     0     1     1;
     0     0     1     1     1     0     0     1     1;
     0     0     1     1     1     0     0     1     1;
     1     0     0     0     0     0     1     1     1;
     1     1     0     0     0     1     1     1     1];%数字8
 s(:,:,10)=[1     1     0     0     0     1     1     1     1;
     1     0     0     0     0     0     1     1     1;
     0     0     1     1     1     0     0     1     1;
     0     0     1     1     1     0     0     1     1;
     0     0     1     1     1     0     0     1     1;
     0     0     1     1     1     0     0     1     1;
     1     0     0     0     0     0     0     1     1;
     1     1     0     0     0     0     0     1     1;
     0     1     1     1     1     0     0     1     1;
     0     0     1     1     1     0     0     1     1;
     1     0     0     0     0     0     1     1     1;
     1     1     0     0     0     1     1     1     1];%数字9
 %==========================标准图片建立结束======================

 result=zeros(1,4);%用来存放识别的结果
 I=rgb2gray(d);      %灰度化原始图片
 I(I>140)=255;       %设置阈值,大于140为白色,小于140为白色
 I(I<140)=0;
 %==========================识别数字开始=====================
for m=1:4               %循环读取验证码里面的四个数字
    I1=im2bw(imcrop(I,[-1+m*9 6 8 11]),graythresh(imcrop(I,[-1+m*9 6 8 11])) ); %二值化图片,函数里面包括图片的分割
    t=zeros(1,10);%存放与标准图片比较的各个数字的结果
    for n=1:10  %循环与0到9数字做比较
        T1=I1+s(:,:,n);%与标准相加
        for  i=1:12             %循环遍历各个像素点
            for  j=1:9
                if(T1(i,j)==0)    %等与0表示像素点相等
                 t(1,n)=t(1,n)+1; %存放结果
                end
             end
        end
    end
    [x,y]=max(t);%获取比较结果数组最大值的坐标
    result(1,m)=y-1;%将最接近的数字存在结果数组中
end

imshow(d);%显示原始图片
title({'识别的结果为',result}); %显示结果
hold on 

注意:该网站下载的验证码格式为gif,可转换为jpg识别

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值