vlambda博客
学习文章列表

【验证码识别】基于遗传算法优化OUST结合BP神经网络实现数字验证码识别含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代码问题可私信交流。

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