【图像特征处理】指纹图像细节特征提取matlab源码

一、简介

指纹图像的特征提取是指纹识别的关键,而指纹匹配通常基于细节点匹配。指纹特征提取是从细化后的指纹图中得到细节特征点(即端点和分叉点),此特征点含有大量的伪特征,既耗时又影响匹配精度。本章采用了边缘去伪和距离去伪,使得特征点去伪前后减小了近1/3,然后提取可靠特征点信息,以便实现指纹匹配。基于MATLAB实现的指纹细节特征提取方法,并给出了去伪算法,算法实现简单快速,而且具有较高的准确率。
1 技术概述
指纹识别技术是一种应用前景非常乐观的生物识别技术,国内外很多机构都在进行相关研究,尽管目前已有多种商用自动指纹识别系统在市场上销售,但是不同商标的指纹识别机,指纹验证识别的快速性、准确性和可靠性都是不同的,一方面是指纹采集的偏差,另一方面也是指纹识别算法的不同,指纹识别算法的好坏,严重影响到指纹识别的准确率。因此如何提高指纹识别的算法的有效性和鲁棒性,一直以来是广大学者的研究热点以及难点。
在指纹自动识别系统中,首先是对指纹进行特征提取,然后根据特征及其相互之间的位置与拓扑关系在预先建立好的指纹库中进行匹配,从而检索到匹配指纹信息。指纹的特征主要指纹脊线的某种构型,如端点、分叉点等,本章也主要是对指纹的端点以及分叉点进行分析。
介绍了一套基于MATLAB 2014a实现的指纹细节特征提取及其后处理算法,以MATLAB 2014a作为指纹图像识别算法仿真的平台,具有较高的准确率,而且可以大大减小仿真的难度。
2 指纹识别系统的工作原理
在这里插入图片描述
3 指纹细节特征的提取
指纹特征去伪操作主要是将冗余的指纹特征的特征点滤除掉。
伪特征一半具有以下特点:大部分处于图像边缘;在图像内部的伪特征点距离较近,两个或多个伪特征同时存在于很小的区域内。
本章根据指纹图像伪特征分布特点提出了两种去伪方法:首先对于图像边缘的点,采用指纹图像切割的方法,即对边缘的点直接切除掉;然后利用最短距离阈值法去除距离较近的特征点。
在这里插入图片描述
在这里插入图片描述

二、源代码

%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 指纹图像细节特征提取
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear;
origin=imread('im2.bmp');
subplot(2,2,1);imagesc(origin);
colormap(gray); xlabel('(a)原始图像')
I=im2bw(origin);  % 二值化
%细化指纹图像,用匹配模板法
[M,N]=size(I);
for i=2:M-1
    for j=2:N-1
        if I(i,j)==0
            if (I(i-1,j)==0&I(i,j+1)==0)|(I(i-1,j)==0&I(i,j-1)==0)|(I(i+1,j)==0&I(i,j-1)==0)|(I(i+1,j)==0&I(i,j+1)==0)
                I(i,j)=1;
            else
                I(i,j)=0;
            end
        end
    end
end
subplot(2,2,2);imagesc(I);
xlabel('(b)细化后的指纹图像')
%特征点提取(端点或交叉点)
t=0;
for i=2:M-1
    for j=2:N-1
        if I(i,j)==0
            n=I(i-1,j-1)+I(i-1,j)+I(i-1,j+1)+I(i,j-1)+I(i,j+1)+I(i+1,j-1)+I(i+1,j)+I(i+1,j+1);
            if (n==7|n==5)
                t=t+1;
                x(t)=j;
                y(t)=i;
            end
        end
    end
end
subplot(2,2,3);imagesc(I);
xlabel('(c)细化后的指纹图像')
hold on;plot(x,y,'bo');hold off;   
for i=1:t-1
    for j=i+1:t   %指纹特征去伪
        d=sqrt((x(i)-x(j))^2+(y(i)-y(j))^2);
        if d<6            %去除距离较近的特征点
            x(i)=-1;y(i)=-1;x(j)=-1;y(j)=-1;
        end
    end
end
thin_image=~bwmorph(binary_image,'thin',Inf);
figure;imshow(thin_image);title('Thinned Image');
% load('ridge.mat')
% load('bifurcation.mat')
% hold on
% plot(ridge_y,ridge_x,'r*')
% plot(bifurcation_y,bifurcation_x,'b.','markersize',8)

%% Minutiae extraction
s=size(thin_image);
N=3;%window size
n=(N-1)/2;
r=s(1)+2*n;
temp((n+1):(end-n),(n+1):(end-n))=thin_image(:,:);
outImg=zeros(r,c,3);           % For Display
outImg(:,:,1) = temp .* 255;
outImg(:,:,2) = temp .* 255;
outImg(:,:,3) = temp .* 255;
for x=(n+1+10):(s(1)+n-10)
    for y=(n+1+10):(s(2)+n-10)
        e=1;
        for k=x-n:x+n
            f=1;
            for l=y-n:y+n
                mat(e,f)=temp(k,l);
                f=f+1;
            end

完整代码或者代写添加QQ1575304183

往期回顾>>>>>>

【图像识别】国外车牌识别

【图像识别】基于cnn卷积神经网络之验证码识别matlab源码

【图像识别】基于svm植物叶子疾病检测和分类

【图像识别】路面裂缝识别含GUI源码

【图像识别】基于RGB和BP神经网络的人民币识别系统含GUI界面

【图像识别】条形码识别系统

【图像识别】基于不变矩的数字验证码识别含GUI界面

【图像识别】基于模板匹配之手写数字识别系统GUI界面

【图像识别】基于贝叶斯分类器之目标识别matlab源码

【图像识别】身份证号码识别matlab源码

【图像识别】条形码识别系统

【图像分类】基于极限学习分类器对遥感图像分类

【图像识别】基于BP神经网络之字母识别matlab源码

猜你喜欢

转载自blog.csdn.net/qq_34763204/article/details/113720230