matlab GUI指纹识别门禁系统介绍及源码实现

目录
  • 引言
  • 一、指纹识别简介
    • 1 指纹识别系统的构成
    • 2 指纹识别系统的实现
      • 2.1 指纹图像的采集
      • 2.2 指纹图像的预处理
      • 2.3 指纹图像特征提取
      • 2.4 指纹图像匹配
  • 二、部分源代码
  • 三、运行结果
  • 四、matlab版本及参考文献

引言

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

指纹识别技术相对于声音识别、人脸识别而言,是一种使用时间比较久的生物识别技术。指纹具有不变性、唯一性、普遍性、可采集性和可储存性等特性。目前,指纹识别技术已经被人们应用在各大领域之中,除了大众熟知的刑事侦查外,还有公司企业指纹打卡考勤系统、住户安装指纹门锁、电脑开机或手机屏幕解锁的身份确认等生活的各个方面。

一、指纹识别简介

1 指纹识别系统的构成

指纹识别系统主要由指纹数字图像采集、指纹预处理、指纹特征提取和匹配这4个部分组成。首先,通过指纹采集设备完成指纹图像的采集;其次,进行预处理操作,把指纹图像变成一幅清晰的点线图,进而方便提取指纹图像的特征点;最后,将指纹图像进行匹配,判断这两者是否来自同一根手指。指纹识别系统的组成框图如图1所示。

图1 指纹识别组成框图

2 指纹识别系统的实现

2.1 指纹图像的采集

较为常用的指纹图像采集技术有:(1)光学指纹采集技术,通过光的全反射采集指纹表层纹理图像,是最早使用的一种采集技术,性价比高,使用较多;(2)超声波扫描,它是利用手指表皮和空气对声波的阻抗之间有差异这一特点进行设计;(3)电容式传感器,根据指纹图像中嵴线和谷线与半导体感应颗粒之间形成的电容值大小不同进行设计。

2.2 指纹图像的预处理

对指纹图像进行预处理,是为了能够将模糊的指纹图像经过处理之后得到一幅清晰的图像。指纹图像的预处理是指纹识别系统中后续特征提取和匹配的基础,其处理结果更是直接影响指纹识别的最终效果。对指纹图像进行预处理的过程一般分为以下几部分。

第一,对指纹图像进行灰度处理和归一化处理。其中,灰度处理是为了简化图像信息,一幅彩色图像,经过灰度处理后只剩下一个灰度值,去除了彩色信息。对指纹图像进行归一化处理的原因是采集到的指纹图像会因为按压不均等原因导致图像嵴线和谷线变化大,后续的指纹处理可能发生错误。

第二,图像分割,将目标指纹从采集到的指纹图像中分割出来,也就是指将指纹和背景范围进行分离。如果不进行图像分割,在提取指纹特征信息点时,会提取到很多没有用的特征点,增加难度,降低了最终匹配的精确度。

第三,对指纹图像二值化,将指纹图像变成只有0和1两个像素值的图像。其中,将指纹图像中并非是嵴线区域的像素点全部置为0,嵴线所在部分的像素点全部置为1。

第四,对指纹图像进行增强处理。要分离粘连的纹线,平滑纹线的边缘等等,以保证指纹特征提取的可靠性。

第五,进行细化处理,提取指纹图像中嵴线的框架,突出纹线的有效特征,为后面的特征提取做准备。

2.3 指纹图像特征提取

2.3.1指纹图像特征

指纹数字图像的特征分为全局特征和局部特征这两种,其中局部特征包含端点、分叉点、孤立点等。由于局部特征更能够分辨出两个指纹是否来自同一个人,因此对指纹图像的局部特征进行特征点提取。

指纹图像特征点提取又可分为特征点提取和去除伪特征点两个部分。常用的提取特征点的方法有两种,一种是直接在灰度处理后的指纹图像中提取所需的特征信息点,该方法省略了对指纹图像的一系列预处理操作,此方法需要极为清晰的指纹图像,在现实生活中很难有这样完美的指纹图像供提取特征点,所以很少采用这种方法;另一种则是在经过二值细化后的指纹图像中提取指纹的特征点,虽然前面要经过繁琐的预处理,但是最终提取到的特征信息点会比较精确。

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

式中,P9=P1。

记Sn§为8个邻域像素点中灰度值为1的像素点的个数,计算公式如下式所示:

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

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

2.3.2 指纹图像去伪

由于设备采集或者手指本身的原因,使指纹图像可能存在一些伪特征点,比如毛刺、空洞、断裂、短脊以及假桥等。这些伪特征点会大大的影响指纹匹配的速率,甚至降低指纹匹配的准确率,因此在指纹识别提取特征点的过程中还要对指纹进行去伪操作。

指纹图像特征信息点去伪采用的方法[9,10]:首先,特征提取,辨别它们是伪特征点还是真的特征点;其次,将指纹图像的细节点作为起始点,逐步搜索周围的区域,并判断这些特征点的真伪,其中分叉点不能和其他分叉点或者端点相连,端点也不能和其他的细节点相对;最后,判别特征信息点的真伪性之后将指纹数字图像中的所有伪特征点删除,并保留真特征点,每种伪特征信息点的去除都有其相对应的算法。

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

2.4 指纹图像匹配

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

2.4.1 基于点模式的指纹匹配算法

先寻找到指纹图像的中心点,将它标记为极坐标的原点,其次建立极坐标系,并选择特征信息点,将其用极坐标(r,e)表示,最后用φ表示特征信息点的方向。设指纹参考方向为θc,参考点在极坐标系中的坐标为(r,e),在直角坐标系中的坐标为(xc,yc),r、e、φ的计算公式分别如下式所示:

观察式(3)、式(4)、式(5)可以得出:不管指纹图像是发生平移还是旋转,指纹的特征点的特征信息都不会因此有其他变化。虽然在最终匹配的过程中,无法做到非常精确的点对点的匹配,但是一般而言只要匹配的两个点在预先设定的阈值内就可判定为匹配成功。

2.4.2 基于指纹纹线的匹配算法

该方法是将两个指纹图像放在一起比较,寻找端点和交叉点这两种特征点,并找出最佳匹配点对,根据匹配到的个数来确定是否来自同一根手指。该算法的步骤是先从指纹图像中提取出一个特征点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版本及参考文献

1 matlab版本
2014a

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

以上就是matlab GUI指纹识别门禁系统介绍及源码实现的详细内容,更多关于matlab GUI指纹识别门禁系统的资料请关注我们其它相关文章!

(0)

相关推荐

  • 基于Matlab实现BP神经网络交通标志识别

    目录 一.BP神经网络交通标志识别简介 二.部分源代码 三.运行结果 一.BP神经网络交通标志识别简介 道路交通标志用以禁止.警告.指示和限制道路使用者有秩序地使用道路, 保障出行安全.若能自动识别道路交通标志, 则将极大减少道路交通事故的发生.但是由于道路交通错综复杂, 且智能识别技术尚未成熟, 为了得到高效实用的道路标志识别系统, 仍需进行大量的研究.限速交通标志的检测识别作为道路交通标志识别系统的一个重要组成部分, 对它的研究具有非常重要的意义. 目前国内已有不少学者针对道路交通标志牌的智

  • 实例详解Matlab 与 Python 的区别

    一.Python简介 Python是一种面向对象的解释型计算机程序设计语言.Python是纯粹的自由软件, 源代码和解释器CPython遵循 GPL(GNU General Public License)协议[2] .Python语法简洁清晰,特色之一是强制用空白符(white space)作为语句缩进. Python执行: Python在执行时,首先会将.py文件中的源代码编译成Python的byte code(字节码),然后再由Python Virtual Machine(Python虚拟机

  • 利用Matlab提取图片曲线

    目录 行文动机 图像的读入与裁剪 颜色拾取 颜色转换与色差计算 分离曲线 二值化,提取数据 数据点分类与排序 后话 利用 MATLAB 提取图片曲线 给你一张图片,如何提取里面曲线的数据,从而利用这些数据进行图像重绘.加工处理.测距.拟合得到函数表达式等操作呢? 行文动机 前段时间,有个朋友问了我一个问题,大概意思就是要给图像的流线测距离,在我的印象里面,MATLAB 是似乎没有这种直接的功能的. 那么换个角度来理解一下这个问题,如果给你一张图像,如何提取里面点的数据?其实,有了曲线的数据,后面

  • Matlab实现数据的动态显示方法

    对于真实系统或者仿真平台,数据是增量式的产生的.Matlab除了强大的矩阵运算外,还具有强大的数据可视化库.由于静态画图的方法较多,本文只针对增量式数据流的动态显示.本文主要介绍几种Matlab实现数据的动态显示方法.方法主要有两种: hold on set函数与drawnow函数组合 hold on 方法 1. 方法介绍 此种方法比较原始,适合于即时数据,原理是先画上一帧,接着保留原始图像,追加下一幀图像,此种方式比较繁琐,涉及画图细节,并且没有完整并连续的Line对象数据.此种方法需要注意的

  • matlab GUI指纹识别门禁系统介绍及源码实现

    目录 引言 一.指纹识别简介 1 指纹识别系统的构成 2 指纹识别系统的实现 2.1 指纹图像的采集 2.2 指纹图像的预处理 2.3 指纹图像特征提取 2.4 指纹图像匹配 二.部分源代码 三.运行结果 四.matlab版本及参考文献 引言 随着社会的发展,钥匙.证件.银行卡以及用户名密码等这些鉴定身份的标志性物品和标识的安全性越来越弱,很容易被伪造.被盗用.不小心丢失等,给人们带来了极大的困扰,如何才能更好的保护个人信息成为当今时代一个很重要问题.随着网络和计算机应用技术的发展,人们逐渐将目

  • python opencv人脸识别考勤系统的完整源码

    如需安装运行环境或远程调试,可加QQ905733049, 或QQ2945218359由专业技术人员远程协助! 运行结果如下: 代码如下: import wx import wx.grid from time import localtime,strftime import os import io import zlib import dlib # 人脸识别的库dlib import numpy as np # 数据处理的库numpy import cv2 # 图像处理的库OpenCv impo

  • matlab遗传算法求解车间调度问题分析及实现源码

    目录 一.车间调度简介 1 车间调度定义 2 传统作业车间调度 二.遗传算法简介 1 遗传算法概述 2 遗传算法的特点和应用 3 遗传算法的基本流程及实现技术 3.1 遗传算法的基本流程 3.2 遗传算法的实现技术 4 遗传算法的基本原理 4.1 模式定理 4.2 积木块假设 三.部分源代码 四.运行结果 五.matlab版本及参考文献 一.车间调度简介 1 车间调度定义 车间调度是指根据产品制造的合理需求分配加工车间顺序,从而达到合理利用产品制造资源.提高企业经济效益的目的.车间调度问题从数学

  • Android 6.0指纹识别App开发案例

    在android 6.0中google终于给android系统加上了指纹识别的支持,这个功能在iPhone上早就已经实现了,并且在很多厂商的定制的ROM中也都自己内部实现这个功能了,这个功能来的有点晚啊.在google全新发布的nexus设备:nexus 5x和nexus 6p中都携带了一颗指纹识别芯片在设备的背面,如下图(图片来自网络): 笔者手中的设备就是图上的那台黑色的nexus 5x,话说这台机器很是好看呢!手感超棒! 废话不多说,下面我出一个指纹识别的demo app,并且详细说明怎么

  • java门禁系统面向对象程序设计

    本文为大家分享了java门禁系统面向对象程序设计,供大家参考,具体内容如下 下面是对门禁系统的介绍: 需求 1.某公司安装了电子门,要设计门禁系统: 2.公司的雇员可以凭借密码.胸卡或指纹进入公司 3.计算机根据雇员的验证方式对其身份进行验证 4.管理员在监控室可以通过按钮直接开启电子门 5.访客可以按门铃请求进入,由管理员为其放行 下面请看代码 /** * 门禁系统 */ package Liu; import java.util.*; import org.apache.log4j.Logg

  • java实现门禁系统

    本文实例为大家分享了java实现门禁系统的具体代码,供大家参考,具体内容如下 Door.java package com.handson.sys; public class Door { public final static String OPEN = "门已开启"; public final static String CLOSE = "门已关闭"; private String state = CLOSE; // 电子门状态 private boolean b

  • iOS中指纹识别常见问题汇总

    最近公司的 app 要使用指纹支付了;总体来说还是蛮顺利的;但是中间有遇到一些坑;下面就对坑进行汇总; 一.基本知识 点开这个LocalAuthentication.framework,发现里面主要有这么几个东西 LocalAuthentication.framework - LAContext.h - LAError.h - LAPublicDefines.h - LocalAuthentication.h LocalAuthentication.h 这个没什么可讲的吧,代码就两行,一行导入L

  • IOS 指纹识别两种方式详解及实例

    IOS 指纹识别两种方式详解及实例 首先引入类名: #import <LocalAuthentication/LocalAuthentication.h> 然后在实现指纹识别的地方放入如下代码: 方式一: LAContext *lacontext = [[LAContext alloc]init]; // 判断设备是否支持指纹识别 BOOL isSupport = [lacontext canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWit

  • iOS中应用内添加指纹识别的实例代码

    iOS8之后苹果发布了指纹识别的功能,通过touch ID来识别用户,做用户授权,主要是依赖于LocalAuthentication库 指纹识别:一判断设备是否支持指纹识别功能 二识别指纹,成功后做相应的动作,失败后提醒用户指纹识别失败 先引入#import <LocalAuthentication/LocalAuthentication.h> LAContext *context = [[LAContext alloc] init]; NSError *error = nil; //验证是否

  • IOS 指纹识别详解及实例代码

    IOS 指纹识别,这里整理下项目中用的知识. IOS 指纹识别现在,在要求安全与效率兼得的时候,普通密码已不能满足我们的要求,指纹识别就这样诞生了. 每个人都有自己专属的指纹,在需要支付等输入密码的地方,我们只需轻轻一按即可,避免了输入密码的繁琐步骤,更加安全,而且妈妈再也不用担心我们忘记密码. 其实,听着高大上,实现起来特别简单,因为苹果已经帮我们封装好了,我们只需要简单的调用就好了. 1.首先,我们需要导入头文件: #import <LocalAuthentication/LocalAuth

随机推荐