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_field
g =   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-机器视觉  微博:林建民-机器视觉

指纹增强程序Hong_enhancement相关推荐

  1. 基于matlab的指纹识别程序

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 基于matlab的指纹识别程序 前言 一.程序思路是什么? 二.预处理步骤 1.指纹图像的灰度化处理 2.指纹图像的归一化与分割处理 ...

  2. python编程基础(四):if 语句 增强程序鲁棒性

    一. 条件测试 1.判断相等:  == 2.使用 and 判断多个条件:  条件均为 true 的时候,才是 true 类似于 &&  与 3.使用 or 判断多个条件:  条件有一个 ...

  3. stm32指纹考勤机 程序源码包括app程序

    stm32指纹考勤机 (程序源码包括app程序+pcb电路图+原件清单) 实现的功能如下所示: (1) 用户可操控按键对用户进行录入.删除.清空数据以及查看历史记录等操作. (2) 继电器可模拟指纹开 ...

  4. 联想指纹识别程序报错处理

    一开机就出现:"Program operation error ,Please restart the computer and try again .If the problem pers ...

  5. Linux指纹识别程序,linux上应用指纹识别(转载)

    我的本本是DELL xps1530 带有指纹识别,型号是Bus 003 Device 002: ID 0483:2016 SGS Thomson Microelectronics Fingerprin ...

  6. 【图像增强】基于gabor滤波器实现指纹增强含Matlab源码

    1 简介 D.Gabor 1946年提出 窗口Fourier变换,为了由信号的Fourier变换提取局部信息,引入了时间局部化的窗函数. 由于窗口Fourier变换只依赖于部分时间的信号,所以,现在窗 ...

  7. OpenCV C++使用高通滤波和阈值法增强指纹图像

    <数字图像处理>冈萨雷斯 第三版中,P179有一个指纹增强的例子: 先用opencv模拟实现: 处理这个指纹图像 ,其污染是很明显的.自动指纹识别的关键一步是增强指纹的脊线并减小污染.使用 ...

  8. 指纹识别综述(7): 指纹合成

    指纹识别综述系列 1.导论:2.指纹传感器:3.特征提取:4.匹配:5.分类与检索:6.现场指纹识别: 7.指纹合成: 8.唯一性: 9.指纹系统安全:10.深度学习方法:11.专利. 本文主要基于& ...

  9. 指纹识别综述(6): 现场指纹识别

    指纹识别综述系列 1.导论:2.指纹传感器:3.特征提取:4.匹配:5.分类与检索:6.现场指纹识别: 7.指纹合成: 8.唯一性: 9.指纹系统安全:10.深度学习方法:11.专利. 本文主要基于& ...

  10. 用pycharm写python_使用Pycharm编写第一个python程序

    1.打开 Pycharm,选择 Create New Project,创建一个新项目 2.选择Pure Python表示创建一个纯Python程序项目, Location 表示该项目保存的路径,Int ...

最新文章

  1. java 页面错误转发提示页面 errorPage转跳报HTTP500内部服务器错误
  2. OpenCV基本绘图
  3. webpack 入门,说一下那些不入流的知识点、module.exports{ } 中配置说明
  4. cc2530定时器和捕获比较_ALIENTEK 阿波罗 STM32F767 开发板资料连载十四章 输入捕获实验...
  5. syntaxhighlighter 代码高亮 - 插件化
  6. [经典控件]按钮和菜单
  7. java 类变量 赋值_Java 中类变量,实例变量,局部变量的赋值
  8. 基于C#语言的可编程表达式计算器设计
  9. Contrastive Loss
  10. 计算机网络中的网络安全
  11. 新唐单片机 ICP 史上最全教程
  12. echarts盒须图颜色填充
  13. 哈佛商学院20部必看电影
  14. VMSB200A16自定义组织功能配置指导
  15. 幻读和不可重复读的区别
  16. 【最全】软件测试基础理论选择题(含答案)
  17. 各种系统架构图及其简介
  18. SMART 200PLC S型速度曲线应用(梯形图非优化)
  19. css3 transition用法(很详细)
  20. 北京联通数码视讯q7 刷 安卓6.0+遥控器文件教程

热门文章

  1. Java导出Excel以及word富文本
  2. golang 包循环引用的几种解决方案
  3. 培养学生计算机绘画水平,【砺行厚知】电脑绘画社团成果展示 ——鼠标下的创意...
  4. 学习博客:IO流之节点流、处理流
  5. 警惕:先培训后上岗骗局
  6. 算法(14)Java里面将一个正整数分解质因数
  7. Android开发中一些被冷落但却很有用的类和方法
  8. 怎样才能写个好简历?
  9. 安全多方计算之计算平均工资
  10. 铱(Iridium)系统的通信体制