资讯详情

【指纹识别】基于matlab GUI指纹识别门禁系统【含Matlab源码 1692期】

一、指纹识别简介

随着社会的发展,钥匙、证件、银行卡以及用户名密码等这些鉴定身份的标志性物品和标识的安全性越来越弱,很容易被伪造、被盗用、不小心丢失等,给人们带来了极大的困扰,如何才能更好的保护个人信息成为当今时代一个很重要问题。随着网络和计算机应用技术的发展,人们逐渐将注意力转向了一个新的识别热点,即生物特征识别技术。目前,人脸识别、声音识别、虹膜识别、指纹识别等生物特征识别技术应用广泛。本设计主要研究指纹识别系统。

与声音识别和人脸识别相比,指纹识别技术是一种长期使用的生物识别技术。指纹具有不变性、独特性、普遍性、可采集性和可储存性。目前,指纹识别技术已应用于各个领域。除了众所周知的刑事调查外,还有企业指纹打卡考勤系统、居民指纹门安装、计算机启动或手机屏幕解锁身份确认等生活方面。

指纹识别系统主要由四个部分组成:指纹数字图像采集、指纹预处理、指纹特征提取和匹配。一是通过指纹采集设备完成指纹图像采集;二是预处理,将指纹图像变成清晰的点线图,便于提取指纹图像的特征;最后,匹配指纹图像,判断两者是否来自同一个手指。指纹识别系统的组成框图如图1所示。 在这里插入图片描述 图1 框图由指纹识别组成

更常用的指纹图像采集技术包括:(1)光学指纹采集技术,通过光的全反射采集指纹表面纹理图像,是最早的采集技术,成本效益高,使用更多;(2)超声扫描,采用手指表皮和空气阻抗的特点;(3)电容式传感器,在指纹图像中,设计了由脊线和谷线和半导体感应颗粒形成的电容值。

预处理指纹图像是为了在处理模糊的指纹图像后获得清晰的图像。指纹图像的预处理是指纹识别系统的基础,其处理结果直接影响指纹识别的最终效果。指纹图像的预处理过程一般分为以下部分。

首先,对指纹图像进行灰度处理和一体化处理。其中,灰度处理是为了简化图像信息一个彩色图像,灰度处理后只剩下一个灰度值,去除彩色信息。指纹图像集成的原因是,由于按压不均匀,收集到的指纹图像会导致图像的脊线和谷线发生很大变化,后续的指纹处理可能会出现错误。

二是图像分割,从收集到的指纹图像中分割目标指纹,即将指纹与背景范围分离。如果没有图像分割,在提取指纹特征信息点时,会提取许多无用的特征点,增加难度,降低最终匹配的准确性。

第三,对指纹图像进行二值化,将指纹图像变成只有0和1两个像素值的图像。其中,并非所有的像素点都放在指纹图像的0,而是所有的像素点都放在1。

第四,增强指纹图像。为保证指纹特征提取的可靠性,应分离粘连线、光滑线的边缘等。

第五,细化指纹图像中的脊线框架,突出线条的有效特征,为以下特征提取做准备。

指纹数字图像的特征分为整体特征和局部特征,其中局部特征包括端点、分叉点、孤立点等。由于局部特征可以更好地区分两个指纹是否来自同一以提取指纹图像的局部特征。

提取指纹图像特征可分为两部分:提取特征和去除伪特征。有两种常用的提取特征点的方法。一种是直接从灰度处理后的指纹图像中提取所需的特征信息点。该方法省略了指纹图像的一系列预处理操作。这种方法需要非常清晰的指纹图像。在现实生活中,很难有如此完美的指纹图像来提取特征点,因此很少使用这种方法;另一种是细化后的指纹图像中提取指纹特征点,虽然前面需要复杂的预处理,但最终提取的特征信息点会更准确。

从二值化细化后的图像中提取特征点,具体的方法是:建立一个3×3模板,中心P是待测像素点,P1~P8是8个等待测像素P的邻域像素点Cn§为8个邻域像素点的灰度值从0变到1或者是从1变到0的次数,计算公式下式所示: 式中,P9=P1。

记Sn§计算公式如下: 通过计算Cn§和Sn§为了分析像素点P的状态,一般分为以下几种情况:(1)如果像素点P是脊线上的一个点,并根据计算Cn§=2和Sn§=1以看出,像素点P是脊线上的一个端点;(2)如果像素点P是脊线上的一个点,并根据计算计算Cn§=4和Sn§=1、2或4可知,像素点P是脊线上的连续点;(3)如果像素点P是脊线上的一个点,并按计算Cn§=6和Sn§=可以看出,像素点P是脊线上的一个分叉点。

检测处理完成二值细化后的指纹图像,并按上述方法计算出所有检测到的端点和分叉点,作为特征点提取的结果。

由于设备收集或手指本身,指纹图像可能有一些伪特征点,如毛刺、空洞、断裂、短脊柱和假桥。这些伪特征点将极大地影响指纹匹配的速度,甚至降低指纹匹配的准确性,因此在指纹识别和提取特征点的过程中。

指纹图像特征信息点采用[9,10]:首先,特征提取,区分它们是伪特征点还是真实特征点;其次,以指纹图像的细节点为起点,逐步搜索周围区域,判断这些特征点的真实性,分叉点不能与其他分叉点或端点连接,端点不能与其他细节点相对;最后,在确定特征信息点的真实性后,删除指纹数字图像中的所有虚假特征点,并保留真实特征点。每个虚假特征信息点的删除都有相应的算法。

对指纹图像进行特征提取和去伪操作后,删除指纹图像上的伪特征信息点,提高图像质量。

指纹匹配是指纹识别系统的最后一步。该步骤是输入两个需要匹配的指纹数字图像,并在前一系列预处理和特征信息提取后进行比较,以确定这两个指纹图像是否属于同一个手指。指纹图像有以下两种匹配算法。

首先找到指纹图像的中心点,标记为极坐标的原点,然后建立极坐标系,选择特征信息点,使用极坐标(r,e)表示,最后用φ表示特征信息点的方向。指纹参考方向为θc,极坐标系中参考点的坐标为(r,e),直角坐标系中的坐标是(xc,yc),r、e、φ计算公式如下: 观察(3)、类型(4)、类型(5)可以得出结论:无论指纹图像是平移还是旋转,指纹特征点的特征信息都不会发生其他变化。虽然在最终匹配过程中不能实现非常准确的点对点匹配,但一般来说,只要匹配的两个点在预设阈值内确定为匹配成功。

该方法是将两个指纹图像放在一起进行比较,找到端点和交叉点点,并根据匹配的数量确定是否来自同一个手指。该算法的步骤是从指纹图像中提取特征Ok,用直角坐标表示(xk,yk),用φk表示脊线的方向角;Ok指纹图像中的其他特征信息点Oi连接,可增加4个特征向量,即Ok与Oi相对距离dki、两个特征点之间的数量nki、特征点Ok脊线的方向角φk夹角与两点连接θki和Ok与Oi脊线方向差φki,可计算出新的特征向量,如公式(6)、公式(7)、公式(8)所示: 如果两个要匹配的指纹图像之差小于设定的误差,则认为指纹匹配成功,反之亦然。

二、部分源代码

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()函数的使用
if isequal(filename,0)||isequal(pathname,0)
  errordlg('您还没有选取图片!!','温馨提示');%如果没有输入,则创建错误对话框 
  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('您还没有选取图片!!','温馨提示');%如果没有输入,则创建错误对话框 
  return;
else
    image=[pathname,filename];%合成路径+文件名
    im2=imread(image);%读取图像
    
end
f1=double(im1)/255; 
g1=double(im2)/255; %将图像转化为double类型
%② 将图像转换为灰度模式 
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);
%⑥ 图像细化
f6 = imgthi (f5);
g6 = imgthi (g5);
%⑦ 特征点提取
f7 = imgpoi (f6);
g7 = imgpoi (g6);
%⑧ 指纹特征比对 
R = imgcom (f7,g7);
%⑨ 计算两组样本特征点的相关系数


三、运行结果

四、matlab版本及参考文献

2014a

[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020. [2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013. [3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013. [4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015. [5]刘艳华.基于MATLAB/GUI的指纹识别系统设计[J].信息与电脑(理论版). 2021,33(18)

标签: 阻抗式颗粒传感器ki5030电容式传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台