一、課題介紹
隨著網際網路技術的發展和應用,網路在給人們提供豐富資源和極大便利的同時,伴隨而來的是網際網路系統的安全性問題。而數字驗證碼的出現證書加強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 透明度,長這樣 只有數字為內容 每張圖的數字都在固定位置 沒有太大的干擾因素 數字字型,形態完...
驗證碼識別
驗證碼識別過程好比人大腦的乙個識別過程 首先,我們的眼睛接收,並將這張的資訊輸送給大腦 然後,我們的大腦接收到這個資訊以後,對這個資訊作出處理 最後,將中的有效資訊提取出來再將其和大腦中儲存的資訊進行對應對比,確定對比結果。模擬驗證碼識別,大腦接受的處理過程就相當於電腦對的預處理,大腦對進行對比和確...