www.pudn.com > eyedemo.rar > segmentiris.asv
% segmentiris - 分割虹膜区域的同时,分离噪声区域,并对眼睑和睫毛进行掩盖
%
% 使用方法:
% [circleiris, circlepupil, imagewithnoise] = segmentiris(image)
%
% 参数:
% eyeimage - 输入图像
%
% 输出:
% circleiris - 虹膜边缘的中心坐标与半径
% circlepupil - 瞳孔边缘的中心坐标与半径
% imagewithnoise - 带噪声的输出定位图像
%
function [circleiris, circlepupil, imagewithnoise] = segmentiris(eyeimage)
% 定义瞳孔与虹膜半径范围
%CASIA
lpupilradius = 28;
upupilradius = 75;
lirisradius = 80;
uirisradius = 150;
% 定义用于加速hough变换的放缩因子
scaling = 0.4;
reflecthres = 240;
% 寻找虹膜与巩膜间边界,即虹膜外边界
[row, col, r] = findcircle(eyeimage, lirisradius, uirisradius, scaling, 2, 0.20, 0.19, 1.00, 0.00);
circleiris = [row col r];
rowd = double(row);
cold = double(col);
rd = double(r);
irl = round(rowd-rd);
iru = round(rowd+rd);
icl = round(cold-rd);
icu = round(cold+rd);
imgsize = size(eyeimage);
if irl < 1
irl = 1;
end
if icl < 1
icl = 1;
end
if iru > imgsize(1)
iru = imgsize(1);
end
if icu > imgsize(2)
icu = imgsize(2);
end
% 在刚才探测得到的虹膜区域中寻找瞳孔
imagepupil = eyeimage( irl:iru,icl:icu);
%寻找瞳孔边界
[rowp, colp, r] = findcircle(imagepupil, lpupilradius, upupilradius ,0.6,2,0.25,0.25,1.00,1.00);
rowp = double(rowp);
colp = double(colp);
r = double(r);
row = double(irl) + rowp;
col = double(icl) + colp;
row = round(row);
col = round(col);
circlepupil = [row col r];
%建立用于记录噪声区域的数组,数组像素具备NaN噪声值
imagewithnoise = double(eyeimage);
%寻找上眼睑
topeyelid = imagepupil(1:(rowp-r),:);
lines = findline(topeyelid);
if size(lines,1) > 0
[xl yl] = linecoords(lines, size(topeyelid));
yl = double(yl) + irl-1;
xl = double(xl) + icl-1;
yla = max(yl);
y2 = 1:yla;
ind3 = sub2ind(size(eyeimage),yl,xl); %
imagewithnoise(ind3) = NaN;
imagewithnoise(y2, xl) = NaN;
end
%寻找下眼睑
bottomeyelid = imagepupil((rowp+r):size(imagepupil,1),:);
lines = findline(bottomeyelid);
if size(lines,1) > 0
[xl yl] = linecoords(lines, size(bottomeyelid));
yl = double(yl)+ irl+rowp+r-2;
xl = double(xl) + icl-1;
yla = min(yl);
y2 = yla:size(eyeimage,1);
ind4 = sub2ind(size(eyeimage),yl,xl);
imagewithnoise(ind4) = NaN;
imagewithnoise(y2, xl) = NaN;
end
%使用阈值法消除睫毛噪声
ref = eyeimage < 100;
coords = find(ref==1);
imagewithnoise(coords) = NaN;