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

1 内容介绍

一 指纹增强

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

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

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

【图像识别-指纹识别】指纹特征提取附matlab代码_第1张图片

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

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

【图像识别-指纹识别】指纹特征提取附matlab代码_第2张图片

图2 图像掩模

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

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

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

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

【图像识别-指纹识别】指纹特征提取附matlab代码_第3张图片

图3 增强后的指纹图像

二 细化

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

【图像识别-指纹识别】指纹特征提取附matlab代码_第4张图片

图4 细化模版

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

【图像识别-指纹识别】指纹特征提取附matlab代码_第5张图片

图5 细化后的指纹图像

三 抽取特征点

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

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

【图像识别-指纹识别】指纹特征提取附matlab代码_第6张图片

图6 腐蚀后的掩模

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

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

【图像识别-指纹识别】指纹特征提取附matlab代码_第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 运行结果

【图像识别-指纹识别】指纹特征提取附matlab代码_第8张图片

4 参考文献

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

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机、雷达通信、无线传感器等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

你可能感兴趣的:(图像处理,matlab,图像处理,开发语言)