马超玉,赵梦洁,韦钦磊,任国仲
(长春师范大学物理学院,吉林 长春 130032)
随着生物识别的广泛应用,虹膜识别因其多方面的优势而具有广泛的应用前景。虹膜识别系统通常是由图像采集、定位、特征提取以及识别等环节组成。由于目前特征提取及识别算法已相当成熟,因此虹膜区域定位分割成为该项技术的瓶颈。目前国内外常用的算法主要是Daugman提出的微积分算法和Wildes提出的霍夫变换算法以及这两类算法的改进算法[1-3]。这两类方法定位精度较高,但是都面临着计算量大、耗时较多以及易受噪声影响的问题,限制了虹膜识别技术的广泛应用。为提高计算速度并且保证定位的有效性,本文提出了基于机器视觉技术的虹膜分割方法。首先概括介绍机器视觉技术及视觉软件Halcon;其次介绍了虹膜区域粗定位Bolb分析方法;然后介绍了虹膜区域精定位;最后给出实验方法以及虹膜定位分割继续提升的方向。
机器视觉是利用计算机模拟人的视觉功能,它是一门综合的技术,一般涉及计算科学、模式识别、神经生物学、图像处理、人工智能等诸多领域的交叉学科[4]。因该技术具有速度快、信息量大、功能较全面等特点,在工业领域得到了长足的发展。而机器视觉技术在虹膜识别领域的应用鲜有报道,因此,本文运用机器视觉技术在虹膜识别领域进行创新研究。
Halcon是德国MVtec公司开发的机器视觉算法包。Halcon具有精确、全面、快速和鲁棒的特点,被广泛应用于工业上。日本以及欧洲的工业界公认为Halcon是最具效能的机器视觉软件[5]。Halcon中的Hdevelop开发环境包括图像窗口、变量窗口、算子窗口和程序编辑器窗口,集中了程序、分析、设计和编程,并且能够与用户交互。Hdevelop可以导出C、C++、C#、VB等类型的程序,因而有助于在VisualStudio软件整合程序[6]。
粗定位采用Bolb分析的方法,该分析方法是将图像中纹理相似、颜色近似相同等特征组成的一块连通区域分析出来。其过程是将图像进行二值化处理,阈值分割后得到图像的前景和背景,进而进行连通区域检测得到Blob块的过程[7]。简单来说,Blob分析就是在一块“光滑”区域内,将出现“灰度变化”的小区域找寻出来。Blob分析主要包括获取图像、图像预处理、图像分割、特征提取。
机器视觉软件Halcon提供了获取图像的两种方式,分别是从图像采集设备获取图像和从本地磁盘读取已采集的图像[5]。方式一,通过软件提供的图像采集助手从图像采集设备获取图像,可用ImageAcquisition自动检测相机,采用算子grab_image采集图像;方式二,获取本地图像要通过算子read_image来实现。Halcon支持多种图像格式,本研究采用的图像库是中科院CASIA库,因此本研究采用方式二读取已经采集好的本地磁盘图像,如图1(a)所示。读取图像代码为read_image(Image,RootDir),其中,Image表示输出的图像变量,RootDir表示图像路径。
(a)原图像
(b)增强图像图1 CASIA虹膜图像
一般情况下,图像采集环境较为复杂,所形成的图像效果相对较差,因而需要对图像进行预处理操作,以削弱图像中的无关信息,增强有关信息,从而有利于后续处理的可靠性。算子emphasize可以增强图像中的高频信息,使图像中亮的位置更亮,暗的位置更暗,因此调用算子emphasize可以对图像进行增强处理,Halcon代码为emphasize(Image,ImageEmphasize,5,5,1),增强效果如图1(b)所示。
另外,在数字图像处理过程中,以圆、方框等方式从被处理的图像中勾勒出需要处理的区域,称为感兴趣区域。因图像中有眉毛等其它信息,会对虹膜定位产生干扰,因此,需要选择出含有虹膜的区域作为感兴趣区域。可以选择矩形区域,也可以选择圆形区域,如果选择了矩形区域,对应的算子应当为gen_rectangle1,具体代码是gen_rectangle1 (ROI,x1,y1,x2,y2),ROI为选中的感兴趣区域,x1和y1分别表示左上角的行坐标和列坐标,x2和y2分别表示右下角的行坐标和列坐标,坐标的单位统一为像素。感兴趣区域如图2中矩形框所示。
图2 感兴趣区域
图像分割常常采用阈值分割的方式来实现。阈值分割特别适用于目标和背景灰度级不同的图像,对于虹膜图像来说,虹膜区域、巩膜区域以及瞳孔区域分别占据不同的灰度级。在Halcon中阈值分割用算子threshold来实现。具体代码为threshold (Image,Region,a,b);其中,Image为输入图像变量,Region 是分割后的区域变量,参数a和b分别为阈值下限和上限,本文阈值在a与b之间。
虹膜图像如图1所示,瞳孔区域、虹膜区域以及除二者之外的区域在灰度上具有明显的阶梯性。其灰度直方图如图3所示。经threshold算子处理后的效果如图4(a)所示。为了后续处理,调用算子fill_up进行瞳孔区域填充。另外,需要调用connection算子来验证目标和背景之间是分离的。如图4(b)所示,用不同颜色来区分不同连通域块。
图3 直方图界面
(a)阈值分割
(b)填充瞳孔图4 分割图像
根据特征对瞳孔及虹膜区域进行提取。由于瞳孔区域和虹膜区域有明显的圆形,在图像中的位置具有一定的规律特征,因此,本文采用区域的面积、椭圆形度及区域的重心行列坐标选取出虹膜及瞳孔区域。选取特征用到的算子为select_shape。选取瞳孔区域的具体代码为select_shape(Regions:SelectedRegions:Features,Operation,Min,Max:)。其中,Regions为待选区域,SelectedRegions为选出的特征区域,Features为输入特征,此特征可为一个,也可为多个,Min和Max表示输入特征的范围的最小值和最大值。提取效果如图5所示。
(a)瞳孔区域
(b)虹膜区域图5 特征提取
选出的瞳孔区域及虹膜区域只是粗略地定位出虹膜所在区域,为了更精确地定位出虹膜内外边界,还要对需去除的区域进行处理。通常,将区域转化为轮廓,计算轮廓上点的坐标与区域重心的距离,将不满足距离阈值的点去掉,将剩下的点进行圆拟合,拟合出的圆即为虹膜的内外边界。所用到的算子有:区域转化为轮廓算子gen_contour_region_xld,得到轮廓点坐标算子get_contour_xld,计算两点间距离算子distance_pp,拟合圆算子gen_circle。瞳孔精定位VC程序如下:
{
//**区域转轮廓
GenContourRegionXld(ho_ConnectedRegions, &ho_Contours, "center");
//轮廓点坐标
GetContourXld(ho_Contours, &hv_Row, &hv_Col);
TupleLength(hv_Row, &hv_Length);
hv_count = 0;
hv_pupilradius = 0;
{
HTuple end_val102 = hv_Length-1;
HTuple step_val102 = 1;
for (hv_Index=0; hv_Index.Continue(end_val102, step_val102); hv_Index += step_val102)
{
DistancePp(hv_Row2,hv_Column2,HTuple(hv_Row[hv_Index]),HTuple(hv_Col[hv_Index]), &hv_Distance);
if (0 !=
(HTuple(hv_Distance>hv_lpupilradius).TupleAnd(hv_Distance { hv_pupilradius = hv_Distance+hv_pupilradius; hv_count += 1; } } } //***圆心及半径 hv_pupilradius = hv_pupilradius/hv_count; hv_pupil_Row = hv_Row2; hv_pupil_Col = hv_Column2; //***瞳孔拟合 GenCircle(&ho_Circle, hv_pupil_Row, hv_pupil_Col, hv_pupilradius); } 虹膜内外边界定位效果如图6所示,其中,内圆为虹膜的内边缘,外圆为虹膜的外边界。 一般情况下,上下眼睑对虹膜区域有遮挡,特别是虹膜的正上方区域。首先选出上眼睑所在的区域图像,然后对图像进行亚像素canny边缘检测,根据上眼睑轮廓的特征选出真实的眼睑轮廓,根据轮廓上点的坐标拟合出眼睑所在的二次曲线[8]。具体用到的Halcon算子有:图像边缘检测算子edges_sub_pix,选择轮廓特征算子select_shape_xld,得到轮廓的点坐标算子get_contour_xld。 根据眼睑轮廓的点坐标拟合二次曲线的过程,即求解矩阵中a、b、c值的过程。假设所求解的二次曲线的方程式为 f(x)=ax2+bx+c, 将此二次曲线转化为矩阵的形式为 Ax=B, 其中,A=(X2,X,1),X=(a,b,c),B=f(x),A和B为选出的眼睑轮廓点的坐标矩阵。 求解矩阵方程,可得到二次曲线的系数,进而拟合出上眼睑,具体用到的算子为求解矩阵方程算子solve_matrix。 生成二次曲线系数部分VC程序如下: { CreateMatrix(hv_Y1.TupleLength(), 3, 1.0, &hv_MatrixA1); CreateMatrix(hv_Y1.TupleLength(), 1, hv_Y1, &hv_MatrixACol11); CreateMatrix(hv_Y1.TupleLength(), 1, hv_Y1*hv_Y1, &hv_MatrixACol01); SetSubMatrix(hv_MatrixA1, hv_MatrixACol11, 0, 1); SetSubMatrix(hv_MatrixA1, hv_MatrixACol01, 0, 0); CreateMatrix(hv_Y1.TupleLength(), 1, hv_X1, &hv_MatrixB1); //解方程即可得到a,b,c的系数,记为矩阵hv_MatrixX1 SolveMatrix(hv_MatrixA1, "general", 0, hv_MatrixB1, &hv_MatrixX1); } 拟合下眼睑采用与上眼睑同样的方法,效果如图6所示。其中,抛物线即为拟合出的上下眼睑。 (a) (b) (c) (d) (e) (f)图6 拟合结果 实验数据采自中国科学院自动化研究所的CASIA-IrisV4中的CASIA-Iris-Syn数据库,该数据库包括1 000只眼睛的虹膜图像,每只眼睛采集10个样本,共10 000幅虹膜图像,图像的分辨率为640×480。实验开发工具为Halcon17.12.0.0,系统平台为Windows7,实验算法流程如图7所示,部分定位结果如图6所示。从定位结果可以看出,虹膜区域定位较为准确,定位速度较快。 图7 算法流程图 基于视觉技术的虹膜定位方法不仅定位效率高,而且定位准确率也高。但是,不同的虹膜采集设备采集出的虹膜图像质量不同,本文的处理方法并不能通用于所有的虹膜图像分割。因此应根据不同的虹膜应用场景,采用不同的图像处理方法。如何采用同一方案,处理不同场景下的虹膜图像,是本研究的改进方向。3.2 眼睑定位
4 实验
5 结语