【驗證碼識別】基于遺傳算法優(yōu)化OUST結(jié)合BP神經(jīng)網(wǎng)絡(luò)實現(xiàn)數(shù)字驗證碼識別含Matlab源碼
1 簡介
2 部分代碼
% 創(chuàng)建數(shù)據(jù)集
% buildataset: 用來創(chuàng)建神經(jīng)網(wǎng)絡(luò)適合的訓(xùn)練集
function [inputs outputs] = builddataset(pathname,handles)
? ?% 創(chuàng)建數(shù)據(jù)集
? ?% pathname='D:\課程\計算智能\BP數(shù)字驗證碼\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,:); ?%得到文件夾內(nèi)pic_num張圖片的名稱
? ? ? ?for j = 1:pic_num
? ? ? ? ? ?I2 = 1 - im2bw(imread([pathName,imgName(j,:)]),0.9); % 轉(zhuǎn)換為二值圖像并反轉(zhuǎn)
? ? ? ? ? ?L= bwlabel(I2,8); %找到圖中的連通域,num為連通域數(shù)量
? ? ? ? ? ?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矩陣變?yōu)?行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('數(shù)據(jù)集創(chuàng)建成功!', '提示');
end
3 仿真結(jié)果

4 參考文獻
[1]王盟. 基于遺傳算法優(yōu)化BP神經(jīng)網(wǎng)絡(luò)的手寫體字母識別[D]. 河北科技大學(xué), 2016.
博主簡介:擅長智能優(yōu)化算法、神經(jīng)網(wǎng)絡(luò)預(yù)測、信號處理、元胞自動機、圖像處理、路徑規(guī)劃、無人機等多種領(lǐng)域的Matlab仿真,相關(guān)matlab代碼問題可私信交流。
部分理論引用網(wǎng)絡(luò)文獻,若有侵權(quán)聯(lián)系博主刪除。
