(武汉大学 数学与统计学院, 武汉 430072)
虹膜识别是较为精确的一种生物识别技术,被广泛认为是21世纪最具有发展前途的生物识别技术[1]。未来的安防、国防、电子商务等多种领域的应用,也必然的会以虹膜识别技术为重点。然而在虹膜识别的实际应用中,采集条件多样化,使用者在采集虹膜图像的过程中,每次会采集多张眼图(30~100张)[2],该过程中(耗时0.01~1 m)可能出现眨眼,眯眼,导致部分采集的眼图虹膜区域过小,不足以进行特征提取,或者会误将眼皮、眼睑和睫毛区域加入特征提取区域[3-4]。
如何正确的确定特征提取的区域,成为虹膜识别技术中的一项重要任务[5-6]。本文设计的算法能够确定眼睑的位置能够确定眼图中眼睛闭合程度,进而从使用者采集的眼图中选出适合特征提取的眼图,从而提高虹膜识别的准确率[7-8]。
本文基于Andreas Uhl and Peter Wild[2]的开源分割算法,进行了优化和改进,训练得到较为稳健的分割算法。分割算法先将采集的图片转换为灰度图,再去除亮斑,用x和y方向的Sobel滤波器探测边界,并且设置阈值去除睫毛。用加权的hough变换找到圆心,并以圆心为原点从12点方向将去除亮斑后的图片进行极坐标展开[9-10]。
再对极坐标图像进行gabor滤波,并从滤波后的图像中查找初始边界,再以初始边界向内外分别查找两条边界。用假设检验的方法从三条候选边界中找出虹膜内边界和虹膜外边界(即瞳孔边界)。
图1 分割算法流程图
本文通过采集设备采集不同条件的虹膜图片,便于验证眼睑检测的鲁棒性:
1) 常规眼图测试集:中科院的开源库CASIA-Iris-Lamp库(分辨率:640*480,格式:jpg)(图2(a))和团队采集的ZY_IRIS库[5](分辨率:640*512,格式:bmp)。
2) 特殊眼图测试集:包含单眼皮、双眼皮、佩戴隐形眼镜(图2(b))、佩戴美瞳(图2(c))、化妆(图2(d))等多种情形的图像;灰度值分布不同的眼图测试集(见图2(e)~(h))。
图2 测试图库
获取分割后的眼图,在眼部图片中划分出上眼睑检测区域和下眼睑检测区域。
下面以一个具体的划分方法进行说明:
S1:在眼部图片中划分出虹膜内边界和外边界,虹膜内边界以内区域称为瞳孔区域,内边界和外边界之间的环形区域称为虹膜区域,找出外边界椭圆的上(A)下(B)左(C)右(D)顶点坐标;以及内边界上(E)下(F)两个顶点和内边界的圆心(O)坐标,参见图3所示。
图3 眼图区域示意图
S2:分别计算出A、B、C、D到圆心的距离a,b,c,d;计算E,F两点间距离e;
S3:线段a以点O向点A扩大为原来的r1(r1∈[1,2])倍,得到点A';c与d分别以点O向点C与D扩大为原来的r2(r2∈[1,2])倍,得到点C'与D';在线段OF上取点F'使得OF'=0.25*e。在眼部图片中划分一个过A'、C'、D'、F'的矩形区域作为上眼睑区域,参见图4(a)所示。
线段b以点O向点B扩大为原来的r3(r3∈[1,2])倍,得到点B'';c与d分别以点O向点C与D扩大为原来的r4(r4∈[1,2])倍,得到点C″与D″;在眼部图片中划分一个过B″、C″、D″、O的矩形区域作为下眼睑区域,参见图4(b)所示。
本文取r1=1.41,r2=1.05,r3=1.4,r4=1.6。
以分割得到的虹膜边界为参考进行划分,能够将有用的眼睑部分包含在检测区域内。划分上下眼睑检测区域有以下优点:可以减少检测范围,从而减少检测空间复杂度,从而减少检测时间;同时可以减少眉毛和眼皮褶皱等因素的干扰;上下眼睑都呈现线性特征,而上下眼睑两侧的灰度分布特征不同,上下眼睑使用不同的算法进行检测,不仅可以防止相互干扰,还能使算法具有更强的鲁棒性。
图4 上下眼睑划分区域示意图
由于睫毛在眼图中呈现明显的线性特征,在边缘检测中容易出现高响应,因此睫毛对眼睑检测影响十分大。下面去除上下眼睑检测区域的睫毛,以减少睫毛对眼睑检测的干扰。
上眼睑检测区域可能出现单根睫毛和重叠睫毛等多种睫毛情形,本文设计了的水平等级滤波器,并选取次大值作为滤波结果,能够在去除睫毛的同时避免眼皮亮斑的干扰。
对于下眼睑,睫毛一般以单根的形式出现,本文先设计了水平方向和垂直方向的边缘滤波器将睫毛检测出来并对睫毛区域进行膨胀,再将下眼睑检测区域的睫毛去除。
图5 滤波器及检测效果图
图5中,(a)为检测上眼睑使用的5*1水平等级滤波器;(b)和(c)分别为检测下眼睑7*1水平边缘滤波器和1*7垂直边缘滤波器。
上眼睑检测中(d)为上眼睑检测区域原图;(e)为去除睫毛后的上眼睑检测区域;(f)为对上眼睑检测区域原图的眼睑检测结果;(g)为对去除睫毛后的上眼睑检测区域的眼睑检测结果。可见去除睫毛后,上眼睑检测的效果得到了很大的提升。
下眼睑检测中(h)为检测的下眼睑检测区域中的睫毛掩码图,其中白色为检测出来的睫毛;(i)为直接利用掩码图(h)去除睫毛后的下眼睑检测区域;(j)为将(h)中睫毛区域膨胀后的睫毛掩码图;(k)为利用掩码图(j)去除睫毛的下眼睑检测区域。可见膨胀能够使得下眼睑检测区域中的睫毛去除的更加干净;(l)为对下眼睑检测区域原图的眼睑检测效果;(m)为对去除睫毛后的下眼睑检测区域的眼睑检测效果,明显去除睫毛可以使得下眼睑检测更加准确。
gabor滤波器是一种加窗的傅里叶变换,适合表达图像的纹理特征,非常适合用于眼睑分布特征的表达。对上眼睑区域和下眼睑区域分别进行滤波,得到上眼睑梯度图和下眼睑梯度图。
具体地,本文使用9*9gabor滤波器虚部对上眼睑区域进行滤波操作:
g(x,y;λ,θ,ψ,σ,γ)=
其中对每个像素点做如下旋转操作:
下眼睑区域使用改进的15*15gabor滤波器的实部进行滤波:
g(x,y;λ,θ,ψ,σ,γ)=
图6 进过滤波后的图像
选取上眼睑检测区域梯度图和下眼睑检测区域梯度图每列像素中具有最大能量值的像素点作为初始候选点,并基于此分别获得上眼睑候选点和下眼睑候选点;
进一步细化,获取上眼睑候选点包括如下步骤:
S1:为了避免光斑以及瞳孔边界对上眼睑检测的干扰。对上眼睑检测区域进行二值化处理:将瞳孔区域各像素点取值为1,其余区域取值为0,得到上眼睑二值图,对上眼睑二值图的瞳孔区域进行膨胀处理,形成第一掩码图,其中取值为1的部分称为掩码区域,参见图7所示(图中白色部分为掩码区域);
图7 第一掩码图
S2:搜索上眼睑梯度图每列像素中具有最大能量值的像素点,得到上眼睑待选点,剔除上眼睑待选点中位于第一掩码区域的像素点,得到上眼睑初始候选点和候选点空缺列集合;
上眼睑梯度图是由多列的像素点组成的,将上眼睑待选点位于第一掩码区域中的像素点剔除之后,这些被剔除的像素点所在的列便缺少了上眼睑待选点,这些缺少上眼睑待选点的列称之为候选点空缺列集合。
S3:对候选点空缺列集合进行抛物线插值,获得插值候选点,插值候选点不在第一掩码区域内;
其中,对候选点空缺列集合进行抛物线插值是按照如下方式进行:选取与候选点空缺列集合中位于外侧的两列分别相邻的两个上眼睑初始候选点作为插值基准点,记为G(xG,yG)和H(xH,yH),利用G(xG,yG)和H(xH,yH)对候选点空缺列集合进行抛物线模板进行插值操作;
插值模板由二次函数构成:
y=ax2+bx+c,
S4:上眼睑初始候选点与插值候选点共同组成上眼睑候选点,确保上眼睑梯度图每列像素中只有一个上眼睑候选点。
S5:基于上眼睑候选点,获取上眼睑候选线段,并根据上眼睑候选线段,获取上眼睑有效点,参见图8(a)所示。
图8 上下眼睑检测效果
进一步细化,为了获取上眼睑候选线段,我们定义:位于相邻两列像素中的两个上眼睑候选点纵坐标之差小于T1up个像素,则这两个上眼睑候选点称之为上眼睑连续点;具有超过T2up个上眼睑连续点的线段定义为上眼睑连续线段,否则,组成该线段的所有上眼睑候选点称之为跳跃点。
获取上眼睑候选线段包括如下步骤:
S501:基于上眼睑候选点,获取上眼睑连续线段;
S502:判断上眼睑连续线段的数量是否大于1,若不大于1,则转入S507,若大于1,则转入S503;
S503:自上眼睑区域一侧向另一侧,依次判断相邻的两个上眼睑连续线段之间是否存在跳跃点,若不存在跳跃点,则转入S506;若存在跳跃点,则转入S504;
S504:判断两上眼睑连续线段相近的两个端点纵坐标之差是否大于T1up,若大于预设像素值,则转入S506,若小于预设像素值,则转入S505;
S505:将两上眼睑连续线段连接为新的上眼睑连续线段,并转入S502;
S506:将两上眼睑连续线段认定为上眼睑候选线段;
S507:将该上眼睑连续线段认定为上眼睑候选线段。
本文中,将两上眼睑连续线段连接为新的上眼睑连续线段采用如下方法:将两端点纵坐标的平均值作为跳跃点的纵坐标。
图9 去除跳跃点效果对比
图9由可见去除跳跃点能够减少眼皮的干扰。
进一步细化,获取上眼睑有效点包括如下步骤:
1)在所有的上眼睑候选线段中,搜索最长的上眼睑候选线段,判断其长度是否小于图片总宽度的a%,若是,则转入2),若否,则转入5);
2) 搜索第二长的上眼睑候选线段,判断其长度是否大于图片总宽度的b%,若是,则转入3),若否,则转入5);
3)判断最长和第二长的上眼睑候选线段长度之和是否小于图片总宽度的c%,若是,则转入4),若否,则转入6);
4)搜索第三长的上眼睑候选线段,判断其长度是否大于图片总宽度的d%,若是,则转入7);若否,则转入6);
5)将最长的上眼睑候选线段上的像素点作为上眼睑有效点,转入8);
6)将最长和第二长的上眼睑候选线段上的像素点作为上眼睑有效点,转入8);
7)将最长、第二长和第三长的上眼睑候选线段上的像素点作为上眼睑有效点,转入8);
8)将得到的上眼睑有效点中位于第一掩码区域的像素点剔除,得到最终的上眼睑有效点。
本文取T1up= 10,T2up= 8,a=45、b=10、c=33、d=10。
图10 获取有效点过程
图10中进一步细化,获取下眼睑候选点包括如下步骤:
S1:对下眼睑区域进行二值化处理,将瞳孔区域和虹膜外边界各像素点取值为1,其余区域取值为0,得到下眼睑二值图,对下眼睑二值图的瞳孔区域和虹膜外边界分别进行膨胀处理,形成第二掩码区域和第三掩码区域,分别参见图11(a)和图11(b)(图中白色部分)所示。
图11 掩码图
S2:搜索下眼睑梯度图每列像素中具有最大能量值的像素点,得到下眼睑待选点,剔除下眼睑待选点中位于第二掩码区域和第三掩码区域的像素点,得到下眼睑候选点。利用第二掩码区域和第三掩码区域进行像素点的剔除,可以有效减小瞳孔区域亮斑边界和虹膜区域外边界对下眼睑候选点检测的干扰。
S3:基于下眼睑候选点,获取下眼睑候选线段,并根据下眼睑候选线段,获取下眼睑有效点,参见图9(b)所示。
进一步细化,我们定义:如果位于相邻两列像素中的两个下眼睑候选点纵坐标之差小于T1down个像素,则这两个下眼睑候选点称之为下眼睑连续点,由至少两个下眼睑连续点形成的线段称之为下眼睑连续线段。本文取T1down= 2。
获取下眼睑有效点包括如下步骤:
S301:基于下眼睑候选点,获取最长的下眼睑连续线段;
S303:搜索该搜索对象内具有最大能量值的像素点,将该像素点与最长的下眼睑连续线段连接为新的最长的下眼睑连续线段,并返回S302;
S304:将最长的下眼睑连续线段上的像素点作为下眼睑有效点。
在步骤S302中,还包括如下剔除步骤:
1)在下眼睑区域的瞳孔区域 ,以通过该预设点的分隔线将下眼睑区域分为上下布置的两个矩形单元;
2)对两矩形单元进行二值化处理,将虹膜外边界各像素点取值为1,其余区域取值为0,得到两个矩形单元二值图,对两矩形单元二值图的虹膜外边界分别进行膨胀处理,形成第四掩码区域(图中白色部分),参见图12,本文中,由于虹膜区域外边界呈现渐变的形态,因此,在第四掩码区域中,上部分的膨胀系数大,可更好的减少虹膜区域外边界的干扰;而下部分膨胀系数过大会过多遮挡下眼睑区域,干扰下眼睑有效点的二次查找,因此下部分采用较小的膨胀系数;
图12 第四掩码图
3) 如果搜索对象中存在位于第四掩码区域的像素点,则将这些位于第四掩码区域的像素点从搜索对象中剔除掉。
图13 减少各种干扰效果
图13中,(a)为未加入去除瞳孔干扰功能,可见上眼睑部分候选点受到瞳孔边界的干扰;(b)为将落入掩码1的候选点所在部分用抛物线插值的效果;(c)为未加入去除光斑干扰功能,可见部分候选点受到光斑的干扰;(d)为将落入掩码1的候选点所在部分用抛物线插值;(e)为未加入去除瞳孔干扰功能,可见下眼睑部分候选点受到瞳孔边界的干扰;(f)为下眼除加入去除瞳孔干扰功能最终检测效果;(g)为下眼睑未加入去除虹膜外边界干扰功能检测效果;(h)为下眼睑加入去除虹膜外边界干扰功能检测效果;(i)为未将落入掩码的候选点所在部分用抛物线插值,而是仅阻止候选点落入掩码1中,导致强制搜索的候选点偏离眼睑;(j)为将落入掩码的候选点所在部分用抛物线插值。
对上眼睑有效点和下眼睑有效点分别进行二次多项式拟合,获得上眼睑拟合曲线和下眼睑拟合曲线。
具体地,上眼睑有效点和下眼睑有效点均通过如下方法分别进行拟合:记有上眼睑有效点(或下眼睑有效点)个数为n,上眼睑有效点(或下眼睑有效点)构成的曲线为f(x),上眼睑有效点(或下眼睑有效点)记为(xi,f(xi)),i=1,2...n。采用最小二乘法对上眼睑有效点(或下眼睑有效点)进行二次多项式拟合,拟合方程为:
φ(x)=a0+a1x+a2x2,
计算平方误差为:
为使R(a1,a2,a3)达到最小,应满足:
即
记:
采取LU分解法解方程:
XA=Y。
获得矩阵A即获得了二次多项式拟合曲线方程的参数,即可获得眼睑的拟合曲线。如图14所示。
图14 眼睑检测效果图
为评价本算法检测结果的准确率,本团队采集人工标记数据集,包含如下数据:1) CASIA-Iris-Lamp库中选取400人每人左右眼各5张共计4 000张眼图的上下眼睑标记数据;2) ZY_IRIS库中选取900人每人左右眼两次采集各5张共计18 000张眼图的上下眼睑标记数据。设计人工标注工具如下。
图15 人工标记工具
针对不同数据库,检测结果如图16所示。
图16 眼睑检测结果
图16中,(a)是本团队数据库,(b)是CASIA-Iris-Lamp数据库。
定义上下眼睑中间的虹膜区域为有效虹膜区域,将人工检测作为ground truth,计算检测的mIoU,以及测试时间。测试结果如表1所示。
表1
虹膜识别技术迅速发展,提高算法精度和适用性能够提高用户体验。本文设计的眼睑检测算法能够识别识别眼睑的位置从而协助虹膜识别判断虹膜可用区域,提高虹膜识别精度。