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

✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。
🍎个人主页:海神之光
🏆代码获取方式:
海神之光Matlab王者学习之路—代码获取方式
⛳️座右铭:行百里者,半于九十。

更多Matlab仿真内容点击👇
Matlab图像处理(进阶版)
路径规划(Matlab)
神经网络预测与分类(Matlab)
优化求解(Matlab)
语音处理(Matlab)
信号处理(Matlab)
车间调度(Matlab)

⛄一、指纹识别简介

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

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

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/GUI的指纹识别系统设计[J].信息与电脑(理论版). 2021,33(18)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

🍅 仿真咨询
1 各类智能优化算法改进及应用

生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化

2 机器学习和深度学习方面
卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断

3 图像处理方面
图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知

4 路径规划方面
旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化

5 无人机应用方面
无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配

6 无线传感器定位及布局方面
传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化

7 信号处理方面
信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化

8 电力系统方面
微电网优化、无功优化、配电网重构、储能配置

9 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长

10 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合

  • 13
    点赞
  • 150
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海神之光

有机会获得赠送范围1份代码

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值