Matlab验证码识别

https://gitee.com/chending006/yanzhengmaicon-default.png?t=LA92https://gitee.com/chending006/yanzhengma

一、课题介绍

随着互联网技术的发展和应用,网络在给人们提供丰富资源和极大便利的同时,伴随而来的是互联网系统的安全性问题。而数字验证码的出现证书加强web系统安全性的产物。研究数字验证码的识别显得非常有必要。

本设计基于MATLAB hu不变矩,进行数字验证码的识别,建立一个模板库,采用GUI设计界面,自由读取数字验证码进行识别并且输出0-9这10个数字。

二、GUI界面设计

v2-751d2cb011315579e4c6d4d34edd4027_b.jpg

三、运行截图

v2-9537361163202dbc0844a089b930fac4_b.jpg
四、源码
1、打开图像
file = fullfile(pwd, 'test/下载.jpg');
[Filename, Pathname] = uigetfile({'*.jpg;*.tif;*.png;*.gif','All Image Files';...
    '*.*','All Files' }, '载入验证码图像',...
    file);
if isequal(Filename, 0) || isequal(Pathname, 0)
    return;
end
% 显示图像
axes(handles.axes1); cla reset;
axes(handles.axes2); cla reset;
set(handles.axes1, 'Box', 'on', 'Color', 'c', 'XTickLabel', '', 'YTickLabel', '');
set(handles.axes2, 'Box', 'on', 'Color', 'c', 'XTickLabel', '', 'YTickLabel', '');
set(handles.axes3, 'Box', 'on', 'Color', 'c', 'XTickLabel', '', 'YTickLabel', '');
set(handles.axes4, 'Box', 'on', 'Color', 'c', 'XTickLabel', '', 'YTickLabel', '');
 
%set(handles.text4, 'String', '');
% 存储
fileurl = fullfile(Pathname,Filename);
Img = imread(fileurl);
imshow(Img, [], 'Parent', handles.axes1);
title('原图')

2、去噪
% 颜色空间转换
hsv = rgb2hsv(Img);
h = hsv(:, :, 1);
s = hsv(:, :, 2);
v = hsv(:, :, 3);
 
bw1 = h > 0.16 & h < 0.30;
bw2 = s > 0.65 & s < 0.80;
bw = bw1 & bw2;

3、定位
while s1 < sz(2)
    for i = s1 : sz(2)
        % 移动游标
        s2 = i;
        if cs(s2) < tol && flag == 1
            % 达到起始位置
            flag = 2;
            S1 = [S1 s2-1];
            break;
        elseif cs(s2) >= tol && flag == 2
            % 达到结束位置
            flag = 1;
            E1 = [E1 s2];
            break;
        end
    end
    s1 = s2 + 1;
end

4、分割
% 加入红色边框
Ti = handles.Ti;
It = [];
spcr = ones(size(Ti{1}, 1), 3)*255;
spcg = ones(size(Ti{1}, 1), 3)*0;
spcb = ones(size(Ti{1}, 1), 3)*0;
spc = cat(3, spcr, spcg, spcb);
% 整合到一起
length(Ti)
It = [It spc];
for i = 1 : length(Ti)
    ti = Ti{i};    
    ti = cat(3, ti, ti, ti);   
    ti = im2uint8(mat2gray(ti));
    axes(handles.(sprintf('axes%d', i+4)));
    imshow(ti)
    It = [It ti spc];
    
end
imshow(It, [], 'Parent', handles.axes4); hold on;
5、识别
% 比对识别
fileList = GetAllFiles(fullfile(pwd, 'Databse'));%GetALLFiles.m这个是子函数,到文件夹对应看这个代码
Tj = [];
for i = 1 : length(fileList)%
    filenamei = fileList{i};
    [pathstr, name, ext] = fileparts(filenamei);
    if isequal(ext, '.jpg')
        ti = imread(filenamei);
        ti = im2bw(ti, 0.5);
        ti = double(ti);
        % 提取不变矩特征数据
        phii = invmoments(ti);%invmoments.m
        % 开始比对
        OTj = [];
        for j = 1 : length(Ti)
            tij = double(Ti{j});
            phij = invmoments(tij);
            ad = norm(phii-phij);%不变矩对比做差
            otij.filename = filenamei;
            otij.ad = ad;
            OTj = [OTj otij];
        end
        Tj = [Tj; OTj];
    end
end
% 生成结果
r = [];
for i = 1 : size(Tj, 2)
    ti = Tj(:, i);
    adi = cat(1, ti.ad);
    [minadi, ind] = min(adi);
    filenamei = ti(ind).filename;
    [pathstr, name, ext] = fileparts(filenamei);
    name = name(1);
    r = [r name];
end
set(handles.text11, 'String', r);

  • 1
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你的matlab大师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值