1 简介
随着近些年来互联网技术的飞速发展,网络安全逐渐进入公众视野,并成为人们日常生活所关心的一部分。验证码的使用也随之普及开来。验证码的英文为CAPTCHA,主要是被人们开发出来用于区分机器自动程序与人类用户的差异性。自从互联网以来,人们因为疯狂地追逐利润而滥用网络资源,进而导致自动化软件(有时称为机器人)的产生。为了抵御恶意机器人程序,防止论坛、博客中的垃圾评论,过滤垃圾邮件,保证在线投票真实性以及防止恶意批量注册网站等等,验证码应运而生。现如今,验证码在全球超过 350 万的各大网站论坛随处可见,人们日常处理的验证码数量多达 300 万次以上。由此可见,验证码识别技术的研究有益于验证现如今各种验证码的安全,帮助设计更可靠安全的验证码。不仅如此,验证码识别结合了图像处理、模式识别等多个领域的研究,对于促进各个领域的技术研究具有重要意义。
2 部分代码
[filename pathname] =uigetfile({'*.png';'*.*'},'打开图片');
str=[pathname filename];
S=imread(str);
try
S=rgb2gray(S);
end
S=imadjust(S);
if(mean(mean(S))>125)
S=255-S;
end
S=im2bw(S,0.5);
[l w]=size(S);
S=[zeros(l,1) S zeros(l,1)];
S=[zeros(1,w+2);S;zeros(1,w+2)];
figure(1)
imshow(S)
V=[1 1 1 1 1 1 1 1 1];
S=imerode(S,V);
S=imdilate(S,V);
figure(2)
imshow(S)
[l w]=size(S);
ih=zeros(1,w);
for i=1:w
if max(S(:,i))>0
ih(i)=1;
end
end
ms=zeros(1,w);
for i=1:w
if i~=w
ms(i)=ih(i)-ih(i+1);
end
end
pos=[];
for i=1:w
if ms(i)~=0
pos=[pos i];
end
end
count=length(pos)/2;
alpha=cell(1,count);
for i=1:count
alpha{i}=S(:,pos(2*i-1):pos(2*i));
[L W]=size(alpha{i});
ih=zeros(1,L);
for j=1:L
if max(alpha{i}(j,:))>0
ih(j)=1;
end
end
ms=zeros(1,L);
for j=1:L
if j~=L
ms(j)=ih(j)-ih(j+1);
end
end
poss=[];
for j=1:L
if ms(j)~=0
poss=[poss j];
end
end
alpha{i}=alpha{i}(poss(1):poss(length(poss)),:);
%%alpha{i}=imresize(alpha{i},[30 30]);
end
figure(3)
for i=1:length(alpha)
subplot(1,length(alpha),i)
imshow(alpha{i})
end
3 仿真结果
4 参考文献
[1]张良文. 联机手写英文单词识别技术的研究与实现. Diss. 南开大学, 2011.
部分理论引用网络文献,若有侵权联系博主删除。
5 MATLAB代码与数据下载地址
见博客主页