指纹识别_指纹识别代码 - CSDN
指纹识别 订阅
指纹识别是将识别对象的指纹进行分类比对从而进行判别。指纹识别技术作为生物体特征识别技术之一在新世纪逐渐成熟,进入了人类的生产生活领域。 [1] 展开全文
指纹识别是将识别对象的指纹进行分类比对从而进行判别。指纹识别技术作为生物体特征识别技术之一在新世纪逐渐成熟,进入了人类的生产生活领域。 [1]
信息
外文名
fingerprint identification
所属类别
生物特征识别技术
原    理
比较不同指纹的细节特征点
中文名
指纹识别
主要应用
计算机中的应用、智能手机领域
指纹识别指纹简介
指纹是人类手指末端由凹凸的皮肤所形成的纹路,在人类出生之前指纹就已经形成并且随着个体的成长指纹的形状不会发生改变,只是明显程度的变化,而且每个人的指纹都是不同的,在众多细节描述 中能进行良好的区分,指纹纹路有三种基本的形状:斗型(whorl)、 弓型(arch)和箕型(loop)。在指纹中有许多特征点,特征点提供了指纹唯一性的确认信息,这是进行指纹识别的基础,分为总体特征和局部特征,总体特征又包括了核心点(位于指纹纹路的渐进中心)、 三角点(位于从核心点开始的第一个分叉点或者断点,或者两条纹路会聚处、孤立点、折转处,或者指向这些奇异点)、纹数(指纹纹路的数量);局部特征是指纹的细节特征,在特征点处的方向、曲率、 节点的位置,这都是区分不同指纹的重要指标。 [1]  特征点指纹,英文名称为fingerprint,两枚指纹经常会具有相同的总体特征,但它们的细节特征,却不可能完全相同。指纹纹路并不是连续的、平滑笔直的,而是经常出现中断、分叉或转折。这些断点、分叉点和转折点就称为"特征点"。特征点提供了指纹唯一性的确认信息,其中最典型的是终结点和分叉点,其他还包括分歧点、孤立点、环点、短纹等。特征点的参数包括方向(节点可以朝着一定的方向)、曲率(描述纹路方向改变的速度)、位置(节点的位置通过x/y坐标来描述,可以是绝对的,也可以是相对于三角点或特征点的)。总体特征总体特征是指那些用人眼直接就可以观察到的特征。包括纹形、模式区、核心点、三角点和纹数等。纹形,指纹专家在长期实践的基础上,根据脊线的走向与分布情况一般将指纹分为三大类——环型(loop,又称斗形)、弓形(arch)、螺旋形(whorl)。模式区即指纹上包括了总体特征的区域,从此区域就能够分辨出指纹是属于哪一种类型的。有的指纹识别算法只使用模式区的数据,有的则使用所取得的完整指纹。核心点位于指纹纹路的渐进中心,它在读取指纹和比对指纹时作为参考点。许多算法是基于核心点的,即只能处理和识别具有核心点的指纹。三角点位于从核心点开始的第一个分叉点或者断点,或者两条纹路会聚处、孤立点、折转处,或者指向这些奇异点。三角点提供了指纹纹路的计数跟踪的开始之处。纹数,即模式区内指纹纹路的数量。在计算指纹的纹路时,一般先连接核心点和三角点,这条连线与指纹纹路相交的数量即可认为是指纹的纹数。局部特征局部特征指纹节点的特征。指纹的纹路并不是连续、平滑笔直的,经常会出现分叉、折转或中断。这些交叉点、折转点或断点称为"特征点",它们提供了指纹唯一性的确认信息。特征点的主要参数包括:方向:相对于核心点,特征点所处的方向。曲率:纹路方向改变的速度。位置:节点的位置坐标,通过x/y坐标来描述。它可以是绝对坐标,也可以是与三角点(或特征点)的相对坐标。
收起全文
精华内容
参与话题
  • 【模式识别】Matlab指纹识别

    千次阅读 2020-02-06 14:41:37
    指纹识别技术主要分三个步骤:指纹预处理、特征提取、指纹分类与匹配。 无论是指纹分类还是指纹匹配,都需要提取指纹的有效特征,而特征提取的性能很大程度上要依赖于指纹图像的质量。在实际应用中,由于采集条件和...

    指纹识别技术主要分三个步骤:指纹预处理、特征提取、指纹分类与匹配。

    无论是指纹分类还是指纹匹配,都需要提取指纹的有效特征,而特征提取的性能很大程度上要依赖于指纹图像的质量。在实际应用中,由于采集条件和采集设备的因素,采集到的指纹图像质量比较差,容易导致很多问题,影响后续处理的效果。因此,指纹图像的预处理是关系到指纹识别系统性能好坏的一个关键。

    预处理主要分以下四个步骤:

    1. 指纹图像灰度归一化和均衡化

      归一化的目的,在于消除指纹采集过程中由于传感器自身的噪声以及因为手指压力不同而造成的灰度差异,将指纹图像的对比度和灰度调整到一个固定的级别上,为后续处理提供一个较为统一的图像规格。均衡化是对图像中像素个数多的灰度级进行展宽,对像素个数少的灰度级进行缩减。

    2. 指纹图像分割

      其目标就是根据特征提取的需要,把指纹图像中质量很差、在后续处理中很难恢复的图像区域与有效区域分开,使后续处理能够集中在有效区域;能提高特征提取的精确度;能大大减少指纹预处理的时间。

    3. 指纹图像二值化

      二值化的目的是把灰度指纹图像变成0、1取值的二值图像

    4. 二值化后处理及细化

      由于灰度滤波的不完全性,而且在二值化过程中有时会引入新的噪声,需要对图像进行滤波处理。采用加权中值滤波的方法,根据前景点的不同方向选用不同的权值模板进行滤波,以便于消除纹线上的孔洞和缺口。二值化后的纹线仍然有一定宽度,需要细化为单个像素宽度的骨架。细化算法很多,这里采用骨架提取技术。

      废话不多说,贴代码和效果。

     

    clc;

    close all;

    global immagine n_bands h_bands n_arcs h_radius h_lato n_sectors matrice num_disk

    %immagine 双精度类型的灰度图

    n_bands=4;

    h_bands=20;

    n_arcs=16;

    h_radius=12;

    h_lato=h_radius+(n_bands*h_bands*2)+16;

    if mod(h_lato,2)==0

        h_lato=h_lato-1;

    end

    n_sectors=n_bands*n_arcs;%多少行数据量

    matrice=zeros(h_lato);

    for ii=1:(h_lato*h_lato)

        matrice(ii)=whichsector(ii);

    end

    num_disk=8;%8个方向

    % 1--> add database

    % 0--> recognition

    % ok=0;

    chos=0;

    possibility=6;%有6个菜单,分别为'选择图像并加入数据库','指纹识别','删除数据库','可视化指纹图像','可视化Gabor滤波','退出'

     

    messaggio='Insert the number of set: each set determins a class. This set should include a number of images for each person, with some variations in expression and in the lighting.';

     

    while chos~=possibility,

        chos=menu('指纹识别系统','选择图像并加入数据库','指纹识别','删除数据库','可视化指纹图像','可视化Gabor滤波','退出');

        %--------------------------------------------------------------------------

        %--------------------------------------------------------------------------

        %--------------------------------------------------------------------------

        % 计算指纹编码并添加到数据库

        if chos==1

            clc;

            close all;

            selezionato=0;%选择标志

            while selezionato==0

                [namefile,pathname]=uigetfile({'*.bmp;*.tif;*.tiff;*.jpg;*.jpeg;*.gif','IMAGE Files (*.bmp,*.tif,*.tiff,*.jpg,*.jpeg,*.gif)'},'选在灰度图');%打开一个灰度图

                if namefile~=0 %文件存在

                    [img,map]=imread(strcat(pathname,namefile));%读取文件

                    selezionato=1;

                else

                    disp('选择灰度图');

                end

                if (any(namefile~=0) && (~isgray(img)))%文件不存在或不是灰度图

                    disp('选择灰度图');

                    selezionato=0;

                end

            end

            

            immagine=double(img);

            

            if isa(img,'uint8')%如果img是uint8

                graylevmax=2^8-1;%计算大小

            end

            if isa(img,'uint16')

                graylevmax=2^16-1;

            end

            if isa(img,'uint32')

                graylevmax=2^32-1;

            end

            fingerprint = immagine;

            

            N=h_lato;

            

            [BinarizedPrint,XofCenter,YofCenter]=centralizing(fingerprint,0);%二值化图像,计算中心点

            [CroppedPrint]=Cropping(XofCenter,YofCenter,fingerprint);%图像修剪

            [NormalizedPrint,vector]=sector_norm(CroppedPrint,0);%扇形,归一化输入图像        

            

            for (angle=0:1:num_disk-1)    

                gabor=gabor2d_sub(angle,num_disk);%Gabor滤波

                ComponentPrint=conv2fft(NormalizedPrint,gabor,'same');

                [disk,vector]=sector_norm(ComponentPrint,1);    

                finger_code1{angle+1}=vector(1:n_sectors);

            end       

            

            img=imrotate(img,180/(num_disk*2));%以一定角度对图像进行旋转

            fingerprint=double(img);

            

            [BinarizedPrint,XofCenter,YofCenter]=centralizing(fingerprint,0);

            [CroppedPrint]=Cropping(XofCenter,YofCenter,fingerprint);

            [NormalizedPrint,vector]=sector_norm(CroppedPrint,0);

            

            for (angle=0:1:num_disk-1)    

                gabor=gabor2d_sub(angle,num_disk);

                ComponentPrint=conv2fft(NormalizedPrint,gabor,'same');

                [disk,vector]=sector_norm(ComponentPrint,1);    

                finger_code2{angle+1}=vector(1:n_sectors);

            end

            % 增加指纹编号到数据库

            if (exist('database.dat')==2)

                load('database.dat','-mat');

                fingerprint_number=fingerprint_number+1;

                data{fingerprint_number,1}=finger_code1;

                data{fingerprint_number,2}=finger_code2;

                save('database.dat','data','fingerprint_number','-append');

            else

                fingerprint_number=1;

                data{fingerprint_number,1}=finger_code1;

                data{fingerprint_number,2}=finger_code2;

                save('database.dat','data','fingerprint_number');

            end

            

            message=strcat('指纹增加成功。编号:',num2str(fingerprint_number));

            msgbox(message,'指纹编数据库','信息');

        end % chos 1

        %--------------------------------------------------------------------------

        %--------------------------------------------------------------------------

        %--------------------------------------------------------------------------

        % 指纹识别

        if chos==2

            clc;

            close all;

            selezionato=0;

            while selezionato==0

                [namefile,pathname]=uigetfile({'*.bmp;*.tif;*.tiff;*.jpg;*.jpeg;*.gif','IMAGE Files (*.bmp,*.tif,*.tiff,*.jpg,*.jpeg,*.gif)'},'选择灰度图');

                if namefile~=0

                    [img,map]=imread(strcat(pathname,namefile));

                    selezionato=1;

                else

                    disp('选择灰度图');

                end

                if (any(namefile~=0) && (~isgray(img)))

                    disp('选择灰度图');

                    selezionato=0;

                end

            end

            

            immagine=double(img);

            

            if isa(img,'uint8')

                graylevmax=2^8-1;

            end

            if isa(img,'uint16')

                graylevmax=2^16-1;

            end

            if isa(img,'uint32')

                graylevmax=2^32-1;

            end

            fingerprint = immagine;

            

            N=h_lato;

            

            [BinarizedPrint,XofCenter,YofCenter]=centralizing(fingerprint,0);%二值化

            [CroppedPrint]=Cropping(XofCenter,YofCenter,fingerprint);%裁剪

            [NormalizedPrint,vector]=sector_norm(CroppedPrint,0);%归一化

            

            % 存储每个特征向量d的入口

            vettore_in=zeros(num_disk*n_sectors,1);

            for (angle=0:1:num_disk-1)    

                gabor=gabor2d_sub(angle,num_disk);

                ComponentPrint=conv2fft(NormalizedPrint,gabor,'same');

                [disk,vector]=sector_norm(ComponentPrint,1);    

                finger_code{angle+1}=vector(1:n_sectors);

                vettore_in(angle*n_sectors+1:(angle+1)*n_sectors)=finger_code{angle+1};

            end     

           

            % 计算输入值文编号

            % 检查数据库

            if (exist('database.dat')==2)

                load('database.dat','-mat');

                %---- 分配内存 -----------------------------------

                %...

                vettore_a=zeros(num_disk*n_sectors,1);

                vettore_b=zeros(num_disk*n_sectors,1);

                best_matching=zeros(fingerprint_number,1);

                valori_rotazione=zeros(n_arcs,1);

                % 开始检查 ---------------------------------------

                for scanning=1:fingerprint_number

                    fcode1=data{scanning,1};

                    fcode2=data{scanning,2};

                    for rotazione=0:(n_arcs-1)

                        p1=fcode1;

                        p2=fcode2;

                        % ruoto i valori dentro disco

                        for conta_disco=1:num_disk%取出每列数据

                            disco1=p1{conta_disco};

                            disco2=p2{conta_disco};

                            for old_pos=1:n_arcs

                                new_pos=mod(old_pos+rotazione,n_arcs);

                                if new_pos==0

                                    new_pos=n_arcs;

                                end

                                for conta_bande=0:1:(n_bands-1)%取该列每行

                                    disco1r(new_pos+conta_bande*n_arcs)=disco1(old_pos+conta_bande*n_arcs);

                                    disco2r(new_pos+conta_bande*n_arcs)=disco2(old_pos+conta_bande*n_arcs);

                                end

                            end

                            p1{conta_disco}=disco1r;

                            p2{conta_disco}=disco2r;

                        end

                        % ruoto i dischi circolarmente

                        for old_disk=1:num_disk

                            new_disk=mod(old_disk+rotazione,num_disk);

                            if new_disk==0

                                new_disk=num_disk;

                            end

                            pos=old_disk-1;

                            vettore_a(pos*n_sectors+1:(pos+1)*n_sectors)=p1{new_disk};

                            vettore_b(pos*n_sectors+1:(pos+1)*n_sectors)=p2{new_disk};                    

                        end

                        d1=norm(vettore_a-vettore_in);

                        d2=norm(vettore_b-vettore_in);

                        if d1<d2

                            val_minimo=d1;

                        else

                            val_minimo=d2;

                        end

                        valori_rotazione(rotazione+1)=val_minimo;

                    end

                    [minimo,posizione_minimo]=min(valori_rotazione);

                    best_matching(scanning)=minimo;

                end

                [distanza_minima,posizione_minimo]=min(best_matching);

                beep;

                message=strcat('与数据库中最相似的指纹是 : ',num2str(posizione_minimo)');% 具有',num2str(distanza_minima),'个实例');

                msgbox(message,'数据库信息','信息');            

            else

                message='数据库为空. 不能匹配.';

                msgbox(message,'指纹编号数据库错误','错误');    

            end

            

        end % chos 2

        %--------------------------------------------------------------------------

        %--------------------------------------------------------------------------

        %--------------------------------------------------------------------------

        % 删除数据库  

        if chos==3

            clc;

            close all;

            if (exist('database.dat')==2)

                button = questdlg('你确定要删除数据库吗?');

                if strcmp(button,'Yes')

                    delete('database.dat');

                    msgbox('数据库删除成功。','数据库删除','信息');

                end

            else

                warndlg('数据库为空!','警告')

            end

        end % chos 3

        %--------------------------------------------------------------------------

        %--------------------------------------------------------------------------

        %--------------------------------------------------------------------------

        % 可视化指纹图像    

        if chos==4

            clc;

            close all;

            selezionato=0;

            while selezionato==0

                [namefile,pathname]=uigetfile({'*.bmp;*.tif;*.tiff;*.jpg;*.jpeg;*.gif','IMAGE Files (*.bmp,*.tif,*.tiff,*.jpg,*.jpeg,*.gif)'},'Chose GrayScale Image');

                if namefile~=0

                    [img,map]=imread(strcat(pathname,namefile));

                    selezionato=1;

                else

                    disp('选择灰度图');

                end

                if (any(namefile~=0) && (~isgray(img)))

                    disp('选择灰度图');

                    selezionato=0;

                end

            end

            figure('name','选择图像');

            imshow(img);

        end % chos 4

        %--------------------------------------------------------------------------

        %--------------------------------------------------------------------------

        %--------------------------------------------------------------------------

        % 可视化Gabor滤波

        if chos==5

            clc;

            close all;

            figure('name','Gabor滤波');

            mesh(gabor2d_sub(0,num_disk));

        end % chos 5 

    end % end while

     

    展开全文
  • 指纹识别 源代码中带有大量注解

    万次阅读 多人点赞 2018-01-05 19:22:26
    指纹识别的一般步骤为指纹采集、预处理、特征点提取、特征点匹配。指纹分为螺旋形、弓形、环形。指纹的处理效果影响着后面特征点的提取和识别效果,所以图像的预处理占有重要的地位。指纹采集一般有专业的设备,所以...


    源代码及毕业论文参考模板下载

    指纹识别的一般步骤为指纹采集、预处理、特征点提取、特征点匹配。指纹分为螺旋形、弓形、环形。指纹的处理效果影响着后面特征点的提取和识别效果,所以图像的预处理占有重要的地位。指纹采集一般有专业的设备,所以这一步骤一搬不关注。

    ①预处理

    因为采集指纹时力度和各种因素所以采集的指纹灰度图会有很大不同,首先对图像进行归一化处理,归一化主要针对两个步骤:大小和灰度值。把采集到的指纹图统一调整到特定大小。灰度值我会根据整幅图的均值方差调整到某一范围内。

    归一化处理完毕后会对图像进行分割处理,目的是区分出前景色和背景色。我采用的分割为根据多区域阈值分割。多区域分割的效果取决于区域的大小,而指纹的区域分为一脊一谷最好,所以我选择3x3的区域大小。我会根据对区域多次进行求均值和方差进行分割。采集到的指纹图背景的灰度值大于前景色,背景主要为低频,所以背景的方差小于前景的方差。我分别求得背景和前景的均值和方差然后会得到背景为白色 脊线为黑色。然后保存在矩阵e(二值图)中,我会根据e中位置等于1的点的八邻域点的和小于四得到背景色,达到背景和前景分离(e矩阵)。然后黑白反转让感兴趣的前景色变为白色(保存在Icc中),灰度图(gray)的背景值替换为小区域块的和的均值(G1.但是得到的脊线方向并不能达到准确识别指纹。所以下一步会沿脊线方向增强指纹纹路,采用的方法为基于脊线方向场的增强方法。为了估计脊线的方向场,把脊线的方向场划分为八个方向,然后根据八个方向的灰度值的总和来得到脊线的方向。并对图像进行二值化。此时脊线还是为黑色。因为各种采集原因(油脂水分等)会使指纹粘连断裂,会影响后续的特征提取和识别,接下来会去除指纹中的空洞和毛刺,如果当前位置点值为0(背景)该点的四邻域点(上下左右)的和大于3则为毛刺,空洞的判断方法为该点为白色(背景)的四周为黑色(前景)八领域点两的和为0,则为空洞。我们得到的图像的纹线仍具有一定的宽度,而指纹的识别只与纹线的走向有关。所以我们只需要纹线的宽度为一个像素宽度即可。下面我执行了黑白反转使感兴趣的区域(纹线)变为白色。在执行开操作和闭操作使边界平滑,消除细小的尖刺,断开窄小的连接。执行细化(bwmorph)得到细画图(thin)。

    ②特征点提取

    特征点提取的点为端点和交叉点,遍历细化图的每一个像素点,端点的判别方法为八领域点两两相减取绝对值求和如果值为2则为端点(周围只有一个为1的白色点)和为6时为交叉点(周围有三值为1的白色点)。把找到的端点位置存储在txyNx3,第一列存储x的位置,第二列存储y的位置,第三列标识点的类别,如果为交叉点则值为6,如果端点则值为2.然后对纹线再次进行光滑处理。原理:找到每个端点,使其沿着纹线的方向移动五个像素,如果在五个像素之内遇到交叉点则此点为毛刺,去除此点。判断离端点num个距离内是否有另一个端点的函数为walk判断的主要方法先将该点置为0然后根据八领域点和;和为0或大于2则证明该点距离num内有端点,然后循环向前遍历。惊醒光滑处理后的特征点比以前少了。但是我们采集指纹时由于采集器的关系,图像的边缘会有很多端点,这已然会影响后续的识别工作,所以我们需要熊特征点中去除这些端点,cut函数主要做这些工作,边缘的主要特征就是黑色多白色少,也就是均值小,所以我主要里用灰度图的分区域(31*31)求均值如果灰度值小于70则在该区域的特征点去除,然后会得到更少的特征点,但这些点依然不够少说明不够特殊,下面定义了combinethinrtxynum)函数可以找出周围半径为r个像素的圆内没有任何端点和交叉点,沿纹线走num个距离没有交叉点和端点,cominewalksingle_point函数的综合,walk函数上面已经介绍,single_point函数主要是找出独特的点作为特征点,原理是根据两个端点之间的距离。求每个端点距离其他端点的距离,找取距离大于r的端点。执行完combine后会得到更少的端点(实验结果为3个端点)。

    ③特征点匹配

    特征点匹配主要采用三个方法

    1. 根据距离判断

    找到某一个特征点,从该特征点沿着纹线走num个距离,并计算出每走一步距离该特征点的距离,最后会得到哟个装有长度信息的数组,如果两幅指纹相同则他们含有相同的特征点而且得到的数组对应的位置的数据基本相等

    2三角形边长匹配,找到一个特征点以后,可以找出距离最近的两个端点与原特征点构成三角形,若两幅图的三角形的边长比例相等则说明两幅图匹配

    3. 点类型匹配

    4. 找到一个特征点以后,找出距离最近的num个端点,统计num个端点中端点和交叉点的个数,若两幅图匹配,则端点占的比例大致相同

    读入指纹图片,通过预处理,特征点提取来识别指纹

    二、现实意义:

    指纹识别技术在现实生活中的意义主要体验在隐私安全保护上,可通过指纹特征点的多个特征来识别不同人的指纹来达到保护隐私安全,是具有及其重要的现实作用的。

    三、涉及知识内容:

    1、中值滤波

    2、开运算

    3、闭运算

    4、二值化

    5、图像细化

    四、实例分析及截图效果:

    (1)代码显示:

     

     

    1、程序中定义图像重要变量说明

     

    1image--------------------------------------------------------------原图变量;

    2gray-------------------------------------------------------归一化后的图像;

    3Icc-------------------------背景前景分离后的二值图;

    4thin---细化图

    5txy--------------------------特征点存储的矩阵;

    6pxy----------------------特征点筛选后的特征点;

    2重要实现代码:

    %找出独特的端点作为特征点  一个端点的周围半径为r个像素的圆内没有任何端点或交叉点

    %随着r的逐渐变大,这样的点会变少,也就会越来越独特

    function [pxy2,error]=single_point(txy,r)
    error=0;
    x=txy(:,1);
    y=txy(:,2);
    n=length(x);
    d(1:n,1:n)=0;
    for j=1:n
        for i=1:n
            if(i~=j)
                %计算两点间距离
                d(i,j)=sqrt((x(i)-x(j))^2+(y(i)-y(j))^2);
            else
                d(i,j)=2*r;
            end
        end
    end
    [a,b]=min(d);
    c=find(a>r);
    pxy2=txy(c,:);
    pxy2=pxy2(find(pxy2(:,3)==2),:);
    t=size(pxy2,1);
    if t==0
        error=1;
    else
        plot(x,y,'b.');
        hold on
        plot(pxy2(:,1),pxy2(:,2),'r.');
    End

     

     

    function [pxy2,error]=single_point(txy,r)
    error=0;
    x=txy(:,1);
    y=txy(:,2);
    n=length(x);
    d(1:n,1:n)=0;
    for j=1:n
        for i=1:n
            if(i~=j)
                %计算两点间距离
                d(i,j)=sqrt((x(i)-x(j))^2+(y(i)-y(j))^2);
            else
                d(i,j)=2*r;
            end
        end
    end
    [a,b]=min(d);
    c=find(a>r);
    pxy2=txy(c,:);
    pxy2=pxy2(find(pxy2(:,3)==2),:);
    t=size(pxy2,1);
    if t==0
        error=1;
    else
        plot(x,y,'b.');
        hold on
        plot(pxy2(:,1),pxy2(:,2),'r.');
    End

     

     

     

     

    3、运行效果截图:

     

    第一步:读取原图,并显示

    f=imread(image);
    f=imresize(f,[363,312]);
    figure;imshow(f);

     

    第二步:归一化,将指纹灰度值调整到特定范围内

    %归一化,灰度值限制在某一范围
    M=0;var=0;
    %均值
    for x=1:m
        for y=1:n
            M=M+gray(x,y);
        end
    end
    M1=M/(m*n);
    %方差
    for x=1:m
        for y=1:n
            var=var+(gray(x,y)-M1).^2;
        end;
    end;
    var1=var/(m*n);
    for x=1:m
        for y=1:n
            if gray(x,y)>M1
                gray(x,y)=150+sqrt(2000*(gray(x,y)-M1)/var1);
            else 
                gray(x,y)=150-sqrt(2000*(M1-gray(x,y))/var1);
            end
        end
    end
    figure;imshow(uint8(gray));

    
    

     

     

    第三步:细化图

    Theshold = graythresh(Image);%取得图象的全局域值
    Image_BW = im2bw(Image,Theshold);%二值化图象
    figure,imshow(Image_BW);
    title(' 【初次二值化图像】');

    
    

     

    四步特征点提取

    %找出独特的端点作为特征点  一个端点的周围半径为r个像素的圆内没有任何端点或交叉点
    %随着r的逐渐变大,这样的点会变少,也就会越来越独特
    function [pxy2,error]=single_point(txy,r)
    error=0;
    x=txy(:,1);
    y=txy(:,2);
    n=length(x);
    d(1:n,1:n)=0;
    for j=1:n
        for i=1:n
            if(i~=j)
                %计算两点间距离
                d(i,j)=sqrt((x(i)-x(j))^2+(y(i)-y(j))^2);
            else
                d(i,j)=2*r;
            end
        end
    end
    [a,b]=min(d);
    c=find(a>r);
    pxy2=txy(c,:);
    pxy2=pxy2(find(pxy2(:,3)==2),:);
    t=size(pxy2,1);
    if t==0
        error=1;
    else
        plot(x,y,'b.');
        hold on
        plot(pxy2(:,1),pxy2(:,2),'r.');
    End

     

     

    步:特征点的再次提取

    % 综合walk和single_point函数,通过执行[pxy3,error2]=combine(thin,r,txy,num)可以找出周围半径为r个像素的院内没有任何交叉点或端点,并且沿纹线走num个
    % 距离内没有任何哟个交叉点或端点
    function [pxy3,error2]=combine(thin,r,txy,num)
    error=0;
    [pxy2,error]=single_point(txy,r);
    n=size(pxy2,1);
    k=1;
    erroe2=0;
    for i=1:n
        [error,a,b]=walk(thin,pxy2(i,1),pxy2(i,2),num);
        if error~=1
            pxy3(k,1)=pxy2(i,1);
            pxy3(k,2)=pxy2(i,2);
            pxy3(k,3)=pxy2(i,3);
            k=k+1;
            error2=0;
            plot(pxy2(i,1),pxy2(i,2),'r+');
        end
    end

     

    特征识别

    % 特征点匹配
    % 三角形边长匹配
    % 找到一个特征点后,可以找出距离其最近的两个端点,与原特征点构成三角形,瑞两幅图像的三角形边长比例相等,则说明匹配
    % find_point()找到最近的端点
    function pxy=find_point(x0,y0,txy,num)
    x=txy(:,1);
    y=txy(:,2);
    n=length(x);
    k(1,n)=0;
    lnn=0;
    pxy(num,:)=[0,0,0];
    for i=1:n
        k(i)=sqrt((x(i)-x0)^2+(y(i)-y0)^2);
    end
    kk=sort(k);
    for i=1:num
        xiao=kk(i+lnn);
        nn=find(k==xiao);
        lnn=length(nn);
        pxy(i,:)=[x(nn(1)),y(nn(1)),txy(nn(1),3)];
    end
    plot(x0,y0,'bo');
    x0;
    y0;
    hold on;
    plot(pxy(:,1),pxy(:,2),'ro');
     
    % ff=(sum(abs((dd1./dd2)-1))) ff越接近0 匹配度越高

     

     

     

    % 特征点匹配
    % 纹线长度匹配 对于找到的特征点和纹线 沿着纹线走5个像素到原始端点的距离
    function d=distance(x0,y0,num,thin)
    num2=fix(num/5);
    for i=1:num2
        [error,a,b]=walk(thin,x0,y0,5*i);
        if error~=1
            d(i)=sqrt((a-x0)^2+(b-y0)^2);
        else
            break;
        end
    end
     
    % 最后会得到一个装有长度信息的数组,如果两幅指纹途中的指纹是一样的,则他们含有相同的特征点和从这个特征点出发画出的纹线
    % 则这两个数组对应位置的数据基本相等(图像大小相同,则他们的比例接近1)
    % f=(sum(abs((d1./d2)-1)))f越接近0 匹配度越高

     

     ③

    % 找到一个特征点以后,在其周围找到四十个端点或交叉点,统计四十个点的交叉点和端点的个数
    % 若两幅图断点占的比例近似相同则匹配
    % fff=abs(f11-f21)/(f11+f12) 越接近于0 匹配度越高
    close all;
    tic;
    clear;
    thin1=tuxiangyuchuli('zhiwen.png');
    thin2=tuxiangyuchuli('zhiwen.png');
    figure;
    txy1=point(thin1);
    txy2=point(thin2);
    [w1,txy1]=guanghua(thin2,txy2);
    [w2,txy2]=guanghua(thin2,txy2);
    thin1=w1;
    thin2=w2;
    txy1=cut(thin1,txy1);
    txy2=cut(thin2,txy2);
    [pxy31,error2]=combine(thin1,8,txy1,60);
    [pxy32,error2]=combine(thin2,8,txy2,60);
    error=1;
    num=20;
    cxy1=pxy31;
    cxy2=pxy32;
    d1=distance(cxy1(1,1),cxy1(1,2),num,thin1);
    d2=distance(cxy2(1,1),cxy2(1,2),num,thin2);
    f=(sum(abs((d1./d2)-1)));
    if(f<0.5)
        error=0;
    else
        error=1;
    end

     

     

    步:最终检测结果:

     

    f =

     

         0

     

     

    ff =

     

         0

     

     

    error =

     

         0

     

     

    fff =

     

         0

     

    时间已过 13.628304 秒。

    四、算法分析

    1中值滤波

        利用中值滤波可以对图像进行平滑处理。其算法简单,时间复杂度低,但其对点、线和尖顶多的图像不宜采用中值滤波。很容易自适应化

    2开运算
      先腐蚀后膨胀的过程称为开运算。用来消除小物体、在纤细点处分离物体、平滑较大物体的边界的同时并不明显改变其面积。

    3闭运算
        先膨胀后腐蚀的过程称为闭运算。用来填充物体内细小空洞、连接邻近物体、平滑其边界的同时并不明显改变其面积。



     

    
    
    
    
    展开全文
  • 指纹识别-传感器原理

    万次阅读 多人点赞 2017-04-07 19:04:55
    我们了解过了指纹识别的大致流程后,这篇文章用来介绍指纹识别硬件中最重要的部分,传感器。其实传感器、芯片也要符合物理学的基本原理,他们都是物理学的原理的一种实现,我们可以从光、电、声、热、力这几个基本的...

    我们了解过了指纹识别的大致流程后,这篇文章用来介绍指纹识别硬件中最重要的部分,传感器。其实传感器、芯片也要符合物理学的基本原理,他们都是物理学的原理的一种实现,我们可以从光、电、声、热、力这几个基本的物理研究领域中展开,看看今天主流的指纹识别传感器的分类和实现。

    一、光学传感器

    光学传感器的发展历史可能是最久的了,已经有30年的历史了。实现的原理也是最简单的。
    它主要是利用光的折摄和反射原理,将手指放在光学镜片上,手指在内置光源照射下,光从底部射向三棱镜,并经棱镜射出,射出的光线在手指表面指纹凹凸不平的线纹上折射的角度及反射回去的光线明暗就会不一样。用棱镜将其投射在电荷耦合器件上CMOS或者CCD上,进而形成脊线(指纹图像中具有一定宽度和走向的纹线)呈黑色、谷线(纹线之间的凹陷部分)呈白色的数字化的、可被指纹设备算法处理的多灰度指纹图像。
    图1
    图1

    光学指纹传感器的优点主要表现为:
    1. 抗静电能力强、系统稳定性较好、使用寿命长
    2. 灵敏度特别的高
    3. 能提供高分辨率的指纹图像(可以达到500 dpi)。

    缺点也很明显:
    1、潜在指印(多次按压),会降低指纹图像的质量
    2、台板涂层及CCD阵列会随时间推移产生损耗,可能导致采集的指纹图像质量下降
    3、体积比较大,功耗控制不好

    用途:
    鉴于光学传感器的体积都比较大,因此它的应用领域主要集中在指纹门锁,保险箱,汽车指纹防盗。

    发展:
    光学传感器在传统对体积、功耗要求不是苛刻的行业中还占有很大市场份额,但是在手机等移动终端这个大市场迷失了。
    16年底Synaptics发布了FS9100这种新型的光学sensor,主要是看中了光学传感器的穿透性(可以穿透1mm左右的glass),目标是underglass。而且随着In Display屏内指纹识别的大趋势,光学传感器必然又会带着新技术卷土重来。

    二、电容传感器

    电容式传感器应该是目前手机及便携式终端设备最热门的了,当然,存在即合理。既然电容式传感器占有了这么大的市场,它有什么优势呢?
    其原理是将电容感整合于一块芯片中,当指纹按压芯片表面时,内部电容感测器会根据指纹波峰与波谷而产生的电荷差,从而形成指纹影像。如下简图,可以把上面的凹凸认为是指纹的谷和脊,那么同传感器就会形成不同的电容差,这样传感器就可以根据这些不同的电容差画出指纹的纹理。

    这里写图片描述

    电容传感器又分为主动式和被动式,我们可以先参考下面两张图。

    主动式:

    原理主要是通过外加的驱动信号(如Ring)加载到手指上以增强手指表面的电荷,使底下的感应阵列接收电场信号并对信号进行放大,根据指纹凹凸不一致底下芯片感应到的电场也不一致从而重现指纹(如下图):
    这里写图片描述

    被动式

    工作原理则不一样;其是利用手指按在芯片表面时,指纹的波峰波谷对芯片内部电容上下电极电荷分配的比例影响程度来对指纹进行重现指纹,无需额外增加驱动源,芯片结构非常单纯(如下图),也因为无额外驱动信号,所以模组也无需外置Ring,模组结构也非常简单。
    这里写图片描述

    主动式和被动式的原理也很好辨别,主动式就是额外加了激励电源。可以想象主动式的电容传感器穿透会比较强,但是无可厚非的会带来更多的噪声,所以究竟是主动式还是被动式的传感器好,不能一概而论,还是要看各家的技术。

    优点:
    1、芯片和模组可以做的很薄
    2、功耗更容易控制

    缺点:
    1、穿透率比较低
    2、价格相对较高
    3、防水、防污性不强

    发展:
    电容式的传感器到目前来说,是使用最普遍的。但是,眼看着指纹识别要向屏内指纹识别的方向发展,而电容式的穿透率大概在200um左右,基本的玻璃盖板都很难穿透,而且需要透明显示的物理特性也无法满足。所以,电容式的传感器在将来肯定还是会占据了传感器的大片江山,但是高端市场收到的冲击,却无能为力。

    三、射频/超声波传感器

    如果把射频传感器划到光学传感器的范畴中未免有些牵强(光也是一种特殊的电磁波),射频指纹模块现阶段包含无线电波探测与超声波探测两种,

    射频传感器原理

    原理与探测海底物质的的声纳类似,是靠特定频率的信号反射来探知指纹的具体形态的。这一类指纹模块最大的优点便是手指无需与指纹模块相接触,因而不会对手机的外观造成太大影响。基于这一点,射频指纹模块也成为了未来指纹识别的主要发展方向之一。
    射频

    超声检测原理是相同的,就是依靠反射波的时间差探知脊和谷的距离差,根据这个距离差绘制出指纹图像。

    超声波传感器原理

    特制的晶片(称为换能器)在电脉冲的激励下,产生机械振动(类似于人摸一下电门浑身一抖),振动产生超声波脉冲(pulse),超声波脉冲在传播过程中,会被传播介质(如人体)一部分一部分地被反射或者散射回来(echo),尤其是介质中物理性质不连续的地方,(比如手机上方的一根手指),反射波尤为强烈。反射或散射回换能器的回波,又使换能器产生振动,这种振动被换能器转换为电信号,对于电信号进行不同的处理,可以得到不同的信息,比如传播介质的结构,有没有运动的物体在介质中,介质的弹性等等。

    这里写图片描述

    如果把超声波的声束想像成一条线,那么一次超声PULSE-ECHO得到的通常只有一条线的信息,指纹至少是一个面,用超声扫描的方式在不同的位置进行PULSE-ECHO就能够得到一系列线的信息,从而获取整个指纹信息。医院里用的超声成像设备也大多就是这样的工作原。    
    

    如下图就是排列成矩阵型的换能矩阵,每个换能矩阵可以代表了图像的一个pixel。

    这里写图片描述

    四、力学/热学传感器

    虽然从物理学角度讲,可以通过力学(即按压)或者热学(即温差)来实现脊和谷的判别。但是在实际实现的sensor却没有很大的可行性。
    力的传导需要一个比较硬的传导载体,但是如果载体比较硬,那么指纹这么微小的距离差异,形成的图像必然是模糊一片;热敏sensor也曾经被开发过,但是热敏传感器受外界温度、两次按压时间间隔影像太大,无法达到消费级电子的要求。因此这两种传感器都匿迹在时间的长河中。

    其实不管是指纹传感器,还是其他各种传感器,运用第一性原理,都可以找到原理的根源。对于我们这些工科生深入了解一个技术、一个行业,都是有很大裨益。

    图片来自互联网,侵删
    By 一个不务正业的程序员。

    展开全文
  • 指纹识别

    千次阅读 2020-07-04 11:08:41
    1.概念指纹是指手指末端正面皮肤上凹凸不平的纹路。这段纹路蕴含了大量的特征信息,如纹形、模式区、核心点、三角点和纹数等总体特征;...2.采集过程指纹识别过程大致涉及的主要步骤为指纹图像采集、指纹图像预处理

    前言:

    为了方便查看博客,特意申请了一个公众号,附上二维码,有兴趣的朋友可以关注,和我一起讨论学习,一起享受技术,一起成长。

    在这里插入图片描述


    1.概念

    指纹是指手指末端正面皮肤上凹凸不平的纹路。这段纹路蕴含了大量的特征信息,如纹形、模式区、核心点、三角点和纹数等总体特征;细节特征,端点、断点、分叉点、三角点、核心点等称为“特征点”的细节特征。两枚指纹经常会具有相同的总体特征,但它们的细节特征,却不可能完全相同。指纹识别就是依靠总体特征和细节特征来唯一的确认一个人的身份。

    这里写图片描述

    2.采集过程

    指纹识别过程大致涉及的主要步骤为指纹图像采集、指纹图像预处理、指纹图像的特征提取、匹配与识别等过程。指纹图像的预处理一般又包括图像增强、二值化和细化。

    这里写图片描述

    2.1指纹图像的采集:

    它是自动指纹识别系统的重要组成部分,图像采集就是通过专门的指纹采集仪来采集活体指纹图像的过程。最早指纹采集仪采用的光学传感器,随着半导体技术的发展,陆续出现了CMOS指纹传感器、热敏传感器、超声波传感器等新型传感器。

    2.2指纹图像的预处理:

    采集获得的指纹图像通常都伴随着各种各样的噪声,一部分是由于采集仪造成的,另一部份是由于手指的状态所造成的。指纹图像预处理的目的就是去除图像中的噪声,使图像画面清晰,边缘明显,把它变成一幅清晰的点线图,以便于提取正确的指纹特征。指纹图像预处理在整个指纹识别系统中具有重要的地位和作用,它的好坏直接影响着指纹识别的效果。

    2.3图形增强:

    指纹预处理过程中最重要的一步就是对指纹图像进行增强,图像增强的目的是在增强脊线谷线结构对比度的同时抑制噪声,连接断裂的脊线和分离粘连的脊线,按特定的需要突出一幅图像中的某些信息,同时削弱或去除某些不需要的信息。指纹图像增强算法主要有基于Gabor滤波的增强方法和基于傅里叶滤波的低质量指纹增强算法。Gabor滤波增强是使用方向场图像来进行增强的,是指纹增强算法中最常见的一种。基于傅里叶滤波的低质量指纹增强算法是通过傅里叶变换把指纹图像增强从空域转化到频域,然后在频域上对指纹图像进行带通滤波、方向滤波,从而使指纹图像得到增强。

    2.4二值化:

    这个二值化是指非黑即白。图像经过增强处理后其中的纹线(脊)部分得到了增强,不过脊的强度并不完全相同,表现为灰度值的差异。二值化的目的就是使脊的灰度值趋向一致,使整幅图像简化为二元信息在指纹识别中,一方面对图像信息进行了压缩,保留了纹线的主要信息,节约了存储空间,另一方面还可以去除大量的粘连,为指纹特征的提取和匹配作准备。

    2.5细化:

    指纹图像二值化后,纹线仍具有一定的宽度,而指纹识别只对纹线的走向感兴趣,不关心它的粗细。细化的目的是为了删除指纹纹线的边缘像素,使之只有一个像素宽度,减少冗余的信息,突出指纹纹线的主要特征,从而便于后面的特征提取。细化时应保证纹线的连接性,方向性和特征点不变,还应保持纹线的中心基本不变。

    2.6指纹图像的特征提取:

    主要有两种特征提取方法,**一种是从灰度图像中提取特征,另一种是从细化二值图像中提取特征。**直接从灰度图像中提取特征的算法一般是对灰度指纹纹线进行跟踪,根据跟踪结果寻找特征的位置和判断特征的类型。这种方法省去了复杂的指纹图像预处理过程,但是特征提取的算法却十分复杂,而且由于噪声等因素影响,特征信息(位置、方向等)也不够准确。而从细化二值图像中提取特征的方法比较简单,在得到可靠的细化二值图像后,只需要一个3×3的模板就可以将端点和分叉点提取出来。

    2.7匹配与识别:

    是指纹识别系统中的最后一步,也是评价整个指纹识别系统性能的最主要依据。**指纹匹配是根据提取的指纹特征来判断两枚指纹是否来自于同一个手指。**特征匹配主要是细节特征的匹配,将新输入指纹的细节特征值与指纹库中所存指纹的细节特征值进行比对,找出最相似的指纹作为识别的输出结果,也就是所说的指纹验证识别过程,它是指纹识别系统的最终目的。由于各种因素的影响,同一指纹两次输入所得的特征模板很可能不同。因此,只要有输入指纹的细节特征与所存储的模板相似时,就说这两个指纹匹配。

    这里写图片描述

    3.指纹识别算法

    指纹识别算法是实现指纹识别的关键,它直接决定了识别率的高低,是指纹识别技术的核心。

    4.指纹识别认证

    FRR(False Rejection Rate)和FAR(False Acceptance Rate)是用来评估指纹识别算法性能的两个主要参数。FRR和FAR有时被用来评价一个指纹识别系统的性能。指纹识别系统的性能除了受指纹算法的影响外,指纹采集设备的性能对FRR和FAR的影响也是不能忽视的。

    FRR通俗叫法是拒真率,标准称谓是FNMR(False Non-Match Rate 不匹配率)。可以通俗的理解为“把应该相互匹配成功的指纹当成不能匹配的指纹”的概率。对指纹算法的性能测量是在给定指纹库的情况下进行测量的。

    FAR一般称为认假率,其标准称谓是FMR(False Match Rate 错误匹配率)。FMR是用来评估指纹识别算法性能的最重要参数。可以通俗的理解为“把不应该匹配的指纹当成匹配的指纹”的概率。

    5.指纹的特征

    定义了指纹的两类特征来进行指纹的验证:总体特征和局部特征。总体特征是指那些用人眼直接就可以观察到的特征,包括:基本纹路图案环型(loop), 弓型(arch), 螺旋型(whorl)。其他的指纹图案都基于这三种基本图案。仅仅依靠图案类型来分辨指纹是远远不够的,这只是一个粗略的分类,但通过分类使得在大数据库中搜寻指纹更为方便。

    局部特征是指指纹上的节点。两枚指纹经常会具有相同的总体特征,但它们的局部特征——节点,却不可能完全相同 节点(Minutia Points)。 指纹纹路并不是连续的,平滑笔直的,而是经常出现中断、分叉或打折。这些断点、分叉点和转折点就称为“节点”。就是这些节点提供了指纹唯一性的确认信息。

    6. 指纹识别传感器

    这部分内容来自------->(http://blog.csdn.net/lowkeyway/article/details/69569669)

    6.1光学传感器

    它主要是利用光的折摄和反射原理,将手指放在光学镜片上,手指在内置光源照射下,光从底部射向三棱镜,并经棱镜射出,射出的光线在手指表面指纹凹凸不平的线纹上折射的角度及反射回去的光线明暗就会不一样。用棱镜将其投射在电荷耦合器件上CMOS或者CCD上,进而形成脊线(指纹图像中具有一定宽度和走向的纹线)呈黑色、谷线(纹线之间的凹陷部分)呈白色的数字化的、可被指纹设备算法处理的多灰度指纹图像。

    这里写图片描述

    优点:

    1.抗静电能力强、系统稳定性较好、使用寿命长 ;

    2.灵敏度特别的高 ;

    3.能提供高分辨率的指纹图像(可以达到500 dpi)。

    缺点:

    1、潜在指印(多次按压),会降低指纹图像的质量 ;

    2、台板涂层及CCD阵列会随时间推移产生损耗,可能导致采集的指纹图像质量下降 ;

    3、体积比较大,功耗控制不好。

    用途: 鉴于光学传感器的体积都比较大,因此它的应用领域主要集中在指纹门锁,保险箱,汽车指纹防盗。

    ####6.2电容传感器

    其原理是将电容感整合于一块芯片中,当指纹按压芯片表面时,内部电容感测器会根据指纹波峰与波谷而产生的电荷差,从而形成指纹影像。如下简图,可以把上面的凹凸认为是指纹的谷和脊,那么同传感器就会形成不同的电容差,这样传感器就可以根据这些不同的电容差画出指纹的纹理。

    这里写图片描述

    电容传感器又分为主动式和被动式。

    主动式:

    原理主要是通过外加的驱动信号(如Ring)加载到手指上以增强手指表面的电荷,使底下的感应阵列接收电场信号并对信号进行放大,根据指纹凹凸不一致底下芯片感应到的电场也不一致从而重现指纹(如下图):

    这里写图片描述

    被动式:

    其是利用手指按在芯片表面时,指纹的波峰波谷对芯片内部电容上下电极电荷分配的比例影响程度来对指纹进行重现指纹,无需额外增加驱动源,芯片结构非常单纯(如下图),也因为无额外驱动信号,所以模组也无需外置Ring,模组结构也非常简单。

    这里写图片描述

    优点:

    1、芯片和模组可以做的很薄 ;

    2、功耗更容易控制。

    缺点:

    1、穿透率比较低 ;

    2、价格相对较高 ;

    3、防水、防污性不强。

    主动式和被动式的原理也很好辨别,主动式就是额外加了激励电源。可以想象主动式的电容传感器穿透会比较强,但是无可厚非的会带来更多的噪声,所以究竟是主动式还是被动式的传感器好,不能一概而论,还是要看各家的技术。

    ####6.3射频传感器原理

    原理与探测海底物质的的声纳类似,是靠特定频率的信号反射来探知指纹的具体形态的。这一类指纹模块最大的优点便是手指无需与指纹模块相接触,因而不会对手机的外观造成太大影响。

    这里写图片描述

    6.4超声波传感器

    超声检测就是依靠反射波的时间差探知脊和谷的距离差,根据这个距离差绘制出指纹图像。

    特制的晶片(称为换能器)在电脉冲的激励下,产生机械振动(类似于人摸一下电门浑身一抖),振动产生超声波脉冲(pulse),超声波脉冲在传播过程中,会被传播介质(如人体)一部分一部分地被反射或者散射回来(echo),尤其是介质中物理性质不连续的地方,(比如手机上方的一根手指),反射波尤为强烈。反射或散射回换能器的回波,又使换能器产生振动,这种振动被换能器转换为电信号,对于电信号进行不同的处理,可以得到不同的信息,比如传播介质的结构,有没有运动的物体在介质中,介质的弹性等等。

    这里写图片描述

    参考:

    1.指纹识别技术

    2.指纹识别-流程

    3.指纹识别认证

    4.指纹识别的原理和方法

    展开全文
  • Python实现指纹识别你见过没?

    千次阅读 2019-02-01 13:18:11
    目前来说指纹识别的技术应用最为广泛,随处都可以看到指纹识别技术的身影,市场上有了更多指纹识别的应用。每个人(包括指纹在内)皮肤纹路在图案、断点和交叉点上各不相同,是唯一的,依靠这种唯一性和稳定性,我们...
  • 指纹识别-模组结构

    万次阅读 2017-04-11 13:37:35
    不管指纹识别的流程和传感器原理发展得有多快,如果需要商用到手机及终端设备这种民用产品上,还是有好多问题需要克服。比如我们会看到指纹模块在正面,在背面,在侧面,其原因都是sensor性能、模组结构设计、手机ID...
  • 指纹识别-流程

    万次阅读 多人点赞 2017-04-16 18:03:17
    一、为什么要关注指纹识别生物识别技术源远流长,比如人脸识别,我们进化了精细的双眼系统进行识别,但是如果让计算机来做精确的人脸识别,却是一件比较困难的事。而相比指纹识别,可以认为在人类文明史上才开始有所...
  • 指纹识别matlab实现

    2020-07-30 23:30:17
    指纹识别matlab实现,源代码带有大量注解,适合作为毕业设计,内附有毕业设计论文模板参考
  • 指纹的对比分析系统概述

    千次阅读 热门讨论 2019-02-15 19:14:01
    摘要:指纹识别技术作为生物识别技术中最为具有应用前景的技术之一,近年来取得了长足的发展,并广泛应用于各种场合。由于指纹所具有的唯一性和不变性,以及指纹识别技术具有很高的可行性和实用性,指纹识别成为目前...
  • Android 指纹识别(Touch ID)实例

    千次阅读 2018-10-15 19:07:09
      指纹识别的支持是Android6.0以后才开始的,Google也为指纹识别提供了一些列接口,指纹识别将要用到的核心API为FingerprintManager,其中还有三个核心内部类:FingerprintManager.AuthenticationResult 指纹识别后...
  • 第二种情况:所有都正常,就是录指纹的时候报错。 情况分析:这个情况是因为你现在这个电脑用户可能是Administrator。Administrator不能存指纹。 解决方案:1.登录Microsoft用户 就可以录指纹了 2. 或者创建一个新的...
  • 解决小新Air指纹识别失效问题

    万次阅读 2019-11-25 10:43:41
    重装系统后,在设置-账户-登录选项中设置指纹解锁,发现找不到支持Windows Hello指纹的指纹识别器。 打开设备管理器(“此电脑”右键-属性-设备管理器),生物识别设备中的叹号提示驱动程序有问题,双击进入,...
  • 屏下指纹技术实现方案与原理

    万次阅读 2019-06-17 23:23:38
    1月24日,全球第一台量产的屏幕指纹手机vivo X20 Plus屏幕指纹版正式在北京亮相。 据悉,该手机屏幕指纹版已经支持支付宝和微信的指纹支付。 vivo X20 Plus屏下指纹,其原理是利用光电反射技术,专门适配OLED屏幕...
  • 从荣耀论坛上看到要重装5个驱动,按顺序安装 1.芯片组驱动程序 2. 串口驱动程序 3.Intel ME驱动程序 4. Intel SGX驱动程序 5. 指纹驱动程序 然后问题解决...
  • 指纹识别开源代码SourceAFIS使用入门

    千次阅读 2017-07-09 19:47:22
    SourceAFIS是一个人类指纹识别库,它可以比较两个指纹(1:1模式)是否属于同一个人,或搜索一个大型数据库(1:N模式)找出该指纹的身份。它需要原始指纹图像的输入,并产生匹配得分的输出。提供 .NET 和 Java 的开发...
  • 惠普星14 指纹识别功能安装

    万次阅读 2018-11-20 15:38:24
    最近一台新笔记本HP星14有指纹识别功能,但是弄了很久一直都没有反应,原因是因为自带的驱动很坑的没有识别。 那么解决办法就是: 1.登陆惠普官网https://www8.hp.com/cn/zh/home.html;下方点击驱动下载安装2....
  • C#实现指纹识别功能编程

    千次阅读 2013-02-03 23:44:27
    指纹识别器属于常用的硬件设备,主用用于考勤,门禁,各种考试场合等。指纹识别器如果要通过USB连接计算机,必须需要驱动程序才可以识别。 C#可以通过调用指纹识别器驱动文件,实现指纹识别的功能。主要使用的DLL...
  • java指纹识别

    千次下载 热门讨论 2020-07-30 23:32:45
    java指纹识别 java识别 图片匹配
  • 射频指纹识别(RF指纹识别

    千次阅读 2019-02-13 15:06:10
    射频指纹识别(RF指纹识别)是什么? 射频指纹识别是一种识别设备或信号器的过程,通过查看其传输的属性(包括特定的无线电频率)来发起无线电传输。每个信号发起者基于其发送信号的位置和配置具有其自己的特定...
  • 操作系统指纹识别

    万次阅读 2016-11-17 23:54:53
    操作系统指纹识别一般用来帮助用户识别某台设备上运行的操作系统类型。通过分析设备往网络发送的数据包中某些协议标记、选项和数据,我们可以推断发送这些数据包的操作系统。 只有确定了某台主机上运行的操作系统,...
1 2 3 4 5 ... 20
收藏数 32,907
精华内容 13,162
关键字:

指纹识别