这篇文章 http://www.eeworld.com.cn/qrs/article_2016092030381.html 对虹膜识别的发展和原理进行了介绍,这里进行简要概述:
美国威视VISX的虹膜定位技术应用于准分子激光角膜屈光手术于2005年就通过了FDA认证,其主要原理在于,人眼的虹膜组织表面的纹理图案具有唯一性与稳定性,并且虹膜与眼球的旋转具有同步性,这样就可以修正波前像差手术时,因为术前检查与手术体位变化导致的眼球旋转,从而提高波前像差手术的精确性。
虹膜定位法可以撷取波前像差分析眼球的虹膜影像,精确抓住虹膜位置,取得48个参考点计算眼球转动的角度与偏离的位置,自动补偿修正使检测数据完全吻合,再旋转激光治疗的击发方向,如此一来强化矫正精准度,同时还能筛选出不适合视力矫正的患者。虹膜定位能在准分子激光手术过程中自动跟踪记录。根据患者眼球的旋转运动,自动追踪和补偿旋转的角度,从原有的XYZ三维追踪,扩展为四维旋转追踪,为近视患者“量体裁衣”,进一步提高了个性化准分子激光手术治疗近视、散光、远视的精确性。对于需要更高视觉质量的患者,虹膜定位是必须的,虹膜定位激光近视手术能降低手动定位的人为因素误差,使术后的效果更好。
(1)虹膜图像的获取。虹膜图像的采集就是普通的相机不能采集到清晰的虹膜纹理,因为人的虹膜物理尺寸比较小,并且需要一些近红外光的配合。
(2)虹膜图像的处理。需要把它有效分割出来,进行归一化处理。
(3)虹膜图像特征比对。
虹膜图像获取遇到的难题:由于虹膜物理尺寸小,造成成像系统景深比较小,另外成像过程用户眼睛跟摄像机在一个光轴上,有效对焦不是很方便,还有戴眼镜的话会有反光等因素的干扰。
虹膜识别系统面临的安全问题:虹膜识别系统,每个环节都可能受到安全的攻击,比如说传感器可以伪造数据来进行攻击,包括特征提取和体征比对都会有安全攻击的问题。比如说前端伪造虹膜纹理怎么去进行判断和识别,后端怎么保护虹膜特征模板,保护用户的隐私。
论文《虹膜定位技术研究与实现》链接给出了虹膜内、外边界的定位方法,其中主要用到了图像预处理(消除眼睫毛等影响因素),圆心粗定位及圆拟合等操作。下面对论文中的操作进行说明:
(1)对于图像预处理中用到的图像开操作进行简单描述,具体可参见:http://blog.csdn.net/poem_qianmo/article/details/24599073,作者浅墨对opencv中图像开闭操作有详细的说明。图像开运算属于形态学运算,是先腐蚀后膨胀的过程,它能去除孤点、毛刺和小桥(连接两区域的小点)等特征,消除细小的物体,在纤细点处分离物体,平滑较大物体的边界时不明显的改变其面积。如果使用opencv,对应的函数为:morphologyEx。
(2)虹膜内边界粗定位用的方法:虹膜内边界可以看做一个圆,二值化处理后,如果内边界为1,其他区域为0,那么在圆心处对应的x,y坐标处有极大值出现,从而根据图像灰度变化曲线大概确定圆心坐标及半径。matlab下的算法实现为:x = sum(img);y = sum(img');类似的方法可参见:http://blog.csdn.net/on2way/article/details/40714301。
(3)粗定位之后,根据圆心和半径就可确定内边界的上下左右四条边界,然后根据最大梯度法在矩形边界内找出一组初始边界,根据最小二乘法可以求得边界点拟合出的圆心左边和半径。
下面是腐蚀边缘matlab端的简单实现:
clc; clear all; close all;
I = imread('iris.png');
figure;
subplot(1, 3, 1);
imshow(I);
title('原图');
I = im2bw(I);%变为二值图像
subplot(1, 3, 2);
imshow(I);
I=~I;
SE=strel('square',3); % 定义3×3腐蚀结构元素,对灰度值为1的进行腐蚀运算
J=imerode(~I,SE);
BW=(~I)-J; % 得到边缘图像
subplot(1, 3, 3);
imshow(BW);