指纹增强程序Hong_enhancement

来源:互联网 发布:淘宝橱窗推荐自动取消 编辑:程序博客网 时间:2024/04/29 13:14

LinJM  @HQU

本算法是基于Lin Hong et al 的论文“Fingerprint ImageEnhancement: Algorithm and Performance Evaluation”编写而成。其中一个重要的假设就是:沿脊线垂直方向的灰度变化呈正弦波形

程序的流程如下所示:


0 Notation


O 是方向场F 是频率场 R 是区域标记


1 Normalization 

将原始图像的灰度值的均值和方差调整到所期望的均值和方差,减少沿脊和谷方向上的灰度级的变化。


img=imread('25_2.tif');img=double(img);figure,imshow(img./255)[ht,wt] =   size(img);m       =   mean(img(:));v       =   var(img(:));gmidx   =   find(img > m); lmidx   =   find(img <=m); m0=100;v0=100;nimg(gmidx) = m0 + sqrt((v0*(img(gmidx)-m).^2)/v);nimg(lmidx) = m0 - sqrt((v0*(img(lmidx)-m).^2)/v);nimg        = reshape(nimg,[ht,wt]); figure,imshow(nimg./255)  


2 Orientation Image

方向场反映了指纹图像上纹线的方向,其准确性直接影响图像增强的效果。

(1):将图像划分为不重叠的子块(16×16)

(2):利用Sobel算子计算每个子块的像素点的梯度值。

(3):利用以下公式计算中心点在(i,j)的子块的脊线的方向值



其中是以像素θ(i,j)为中心的子块的局部脊线方向。由于指纹脊线方向变化缓慢,并在一个小范围内具有相对稳定的变化趋势。因此可采用高斯低通滤波器进行平滑处理。

dbg_show_orientation=1;img=imread('6_2.tif');img=double(img);% figure,imshow(img./255)hy  = fspecial('sobel');hx  = hy';gx = imfilter(img,hx,'same','symmetric');gy = imfilter(img,hy,'same','symmetric');g   = gx+i*gy;  gblk=blkproc(g.^2,[10 10],inline('sum(sum(x))'));oimg    = 0.5*angle(gblk)+pi/2;[blkht,blkwt]   =   size(oimg)%smoothen_orientation_fieldg =   cos(2*oimg)+i*sin(2*oimg);g =   imfilter(g,fspecial('gaussian',5));oimg=   0.5*angle(g);if(dbg_show_orientation) quiver(cos(oimg),sin(oimg)); axis ij;axis image; axis([0 blkwt 0 blkht]); title('Orientation Image'); pause; end; 

3 Ridge Frequency Image

  在指纹图像的局部非奇异区域里,沿着垂直于脊线的方向看,指纹脊线和谷线像素点灰度值大致形成一个二维的正弦波,定义纹线频率为相邻的两个波峰或波谷之间的像素点数的倒数。

(1):将图像划分为不重叠的子块(16×16)

(2):以图像子块中心点(i,j)为中心,子块脊线方向为短轴,作一个尺寸为的长方形窗口,如图所示:在窗口中按如下公式计算幅值X[K]






更多相关资源请关注 博客:LinJM-机器视觉  微博:林建民-机器视觉


原创粉丝点击