**基于MATLAB虹膜识别系统的关键技术(1)
虹膜识别技术中,最关键的两项技术就是虹膜图像的预处理和特征提取。设计中用的图像是中科院虹膜库的采集的两幅图像,对其进行系统的操作。
具体操作如下:
1、读入一幅八位的虹膜灰度图像,在MATLAB软件中可以通过编写程序获取灰度图像的直方图,当然也可以通过函数imhist获取直方图。
2、人眼图像中,虹膜是处于巩膜和瞳孔之间,由于瞳孔与虹膜交界处的灰度值突变比较大,即梯度值较大。我们可以先对虹膜内边界进行粗定位,选取合数的二值化阈值,将瞳孔区域与虹膜分离,找到瞳孔所在的区域后,确定瞳孔圆心及半径,然后再对瞳孔位置进行精定位。实验中采用Canny边缘检测算子对瞳孔内边缘进行检测,得到瞳孔的具体位置后,再精确计算出瞳孔圆心和半径,从而定位出虹膜的内边缘。
f =imread('088_1_1.bmp');
%f =rgb2gray(f);图像灰度化
subplot(1,2,1),imshow(f);title('原图像');
%PART1.计算虹膜图像的直方图
nr=zeros(1,256);
[m,n]=size(f);
for i=1:m
for j=1:n
nr(f(i,j)+1)=nr(f(i,j)+1)+1;
end
end
subplot(122);
plot(nr); title('虹膜图像直方图');
%PART2.瞳孔定位
%(1)粗定位
%二值化处理
T=input('Enter the threshold number T:');%根据直方图选取合适的阈值定位瞳孔
T0=T/255;
fb=~im2bw(f,T0);
%找出最大联通域,即瞳孔所在区域
[L,num]=bwlabel(fb);
for i=1:num
[r,c]=find(L==i);
p(i)=length(r);
end
[C,I]=max(p); %找最大联通域
[m,n]=size(L);
for i=1:m %最大联通域保持值1,其它部分置0
for j=1:n
if L(i,j)==I
L(i,j)=1;
else
L(i,j)=0;
end
end
end
figure,imshow(L);title('瞳孔所在区域');
%确定瞳孔圆心及半径:(r01,c01),R1
[r,c]=find(L);
r01=(max(r)+min(r))./2;
c01=(max(c)+min(c))./2;
R1=max([max(r)-r01,min(r)-r01,max(c)-c01,min(c)-c01]);
%(2)精定位
%提取边缘并去噪
fs=edge(f,'canny');%使用canny算子进行边缘检测
figure,imshow(fs);title('canny');
[M,N]=size(fs);
for i=1:M
for j=1:N
Rt=sqrt((r01-i)^2+(c01-j)^2);
if Rt>(R1+4)|Rt<(R1-4)
fs(i,j)=0;
end
end
end
figure,imshow(fs);title('虹膜内边界定位');