Press "Enter" to skip to content

【图像识别-指纹识别】指纹特征提取附matlab代码

1 内容介绍

 

​一 指纹增强

 

采用Lin Hong等人提出的基于Gabor滤波的方法进行指纹增强,可分为以下步骤:

 

标准化:标准化是把图像的平均灰度和方差调整到预定的级别上,以减少脊线上的灰度差异,方便后续处理。

 

方向估计:将图像分成的不相交块,对每一块求块内脊线的主方向。如对tr2.BMP求方向图:

 

 

图1 左侧为原图 右侧围方向图

 

用MATLAB函数 blkproc 对图像分块时还将求出图像的掩模,后期求特征点时可用于除去边界的端点。

 

 

图2 图像掩模

 

频率估算:利用标准化的图像和方向图求每个分块脊线的频率。

 

分割:将图像分为可恢复区域和不可恢复区域。

 

滤波:利用由脊线主方向和脊线区域组成的关联信息,用Gabor滤波器来增强脊线结构。

 

滤波并二值化后的指纹图像见图3。

 

 

图3 增强后的指纹图像

 

二 细化

 

细化的基本原则是模版法,只有符合图4的模版时才将中心点去除。

 

 

图4 细化模版

 

为了达到更好的效果,采用了MATLAB函数bwmorph,细化后的指纹图像见图5

 

 

图5 细化后的指纹图像

 

三 抽取特征点

 

为了加快速度,在细化后的图像中,对每个像素点求八领域的像素和n,如果n=7,说明该像素点是端点,如果n=5,说明该像素点是分叉点。

 

为了除去指纹边缘的端点(伪特征点),需要用到图2的掩模,对该掩模做腐蚀处理,见图6

 

 

图6 腐蚀后的掩模

 

如果得到的端点位于黑色区域就认为是伪端点。

 

为了除去指纹内部的伪特征点,求两个特征点之间的距离,如果距离小于一个阈值(例如10),则将两个伪特征点都删除。最后抽取出的特征点见图7,其中红色叉号表示分叉点,蓝色空心圆表示端点。

 

 

图7 抽取出的特征点

 

2 部分代码

 

% RIDGESEGMENT – Normalises fingerprint image and segments ridge region

 

function [normim, mask, maskind] = ridgesegment(im, blksze, thresh)

 

im = normalise(im,0,1);  % normalise to have zero mean, unit std dev

 

fun = inline(‘std(x(:))*ones(size(x))’);

 

stddevim = blkproc(im, [blksze blksze], fun);

 

mask = stddevim > thresh;

 

maskind = find(mask);

 

% Renormalise image so that the *ridge regions* have zero mean, unit

 

% standard deviation.

 

im = im – mean(im(maskind));

 

normim = im/std(im(maskind));

 

3 运行结果

 

 

4 参考文献

 

[1]李金铎. 基于图像处理的指纹识别算法研究[D]. 哈尔滨工程大学, 2016.​

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注