论文导读:指纹图像的预处理是正确地进行特征提取、匹配等操作的基础。所以对于采集到的指纹图像首先进行灰度处理。则如果需要进行对比度展宽。
关键词:指纹图像,灰度处理,对比度展宽
前言
在指纹自动识别系统中,指纹图像的预处理是正确地进行特征提取、匹配等操作的基础。在指纹图像采集过程中,由于采集仪器本身和手指结构特点,以及指纹采集时用力不均等情况,容易造成图像部分区域信号太弱(颜色太淡)或者太强(颜色太黑),给后续的指纹处理带来较大的困难,所以对于采集到的指纹图像首先进行灰度处理,提高指纹图像的对比度。通常,人们习惯对指纹图像进行归一化处理。这里,首先介绍图像归一化处理的算法。论文参考网。
1.归一化
图像归一化是像素层次的操作,它将图像的整体灰度均值和方差进行平移,把不同指纹图像的对比度调整到一个固定的级别。但是对整幅图像进行归一化并不改变图像中各部分的相对对比度。归一化的目的是为了消除传感器本身的噪声以及因为手指压力不同而造成的灰度差异。
按照FBI推荐我们假设所有指纹图像都是从分辨率为500dpi的扫描仪上得到。设F为输入的灰度指纹图像,其大小为m×n,m、n的取值范围一般由指纹输入设备的分辨率决定。论文参考网。f ( i,j) 代表指纹图像在( i, j ) 处的灰度值, 取值范围一般是0到255之间的整数,表示输入图像有256级灰度级。图像大小为NxN的指纹灰度图像F的均值M,方差V分别为:
M=
V=
其中f(i,j)是指纹图像中像素点(i,j)的灰度。
对原始指纹灰度图按下式进行规格化

其中M0,VAR0是期望的灰度均值和方差。

图1 指纹原图像图2 指纹归一化后图像
图像灰度归一化就是提高指纹图像弱区域的灰度,降低指纹图像强区域的灰度,从而把图像统一到一个固定的灰度内,这种方法不利于提高质量较差的指纹图像中的纹线、谷线对比度,不利于后续的指纹方向图的处理,本文将采用对比度线线展宽的方法来处理指纹图像中的灰度。
2.对比度线行展宽
对比度线线展宽,其目的是为了提高因采集设备以及由于手指压力不同而造成的对比度不足。对比度线性展宽实际上就是图像灰度值的线性映射。假设处理后图像与处理前图像的量化级数相同,即处理前后图像的灰度分布范围均为[0,255],则如果需要进行对比度展宽,从原理上说,只能通过抑制非重要信息的对比度来腾出空间给重要信息进行对比度的展宽。
2.1算法设计思想如下:
对于图1的指纹图像进行处理,设原指纹图像的灰度为f(i,j),处理后图像的灰度为g(i,j),取值范围一般是0到255之间的整数,表示输入图像有256级灰度级。论文参考网。对比度线性展宽的原理示意图如图3所示。
 
图3 对比度线性展宽映射关系
指纹原图中的指纹纹线的灰度分布假设在[fa,fb]的范围内,则对比度线性展宽的目的是使处理后的指纹图像的灰度分布在[ga,gb]的范围内,当 f<(fb-fa)< g=(gb-ga),则可达到对比度展宽的目的。将对比度展宽的计算公式如下:
g(i,j)= 
(i=1,2,,m;j=1,2,,n)其中, ,当 ,则可对非重要背景进行抑制, ,则能对指纹纹线的对比度展宽增强。
2.2算法实现:
函数名称:
*GrayStretch()
*参数:
*LPSTR lpDIBBits - 指向源DIB图像指针
*LONG lWidth - 源图像宽度(像素数)
*LONG lHeight - 源图像高度(像素数)
*BYTE bX1 - 灰度拉伸第一个点的X坐标
*BYTE bY1 - 灰度拉伸第一个点的Y坐标
*BYTE bX2 - 灰度拉伸第二个点的X坐标
*BYTE bY2 - 灰度拉伸第二个点的Y坐标
*返回值:
*BOOL- 成功返回TRUE,否则返回FALSE。
*说明: 该函数用来对图像进行灰度拉伸。
BOOLWINAPI GrayStretch(LPSTR lpDIBBits, LONG lWidth, LONG lHeight, BYTE bX1, BYTEbY1, BYTE bX2, BYTE bY2)
{
//指向源图像的指针
unsignedchar* lpSrc; // 循环变量
LONG i;
LONG j; //灰度映射表
BYTE bMap[256]; //图像每行的字节数
LONG lLineBytes; //计算图像每行的字节数
lLineBytes= WIDTHBYTES(lWidth * 8); // 计算灰度映射表
for(i = 0; i <= bX1; i++)
{
//判断bX1是否大于0(防止分母为0)
if(bX1 > 0)
{
//线性变换
bMap[i]= (BYTE) bY1 * i / bX1;
}
else
{
//直接赋值为0
bMap[i]= 0;
}
}
for(; i <= bX2; i++)
{
//判断bX1是否等于bX2(防止分母为0)
if(bX2 != bX1)
{
//线性变换
bMap[i]= bY1 + (BYTE) ((bY2 - bY1) * (i - bX1) / (bX2 - bX1));
}
else
{
//直接赋值为bY1
bMap[i]= bY1;
}
}
for(; i < 256; i++)
{
//判断bX2是否等于255(防止分母为0)
if(bX2 != 255)
{
//线性变换
bMap[i]= bY2 + (BYTE) ((255 - bY2) * (i - bX2) / (255 - bX2));
}
else
{
//直接赋值为255
bMap[i]= 255;
}
}
//每行
for(i= 0; i < lHeight; i++)
{
//每列
for(j= 0; j < lWidth; j++)
{
//指向DIB第i行,第j个像素的指针
lpSrc= (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 1 - i) + j; //计算新的灰度值
*lpSrc= bMap[*lpSrc];
}
} //返回
returnTRUE;
程序实现窗口如图4所示:

图4 灰度拉伸参数设置图
这里把原指纹图像的灰度fa、fb分别设为50,160,根据 , 对比度展宽的条件,通过对ga、、gb灰度值调整,展宽后的指纹图像的灰度ga、gb设为30,235,能较好的提高指纹脊线和谷线的对比度,改善图像的清晰度。对图1处理后的指纹图像如下图5所示:

图5 对比度展宽后的指纹图像
小结:
对比使用这两种算法处理的同一个指纹图像的效果图,我们会发现对比度展宽较能改善指纹图像的灰度,提高脊线和谷线的对比度,为后续求指纹的方向图奠定基础。该程序在visual c++软件中调试实现,该算法简单、快捷,且能很好的抑制图像中的噪声,不失为一种图像灰度处理的好方法。
参考文献
[1]朱虹,数字图像处理基础,科学技术出版社,2005.4
[2]余锦华、陈建华、施心陵,指纹图象的预处理,计算机工程与设计,2004.12
|