虹膜图像预处理在实际获取的图像中,虹膜只占一部分区域。
图像中还包括瞳孔、眼睑、睫毛及眼睛和人脸的其它部分。
所以,在对虹膜纹理特征进行提取之前,要把虹膜区域从图像中分割出来。
其分割准确与否直接影响到后面的特征提取及匹配精度,即如果分割不准确,则虹膜识别效果就差,很可能造成误判,使识别算法失效。
针对Canny[2]算法优良的边缘检测性能及虹膜边界的特点,本文采用了该算法,与Hough变换相结合,用于定位虹膜内外边界、分割上下眼睑,采用阀值法剔除睫毛。
2.1 虹膜内外边界的定位虹膜的内边界即内边缘与瞳孔相交接的部分,外边界即外边缘与巩膜相交接的部分,均近似为圆形,因此定位虹膜内外边界就是要确定这两个拟合圆的圆心和半径。
2.1.1 Canny算子和Hough变换的基本原理(1)Canny边缘检测算子边缘是图像的基本特征,保留了原始图像中相当重要的信息,而又使得总的数据减小了很多。
准确提取边缘既能减少图像处理的信息量,又可重点描述物体的形态特征。
传统的边缘检测算子如Roberts、Sobel、Prewitt、Kirsch和Laplacian 等算子都是局域窗口梯度算子,由于它们对噪声敏感,所以在处理实际图像中效果并不理想。
1986年,Canny提出边缘检测算子应满足以下3个判断准则:信噪比准则;定位精度准则;单边缘响应准则,并由此推导出了最佳边缘检测算子--Canny算子。
该算子具有定位精度高、单一边缘和检测效果好等优点。
它主要分以下四步:○1平滑图像Canny边缘检测算子是高斯函数的一阶导数,是对信噪比与定位精度之乘积的最优化逼近算子。
选择合适的高斯低通滤波器来平滑原始的虹膜图像,既可以取得更加柔和的平滑效果,又不至于破坏图像中的边沿,同时还可以消除原始图像的高频噪声。
Canny算法首先用二维高斯函数的一阶导数,对图像进行平滑,设二维高斯函数为:22221(,)exp()22x y G x y πσσ+=-(2.1)其梯度矢量为:G x VG G y ⎡⎤∂∂=⎢⎥∂⎣⎦(2.2)把G 的2个滤波卷积模板分解为2个一维的行列滤波器:221222exp()exp()()()22G x y kx h x h y x σσ∂=--=∂ (2.3)221222exp()exp()()()22G y x ky h y h x y σσ∂=--=∂ (2.4)其中,k 为常数,σ为高斯滤波器参数,它控制着平滑程度。
σ小的滤波器,虽然定位精度高,但信噪比低;σ大的情况则相反,因此要根据需要适当地选取高斯滤波器参数σ。
○2计算梯度的幅值和方向传统Canny 算法采用22⨯邻域一阶偏导的有限差分来计算平滑后数据阵列的梯度幅值和梯度方向。
其中,x 和y 方向偏导数的2个阵列[],x P i j 和[],y P i j 分别为: [][][][][],(,1,1,11,)2x P i j I i j I i j I i j I i j =+-+++-+ (2.5) [][][][][],(,1,,11,1)2y P i j I i j I i j I i j I i j =-+++-++(2.6)像素的梯度幅值和梯度方向用直角坐标到极坐标的坐标转化公式来计算,用二阶范数来计算梯度幅值和方向,分别为:[],M i j =(2.7) [][][](),arctan ,,y x i j P i j P i j θ=(2.8)○3 对梯度幅值进行非极大值抑制为了精确定位边缘,必须细化梯度幅值图像[],M i j 中的屋脊带,只保留幅值局部变化最大的点,这一过程就是非极大值抑制。
如图2-1。
在非极大值抑制过程中,Canny 算法使用33⨯大小、包含8个方向的邻域对梯度幅值阵列[],M i j 的所有像素沿梯度方向进行梯度幅值的插值。
在每一个点上,邻域的中心像素[],m i j 与沿梯度方向的2个梯度幅值的插值结果进行比较,[],F i j 是像素邻域中心处沿着梯度方向的扇形区域,非极大值抑制在此区域进行。
如果邻域中心点的幅值[],m i j 不比梯度方向上的2个插值结果大,则将[],m i j 对应的边缘标志位赋值为0,这一过程把[],M i j 宽屋脊带细化为一个像素宽,并且保留了屋脊的梯度幅值。
非极大值抑制(Non -Maxima Suppression,NMS)过程的数学表示为:[][][],(,,,)N i j NMS M i j i j ζ=(2.9)1001223378123456图2-1 Canny 算子非极大值抑制○4 检测和连接边缘双阈值算法是对经过非极大值抑制的图像[],N i j 分别使用高、低2个阈值hS 和l S 分割得到2个阈值边缘图像[],h T i j 和[],l T i j 。
由于图像[],h T i j 是由高阈值得到的,因此它应该不含有假边缘,但[],l T i j 可能在轮廓上有间断。
因此双阈值算法要在[],h T i j 中把边缘连接成轮廓,当达到轮廓端点时,该算法就在由低阈值得到的边缘图像[],l T i j 的8邻域位置寻找可以连接到轮廓上的边缘,这样,利用递归跟踪的方法不断地在[],l T i j 中搜集边缘,直到将[],h T i j 中所有的间隙都连接起来为止。
(2)Hough 圆检测Hough 变换是一种用于区域形状描述的方法,经典的Hough 变换常常被用于直线段、圆和椭圆的检测,广义的Hough 变换可以推广至任意形状。
两种变换的基本思想是将图像的空间域变换到参数空间,用大多数边界点满足的某种参数形式来描述图像中的曲线区域边界。
Hough 变换可以用于检测图像解析曲线,其中x 为解析曲线上的点,a 为参数空间上的点。
对于圆,设其半径为r 、圆心为,则圆方程:222()()i i x a y b r -+-=(2.10)图像空间的圆对应着参数空间(,,)a b r 中的一个点,一个给定点(,)i i x y 约束了通过该点的一簇圆参数(,,)a b r 。
传统的Hough 圆检测是将空间域的每个轮廓点带入参数方程,其计算结果对参数空间(,,)a b r 中的量化点进行投票,若投票超过某一门限,则认为有足够多的图像点位于该参数点所决定的圆上。
由于其需要逐点投票、记录,故花费的时间较长,占用的计算机存储量也较大。
2.1.2 本文采用的Canny 算子如图2-2(a)所示的虹膜图像,很多边缘对于检测虹膜内外边界来说都是干扰边缘,如果在计算梯度时,对x 、y 两个方向均进行计算,则会产生过多过细的边缘,而这些边缘又是不需要的,而且会对提取有用的边缘起干扰作用。
此时,如果有选择性的重点检测某一或某些方向的边缘,则既能节省时间又有利于排除干扰。
针对虹膜图像,由于上下部分常常会被眼睑遮挡,如果将眼睑边界也过清晰地检测出来了,则对下一步的Hough 圆变换检测外边界产生很大的干扰,特别是眼睑基本成弧形,与圆形接近。
为削弱非虹膜边界的影响,可以在进行边缘检测时重点检测有用的边缘,在保留足够的虹膜边界信息的同时尽量削弱其它边界的影响。
注意到上下眼睑边界仅限于水平方向,在计算梯度幅值时对水平方向偏导值赋以较大的权重,而对竖直方向偏导值赋以较小的权重,从而削弱水平方向上的边界。
(1)本文在定位虹膜外边界时,按照这一思想对Canny 算子进行了改进,在计算梯度时只计算水平方向上的梯度,以避免过多地检测出眼睑边缘。
即:X 方向偏导数:(,)0f x a =(,)a b[][][][][],(,1,1,11,)2x P i j I i j I i j I i j I i j =+-+++-+(2.11)Y 方向偏导数:[],0y P i j =(2.12)(a)原始图像缩放0.4(b)竖直权重为0(c)两方向均匀权重(d)水平权重为0图2-2虹膜图像以及Canny 边缘检测的图像其中滤波时对边缘处,为简化,未处理,造成有虚假边缘,定位时除去,并不影响Hough 定位圆。
(2)在非极大值抑制时,选择比较邻域为半径1.5像素范围之内,这样的到的边缘图像相对较好,边缘大于等于一个像素,小于等于两个像素,考虑到Hough 参数的量化,比选择半径为1的邻域范围造成的误差小,而与选择半径2的邻域边缘图相比,边缘得到了较好的细化。
如图2-3。
(a)1.5邻域半径抑制(b)2邻域半径抑制(c)1邻域半径抑制(d)1.5邻域半径抑制 (e)2邻域半径抑制 (f)1邻域半径抑制图2-3不同邻域半径边缘检测图(3)此外实际处理过程进行了少许改变:○1为了减小处理的数据量,在定位虹膜内外边界时,首先对虹膜图像进行了缩放,而且缩放定位后再折换成原始图像的圆,原始图像大小为320280⨯。
○2对于Canny 检测处理后的边缘图像,直接一次将内外两圆定位出,在定位外圆时比较准确,但是定位内圆时由于受其外围边缘的影响,很容易造成定位失败,因此首先定位出外圆,然后在外圆的范围中定位内圆,大大减小了干扰。
○3由于内圆相对较小,定位外圆时缩放比例0.4,定位内圆时缩放比例为0.6。
2.1.3 本文采用的Hough 变换圆检测算法直接使用Hough 变换是将图像上的每个边缘点都代入方程,且半径搜索范围从O 到图像平面所能容纳的上限,因此计算量非常大。
本文对其进行了修改,并根据先验知识及所采集的虹膜图像的特点尽可能地减少搜索范围及参与Hough 变换的点数以高效率。
过程如下: (1)对图像进行边缘检测得到边缘图像;(2)根据先验知识,分别确定内外边界圆半径的范围,从而减小搜索半径; (3)圆的参数方程可改写为:cos ,sin a x r b y r θθ=-=-(2.13)将图像空间中的边缘点而不是原图像中的每个点逐一代入上式,求出参数(,)a b 值。
从图中可以看出,虹膜外边界左右两侧的部分所受干扰较少,边界质量较高,因此可以限制θ的取值范围,相当于只统计左右两侧部分的边界点。
由于虹膜边界圆的圆心不可能太靠近图片边缘(否则就没有将整个虹膜区域采集进来,虹膜信息可能太少而无法用于识别),即圆心应位于图像中间区域的某个范围内,因此如果(,)a b 位于这一范围内,则将相应的累加阵(,)H a b 中的元素加1,否则加0;(4)找出(,)H a b 中元素的最大值,即是对应半径为r ,圆心为(,)a b ,且圆周上边点最多的圆,即为边界圆。
2.1.4 虹膜内外边界的定位本文先定位虹膜外边界,然后再在外边界范围以内定位内边界,从而能更快更准地定位内边界。
虹膜外边界上下部分常常被眼睑部分地遮挡,且往往还有睫毛的干扰,所以对外边界的定位先采用本文所述的改进的Canny算子进行边缘检测,从而在保留足够多的边缘信息的情况下尽量少地检测出干扰边缘,再利用改进的Hough变换进行圆检测,确定外边界圆的圆心和半径。