
Matlab程序:利用霍夫(Hough)算法检测定位虹膜位置的mlapp文件,注释详细,附带
操作说明文档,上手简单
虹膜定位这活儿听起来玄乎,其实用霍夫变换在Matlab里搞起来真不难。咱今天这个mlapp程序自
带图形界面,连隔壁实验室六十岁的王教授都能三分钟上手——当然他得先记得把老花镜带上。
先看核心逻辑:程序把用户上传的眼珠子照片先灰度化处理,接着用Canny算子勾边。这里有个小陷
阱,高斯滤波的sigma参数要是调太大,虹膜边缘直接糊成一团浆糊。我试过在咖啡因摄入不足的情况下设
sigma=3,结果程序愣是把人家双眼皮褶皱识别成了虹膜边界。
霍夫变换检测圆的部分直接调Matlab自带的imfindcircles函数,这玩意儿比咱们自己写循环暴力
检测优雅多了。参数设置界面里藏着个敏感度阈值滑块,调到0.9的时候连睫毛影子都不放过,调到0.4又
可能漏检。建议新手先拿程序自带的sample图练手,这张图的黄金参数是:
```matlab
[centers, radii] = imfindcircles(edgeImg,[20 50],...
'ObjectPolarity','dark',...
'Sensitivity',0.85);
```
注意这里ObjectPolarity设成dark是因为虹膜区域通常比巩膜暗。之前有个兄弟把参数设反了,程
序硬是把人家瞳孔识别成高尔夫球,还纳闷怎么虹膜会发光。
图形界面用App Designer拖控件比传统GUID省事十倍。重点看这两个回调函数:
```matlab
% 选择文件按钮回调
function BrowseButtonPushed(app, event)
[file, path] = uigetfile({'*.jpg;*.png','Image Files'});
if ~isequal(file,0)
app.origImage = imread(fullfile(path,file));
imshow(app.origImage, 'Parent', app.origAxes);
end
end
% 开始检测按钮回调
function DetectButtonPushed(app, event)
grayImg = rgb2gray(app.origImage);
edgeImg = edge(grayImg, 'canny', [0.1 0.2], 1.5);