欢迎光临散文网 会员登陆 & 注册

【验证码识别】基于遗传算法优化OUST结合BP神经网络实现数字验证码识别含Matlab源码

2022-04-04 15:24 作者:Matlab工程师  | 我要投稿

1 简介

本项目基于MATLAB完成数字验证码识别的GUI设计,图像处理,验证码生成、识别等功能。采用BP神经网络来实现对验证码图像的识别。验证码的识别,大概分为图片预处理、分割字符、识别字符三个过程,其中分割字符最为困难。本文采用基于遗传算法和最大熵优化的图像分割技术、大津法(OTSU)、自定义阈值三种技术进行字符分割,并作进一步分析。利用英国萨里大学提供的印刷体数字数据集,共10160张图片,90%的数据用于训练BP神经网络,剩余10%的数据用于测试,最终识别准确率达到93.47%,利用训练所得BP模型完成识别字符,最终验证码图像识别效果较佳。

2 部分代码

% 创建数据集% buildataset: 用来创建神经网络适合的训练集function [inputs outputs] = builddataset(pathname,handles)    % 创建数据集    % pathname='D:\课程\计算智能\BP数字验证码\img\';    file = dir(pathname); %除去“.”“..”两个文件夹    file_num = size(file,1)-2;    temp = cat(1,strvcat(file(10).name,file.name));    class = temp(4:13,:);    inputs = [];    outputs = [];    for i = 1:file_num        pathName = [pathname,class(i,:),'\'];        temp_png = dir([pathName,'\*.png']);        temp_imgName = cat(1,strvcat(temp_png(10).name,temp_png.name));        pic_num = size(temp_png,1);        imgName = temp_imgName(2:pic_num+1,:);  %得到文件夹内pic_num张图片的名称        for j = 1:pic_num            I2 = 1 - im2bw(imread([pathName,imgName(j,:)]),0.9); % 转换为二值图像并反转            L= bwlabel(I2,8); %找到图中的连通域,num为连通域数量            imgsize = size(L);            Idx = zeros(1,4);            flag = 0;            for k = 1 : imgsize(1, 1)                if size(find(L(k,:) == 1))==[1 0]                    flag_temp = false;                else                    flag_temp = true;                end                if flag == 0 && flag_temp                    Idx(1,1) = k-1;                    flag = 1;                end                if flag == 1 && ~flag_temp                    Idx(1,2) = k;                    flag = 2;                end                if k == imgsize(1, 1) && flag == 1                    Idx(1,2) = k;                    flag = 2;                end            end            flag = 0;            for k = 1 : imgsize(1, 2)                if size(find(L(:,k) == 1))==[0 1]                    flag_temp = false;                else                    flag_temp = true;                end                if flag == 0 && flag_temp                    Idx(1,3) = k-1;                    flag = 1;                end                if flag == 1 && ~flag_temp                    Idx(1,4) = k;                    flag = 2;                end                if k == imgsize(1, 2) && flag == 1                    Idx(1,4) = k;                    flag = 2;                end            end            for k=1:4                if Idx(1,k) == 0                    Idx(1,k) = 1;                end            end            t = I2(Idx(1,1):Idx(1,2), Idx(1,3):Idx(1,4));            I2 = imresize(t,[32,32]); %缩放至32*32            I2 = im2bw(I2,0.5);            axes(handles.axes1);            if j == 200                j;            end            imshow(I2);            [m n]=size(I2);                        A=reshape(I2',[1 m*n]);   %将I2矩阵变为1行m*n列的矩阵i            inputs=[inputs;A];            B=zeros(1,file_num);            B(1,i) = 1;            outputs = [outputs;B];        end    end    save inputs.mat inputs;    save outputs.mat outputs;    msgbox('数据集创建成功!', '提示');end

3 仿真结果

4 参考文献

[1]王盟. 基于遗传算法优化BP神经网络的手写体字母识别[D]. 河北科技大学, 2016.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。




【验证码识别】基于遗传算法优化OUST结合BP神经网络实现数字验证码识别含Matlab源码的评论 (共 条)

分享到微博请遵守国家法律