构建检测图像中瞳孔程序的技巧

Tips on building a program detecting pupil in images

我正在进行一个项目,旨在构建一个程序,该程序可以自动对眼睛图片中的瞳孔区域进行相对准确的检测。我目前在 Python 中使用 simplecv,因为 Python 更容易试验。因为我刚开始,所以我使用的眼睛图片是相当标准化的。然而,虹膜和瞳孔的大小以及虹膜的颜色可能会有所不同。并且眼睛的位置可以在图片之间稍微移动。这是一张来自维基百科的图片,与我正在使用的图片相似: "MyStrangeIris.JPG" by Epicstessie is licensed under CC BY-SA 3.0

我尝试过简单的阈值处理。由于不同的眼睛有不同的虹膜颜色,固定的阈值不适用于所有图片。

此外,我尝试了 simplecv 内置的 sobel 和 canny 边缘检测,尤其是对虹膜较暗的眼睛不起作用。我也怀疑单独使用 sobel 或 canny 是否可以解决问题,因为有时瞳孔边缘会有噪音(例如,睫毛反射)

我具有图像处理和机器学习的入门级知识。目前,我在考虑三种可能性:

  1. 根据一些变量对阈值进行回归
  2. 只为瞳孔的边缘检测制作一个特定的mask
  3. 对每个像素进行分类(构建训练集看起来需要大量工作)

我走在正确的轨道上吗?我想联系任何对此类问题有更多经验的人。任何 tips/suggestions 都非常受欢迎。谢谢!

不确定虹膜分类,但我已经完成了照片中的书面数字识别。我建议调整对比度和饱和度,然后使用 k 最近邻算法对图像进行分类。根据您的训练集,您可以获得高达 90% 的准确率。

我认为您的方向是正确的。进行图像预处理以使分类更容易,然后训练您选择的算法。不过,您可能希望将每个图像视为一个输入向量,而不是对每个像素进行分类!

我认为首先你应该把机器学习放在一边。在 "regular" 计算机视觉方面,您还有很多东西可以尝试。

您需要尝试描述您的问题的模型。做到这一点的一个好方法是坐下来思考你作为一个人如何检测虹膜。例如,我可以想到:

  1. 靠近图像中心。
  2. 它是 Brown/green/blue 圆,具有明显的黑色中心,周围主要是白色椭圆。
  3. 白色椭圆周围有你的肤色。
  4. 不能太小或太大(取决于您的图像..)

建立模型后,尝试寻找更好的方法来找到这些特征。很难指出具体的东西,但你可以从:HSV 颜色 space、相关性、霍夫变换、形态学操作开始..

只有当你觉得用尽所有常规工具后,才开始考虑特征提取和机器学习..

顺便说一句,因为你不是第一个尝试检测虹膜的人,你可以看看其他项目的想法。

我写了一小段matlab图像代码(link你提供了),我用的函数是hough变换圆检测,opencv也实现了,所以移植不会有问题,我只是想知道我是否在写作。

我的结果和代码如下:

        clc
        clear all
        close all

        im = imresize(imread('irisdet.JPG'),0.5);

        gray = rgb2gray(im);

        Rmin = 50; Rmax = 100;
        [centersDark, radiiDark] = imfindcircles(gray,[Rmin Rmax],'ObjectPolarity','dark');

        figure,imshow(im,[])
        viscircles(centersDark, radiiDark,'EdgeColor','b');            

输入图像:

算法结果:

谢谢

我认为您可以尝试 Active Shape Modeling,或者如果您想要一个真正功能丰富的建模并且不关心执行算法所花费的时间,您可以尝试 Active appearance modeling。您可能需要查看这些论文以更好地理解:

Active Shape Models: Their Training and Application

Statistical Models of Appearance for Computer Vision - In Depth