Matlab驗證碼識別

2021-10-13 13:09:13 字數 3337 閱讀 1459

一、課題介紹

隨著網際網路技術的發展和應用,網路在給人們提供豐富資源和極大便利的同時,伴隨而來的是網際網路系統的安全性問題。而數字驗證碼的出現證書加強web系統安全性的產物。研究數字驗證碼的識別顯得非常有必要。

本設計基於matlab hu不變矩,進行數字驗證碼的識別,建立乙個模板庫,採用gui設計介面,自由讀取數字驗證碼進行識別並且輸出0-9這10個數字。

二、gui介面設計

三、執行截圖

四、原始碼

1、開啟影象

[filename, pathname] = uigetfile(, '載入驗證碼影象',...

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;

endend

s1 = s2 + 1;

end4、分割

% 加入紅色邊框

ti = handles.ti;

it = ;

spcr = ones(size(ti, 1), 3)*255;

spcg = ones(size(ti, 1), 3)*0;

spcb = ones(size(ti, 1), 3)*0;

spc = cat(3, spcr, spcg, spcb);

% 整合到一起

length(ti)

it = [it spc];

for i = 1 : length(ti)

ti = ti;

ti = cat(3, ti, ti, ti);

ti = im2uint8(mat2gray(ti));

axes(handles.(sprintf('axes%d', i+4)));

imshow(ti)

it = [it ti spc];

endimshow(it, , 'parent', handles.axes4); hold on;

5、識別

% 比對識別

filelist = getallfiles(fullfile(pwd, 'databse'));%getallfiles.m這個是子函式,到資料夾對應看這個**

% 提取不變矩特徵資料

phii = invmoments(ti);%invmoments.m

% 開始比對

otj = ;

for j = 1 : length(ti)

tij = double(ti);

phij = invmoments(tij);

ad = norm(phii-phij);%不變矩對比做差

otij.filename = filenamei;

otij.ad = ad;

otj = [otj otij];

endtj = [tj; otj];

endend% 生成結果

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];

endset(handles.text11, 'string', r);

簡單驗證碼識別 matlab

驗證碼識別,matlab 我看了看這些樣本,發現都是很規則的印刷體數字,而且還沒有角度旋轉,所以我就直接使用數字的面積和周長兩個特徵量來進行檢測,發現效果還是蠻不錯的。在實驗中,主要問題是 6 和 9 兩個數字的面積和周長都是完全一樣的,所以這時候我又新增了乙個重心的特徵。有些蛋疼的是數字 4 和 ...

驗證碼 簡單驗證碼識別

這裡的驗證碼是內容非常簡單的,結構非常清晰的 這裡的驗證碼是內容非常簡單的,結構非常清晰的 這裡的驗證碼是內容非常簡單的,結構非常清晰的 興之所至之所以說簡單,我覺得是這樣的 抽了五張驗證碼扔進ps,50 透明度,長這樣 只有數字為內容 每張圖的數字都在固定位置 沒有太大的干擾因素 數字字型,形態完...

驗證碼識別

驗證碼識別過程好比人大腦的乙個識別過程 首先,我們的眼睛接收,並將這張的資訊輸送給大腦 然後,我們的大腦接收到這個資訊以後,對這個資訊作出處理 最後,將中的有效資訊提取出來再將其和大腦中儲存的資訊進行對應對比,確定對比結果。模擬驗證碼識別,大腦接受的處理過程就相當於電腦對的預處理,大腦對進行對比和確...