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

来源:互联网 发布:虚拟视频软件电脑 编辑:程序博客网 时间:2024/05/17 13:39

之前同样的验证码用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];%数字0s(:,:,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;%将最接近的数字存在结果数组中endimshow(d);%显示原始图片title({'识别的结果为',result}); %显示结果hold on 

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