【图像识别-指纹识别】指纹特征提取附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.