matlab?GUI指紋識(shí)別門禁系統(tǒng)介紹及源碼實(shí)現(xiàn)
引言
隨著社會(huì)的發(fā)展,鑰匙、證件、銀行卡以及用戶名密碼等這些鑒定身份的標(biāo)志性物品和標(biāo)識(shí)的安全性越來越弱,很容易被偽造、被盜用、不小心丟失等,給人們帶來了極大的困擾,如何才能更好的保護(hù)個(gè)人信息成為當(dāng)今時(shí)代一個(gè)很重要問題。隨著網(wǎng)絡(luò)和計(jì)算機(jī)應(yīng)用技術(shù)的發(fā)展,人們逐漸將目光轉(zhuǎn)向當(dāng)下的一個(gè)新型識(shí)別熱點(diǎn),即生物特征識(shí)別技術(shù)?,F(xiàn)在應(yīng)用較多的生物特征識(shí)別技術(shù)有人臉識(shí)別、聲音識(shí)別、虹膜識(shí)別以及指紋識(shí)別等等。本設(shè)計(jì)主要研究指紋識(shí)別系統(tǒng)。
指紋識(shí)別技術(shù)相對(duì)于聲音識(shí)別、人臉識(shí)別而言,是一種使用時(shí)間比較久的生物識(shí)別技術(shù)。指紋具有不變性、唯一性、普遍性、可采集性和可儲(chǔ)存性等特性。目前,指紋識(shí)別技術(shù)已經(jīng)被人們應(yīng)用在各大領(lǐng)域之中,除了大眾熟知的刑事偵查外,還有公司企業(yè)指紋打卡考勤系統(tǒng)、住戶安裝指紋門鎖、電腦開機(jī)或手機(jī)屏幕解鎖的身份確認(rèn)等生活的各個(gè)方面。
一、指紋識(shí)別簡介
1 指紋識(shí)別系統(tǒng)的構(gòu)成
指紋識(shí)別系統(tǒng)主要由指紋數(shù)字圖像采集、指紋預(yù)處理、指紋特征提取和匹配這4個(gè)部分組成。首先,通過指紋采集設(shè)備完成指紋圖像的采集;其次,進(jìn)行預(yù)處理操作,把指紋圖像變成一幅清晰的點(diǎn)線圖,進(jìn)而方便提取指紋圖像的特征點(diǎn);最后,將指紋圖像進(jìn)行匹配,判斷這兩者是否來自同一根手指。指紋識(shí)別系統(tǒng)的組成框圖如圖1所示。
圖1 指紋識(shí)別組成框圖
2 指紋識(shí)別系統(tǒng)的實(shí)現(xiàn)
2.1 指紋圖像的采集
較為常用的指紋圖像采集技術(shù)有:(1)光學(xué)指紋采集技術(shù),通過光的全反射采集指紋表層紋理圖像,是最早使用的一種采集技術(shù),性價(jià)比高,使用較多;(2)超聲波掃描,它是利用手指表皮和空氣對(duì)聲波的阻抗之間有差異這一特點(diǎn)進(jìn)行設(shè)計(jì);(3)電容式傳感器,根據(jù)指紋圖像中嵴線和谷線與半導(dǎo)體感應(yīng)顆粒之間形成的電容值大小不同進(jìn)行設(shè)計(jì)。
2.2 指紋圖像的預(yù)處理
對(duì)指紋圖像進(jìn)行預(yù)處理,是為了能夠?qū)⒛:闹讣y圖像經(jīng)過處理之后得到一幅清晰的圖像。指紋圖像的預(yù)處理是指紋識(shí)別系統(tǒng)中后續(xù)特征提取和匹配的基礎(chǔ),其處理結(jié)果更是直接影響指紋識(shí)別的最終效果。對(duì)指紋圖像進(jìn)行預(yù)處理的過程一般分為以下幾部分。
第一,對(duì)指紋圖像進(jìn)行灰度處理和歸一化處理。其中,灰度處理是為了簡化圖像信息,一幅彩色圖像,經(jīng)過灰度處理后只剩下一個(gè)灰度值,去除了彩色信息。對(duì)指紋圖像進(jìn)行歸一化處理的原因是采集到的指紋圖像會(huì)因?yàn)榘磯翰痪仍驅(qū)е聢D像嵴線和谷線變化大,后續(xù)的指紋處理可能發(fā)生錯(cuò)誤。
第二,圖像分割,將目標(biāo)指紋從采集到的指紋圖像中分割出來,也就是指將指紋和背景范圍進(jìn)行分離。如果不進(jìn)行圖像分割,在提取指紋特征信息點(diǎn)時(shí),會(huì)提取到很多沒有用的特征點(diǎn),增加難度,降低了最終匹配的精確度。
第三,對(duì)指紋圖像二值化,將指紋圖像變成只有0和1兩個(gè)像素值的圖像。其中,將指紋圖像中并非是嵴線區(qū)域的像素點(diǎn)全部置為0,嵴線所在部分的像素點(diǎn)全部置為1。
第四,對(duì)指紋圖像進(jìn)行增強(qiáng)處理。要分離粘連的紋線,平滑紋線的邊緣等等,以保證指紋特征提取的可靠性。
第五,進(jìn)行細(xì)化處理,提取指紋圖像中嵴線的框架,突出紋線的有效特征,為后面的特征提取做準(zhǔn)備。
2.3 指紋圖像特征提取
2.3.1指紋圖像特征
指紋數(shù)字圖像的特征分為全局特征和局部特征這兩種,其中局部特征包含端點(diǎn)、分叉點(diǎn)、孤立點(diǎn)等。由于局部特征更能夠分辨出兩個(gè)指紋是否來自同一個(gè)人,因此對(duì)指紋圖像的局部特征進(jìn)行特征點(diǎn)提取。
指紋圖像特征點(diǎn)提取又可分為特征點(diǎn)提取和去除偽特征點(diǎn)兩個(gè)部分。常用的提取特征點(diǎn)的方法有兩種,一種是直接在灰度處理后的指紋圖像中提取所需的特征信息點(diǎn),該方法省略了對(duì)指紋圖像的一系列預(yù)處理操作,此方法需要極為清晰的指紋圖像,在現(xiàn)實(shí)生活中很難有這樣完美的指紋圖像供提取特征點(diǎn),所以很少采用這種方法;另一種則是在經(jīng)過二值細(xì)化后的指紋圖像中提取指紋的特征點(diǎn),雖然前面要經(jīng)過繁瑣的預(yù)處理,但是最終提取到的特征信息點(diǎn)會(huì)比較精確。
從二值化細(xì)化后的圖像中提取特征點(diǎn),具體的方法是:建立一個(gè)3×3的模板,中心的P是待測像素點(diǎn),而P1~P8是待測像素點(diǎn)P的8個(gè)鄰域像素點(diǎn),記Cn§為8個(gè)鄰域像素點(diǎn)的灰度值從0變到1或者是從1變到0的次數(shù),計(jì)算公式下式所示:
式中,P9=P1。
記Sn§為8個(gè)鄰域像素點(diǎn)中灰度值為1的像素點(diǎn)的個(gè)數(shù),計(jì)算公式如下式所示:
通過計(jì)算Cn§和Sn§的大小,來分析像素點(diǎn)P的狀態(tài),一般分為以下幾種情況:(1)如果像素點(diǎn)P是嵴線上的一個(gè)點(diǎn),并根據(jù)計(jì)算出Cn§=2和Sn§=1可知,像素點(diǎn)P是嵴線上的一個(gè)端點(diǎn);(2)如果像素點(diǎn)P是嵴線上的一個(gè)點(diǎn),并根據(jù)計(jì)算出Cn§=4和Sn§=1、2或者4可知,像素點(diǎn)P是嵴線上的一個(gè)連續(xù)點(diǎn);(3)如果像素點(diǎn)P是嵴線上的一個(gè)點(diǎn),并根據(jù)計(jì)算出Cn§=6和Sn§=3可知,像素點(diǎn)P是嵴線上的一個(gè)分叉點(diǎn)。
檢測處理完成一幅二值化細(xì)化后的指紋圖像,并按照上述方法算出所有檢測出的端點(diǎn)和分叉點(diǎn),作為特征點(diǎn)提取的結(jié)果。
2.3.2 指紋圖像去偽
由于設(shè)備采集或者手指本身的原因,使指紋圖像可能存在一些偽特征點(diǎn),比如毛刺、空洞、斷裂、短脊以及假橋等。這些偽特征點(diǎn)會(huì)大大的影響指紋匹配的速率,甚至降低指紋匹配的準(zhǔn)確率,因此在指紋識(shí)別提取特征點(diǎn)的過程中還要對(duì)指紋進(jìn)行去偽操作。
指紋圖像特征信息點(diǎn)去偽采用的方法[9,10]:首先,特征提取,辨別它們是偽特征點(diǎn)還是真的特征點(diǎn);其次,將指紋圖像的細(xì)節(jié)點(diǎn)作為起始點(diǎn),逐步搜索周圍的區(qū)域,并判斷這些特征點(diǎn)的真?zhèn)?,其中分叉點(diǎn)不能和其他分叉點(diǎn)或者端點(diǎn)相連,端點(diǎn)也不能和其他的細(xì)節(jié)點(diǎn)相對(duì);最后,判別特征信息點(diǎn)的真?zhèn)涡灾髮⒅讣y數(shù)字圖像中的所有偽特征點(diǎn)刪除,并保留真特征點(diǎn),每種偽特征信息點(diǎn)的去除都有其相對(duì)應(yīng)的算法。
經(jīng)過對(duì)指紋圖像進(jìn)行特征提取和去偽操作,細(xì)化后的指紋圖像上的偽特征信息點(diǎn)被刪除,提高了圖像的質(zhì)量。
2.4 指紋圖像匹配
指紋匹配是指紋識(shí)別系統(tǒng)的最后一步,該步驟是輸入兩幅需要匹配的指紋數(shù)字圖像,經(jīng)過前面一系列的預(yù)處理和特征點(diǎn)信息提取操作之后進(jìn)行比較,來確定這兩幅指紋圖像是否屬于同一根手指。指紋圖像的匹配算法有以下兩種。
2.4.1 基于點(diǎn)模式的指紋匹配算法
先尋找到指紋圖像的中心點(diǎn),將它標(biāo)記為極坐標(biāo)的原點(diǎn),其次建立極坐標(biāo)系,并選擇特征信息點(diǎn),將其用極坐標(biāo)(r,e)表示,最后用φ表示特征信息點(diǎn)的方向。設(shè)指紋參考方向?yàn)?theta;c,參考點(diǎn)在極坐標(biāo)系中的坐標(biāo)為(r,e),在直角坐標(biāo)系中的坐標(biāo)為(xc,yc),r、e、φ的計(jì)算公式分別如下式所示:
觀察式(3)、式(4)、式(5)可以得出:不管指紋圖像是發(fā)生平移還是旋轉(zhuǎn),指紋的特征點(diǎn)的特征信息都不會(huì)因此有其他變化。雖然在最終匹配的過程中,無法做到非常精確的點(diǎn)對(duì)點(diǎn)的匹配,但是一般而言只要匹配的兩個(gè)點(diǎn)在預(yù)先設(shè)定的閾值內(nèi)就可判定為匹配成功。
2.4.2 基于指紋紋線的匹配算法
該方法是將兩個(gè)指紋圖像放在一起比較,尋找端點(diǎn)和交叉點(diǎn)這兩種特征點(diǎn),并找出最佳匹配點(diǎn)對(duì),根據(jù)匹配到的個(gè)數(shù)來確定是否來自同一根手指。該算法的步驟是先從指紋圖像中提取出一個(gè)特征點(diǎn)Ok,將它用直角坐標(biāo)表示為(xk,yk),用φk表示該特征點(diǎn)所在嵴線的方向角;Ok與指紋圖像中其他任何特征信息點(diǎn)Oi相連,可增加4個(gè)特征向量,即Ok與Oi之間的相對(duì)距離dki、兩特征點(diǎn)之間的嵴線數(shù)量nki、特征點(diǎn)Ok所在嵴線的方向角φk與兩點(diǎn)連線之間的夾角θki和Ok與Oi所在嵴線的方向差φki,可以計(jì)算出新增的特征向量,如式(6)、式(7)、式(8)所示:
如果兩幅待匹配的指紋圖像新增特征向量的幾個(gè)參數(shù)之差小于設(shè)定的誤差,則認(rèn)為指紋匹配成功,反之不成功。
二、部分源代碼
function varargout = zwsb2(varargin) % ZWSB2 M-file for zwsb2.fig % ZWSB2, by itself, creates a new ZWSB2 or raises the existing % singleton*. % % H = ZWSB2 returns the handle to a new ZWSB2 or the handle to % the existing singleton*. % % ZWSB2('CALLBACK',hObject,eventData,handles,...) calls the local % function named CALLBACK in ZWSB2.M with the given input arguments. % % ZWSB2('Property','Value',...) creates a new ZWSB2 or raises the % existing singleton*. Starting from the left, property value pairs are % applied to the GUI before zwsb2_OpeningFcn gets called. An % unrecognized property name or invalid value makes property application % stop. All inputs are passed to zwsb2_OpeningFcn via varargin. % % *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one % instance to run (singleton)". % % See also: GUIDE, GUIDATA, GUIHANDLES % Edit the above text to modify the response to help zwsb2 % Last Modified by GUIDE v2.5 30-Jan-2022 23:28:44 % Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @zwsb2_OpeningFcn, ... 'gui_OutputFcn', @zwsb2_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end % End initialization code - DO NOT EDIT % --- Executes just before zwsb2 is made visible. function zwsb2_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to zwsb2 (see VARARGIN) % Choose default command line output for zwsb2 handles.output = hObject; % Update handles structure guidata(hObject, handles); % UIWAIT makes zwsb2 wait for user response (see UIRESUME) % uiwait(handles.figure1); % --- Outputs from this function are returned to the command line. function varargout = zwsb2_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Get default command line output from handles structure varargout{1} = handles.output; % --- Executes on button press in togglebutton1. function togglebutton1_Callback(hObject, eventdata, handles) % hObject handle to togglebutton1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) clear all; close all; clc; global im1; [filename,pathname]=uigetfile({'*.*';'*.bmp';'*.jpg';'*.tif';'*.jpg'},'選擇圖像一');%uigetfile()函數(shù)的使用 if isequal(filename,0)||isequal(pathname,0) errordlg('您還沒有選取圖片!!','溫馨提示');%如果沒有輸入,則創(chuàng)建錯(cuò)誤對(duì)話框 return; else image=[pathname,filename];%合成路徑+文件名 im1=imread(image);%讀取圖像 end global im2; [filename,pathname]=uigetfile({'*.*';'*.bmp';'*.jpg';'*.tif';'*.jpg'},'選擇圖像二'); if isequal(filename,0)||isequal(pathname,0) errordlg('您還沒有選取圖片!!','溫馨提示');%如果沒有輸入,則創(chuàng)建錯(cuò)誤對(duì)話框 return; else image=[pathname,filename];%合成路徑+文件名 im2=imread(image);%讀取圖像 end f1=double(im1)/255; g1=double(im2)/255; %將圖像轉(zhuǎn)化為double類型 %② 將圖像轉(zhuǎn)換為灰度模式 Img = f1; if ndims(Img) == 3 f2 =rgb2gray(Img); else f2 = Img; end Img = g1; if ndims(Img) == 3 g2 =rgb2gray(Img); else g2 = Img; end %③ 圖像分割 f3 =imgcut(f2); g3 =imgcut(g2); %④ 圖像濾波 f4 = medfilt2 (f3); g4 = medfilt2 (g3); %⑤ 二值化圖像及二值化后處理 f5 = imgbin (f4); g5 = imgbin (g4); %⑥ 圖像細(xì)化 f6 = imgthi (f5); g6 = imgthi (g5); %⑦ 特征點(diǎn)提取 f7 = imgpoi (f6); g7 = imgpoi (g6); %⑧ 指紋特征比對(duì) R = imgcom (f7,g7); %⑨ 計(jì)算兩組樣本特征點(diǎn)的相關(guān)系數(shù)
三、運(yùn)行結(jié)果
四、matlab版本及參考文獻(xiàn)
1 matlab版本
2014a
2 參考文獻(xiàn)
[1] 蔡利梅.MATLAB圖像處理——理論、算法與實(shí)例分析[M].清華大學(xué)出版社,2020.
[2]楊丹,趙海濱,龍哲.MATLAB圖像處理實(shí)例詳解[M].清華大學(xué)出版社,2013.
[3]周品.MATLAB圖像處理與圖形用戶界面設(shè)計(jì)[M].清華大學(xué)出版社,2013.
[4]劉成龍.精通MATLAB圖像處理[M].清華大學(xué)出版社,2015.
[5]劉艷華.基于MATLAB/GUI的指紋識(shí)別系統(tǒng)設(shè)計(jì)[J].信息與電腦(理論版). 2021,33(18)
以上就是matlab GUI指紋識(shí)別門禁系統(tǒng)介紹及源碼實(shí)現(xiàn)的詳細(xì)內(nèi)容,更多關(guān)于matlab GUI指紋識(shí)別門禁系統(tǒng)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C++實(shí)現(xiàn)優(yōu)先隊(duì)列的示例詳解
普通的隊(duì)列是一種先進(jìn)先出的數(shù)據(jù)結(jié)構(gòu),元素在隊(duì)列尾追加,而從隊(duì)列頭刪除。在優(yōu)先隊(duì)列中,元素被賦予優(yōu)先級(jí)。本文將用C++實(shí)現(xiàn)優(yōu)先隊(duì)列,需要的可以參考一下2022-06-06VSCode搭建STM32開發(fā)環(huán)境的實(shí)現(xiàn)步驟
因?yàn)閂SCode免費(fèi)且好用,可以安裝各種插件,本文主要介紹了VSCode搭建STM32開發(fā)環(huán)境的實(shí)現(xiàn)步驟,具有一定的參考價(jià)值,感興趣的可以了解一下2023-12-12C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
這篇文章主要介紹了C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下2017-09-09深入理解數(shù)組指針與指針數(shù)組的區(qū)別
本篇文章是對(duì)數(shù)組指針與指針數(shù)組的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05