关于构建检测图像中瞳孔的程序的提示

时间:2015-10-25 05:29:21

标签: image-processing machine-learning computer-vision image-segmentation edge-detection

我正在开展一个项目,旨在建立一个程序,自动对眼睛图片中的瞳孔区域进行相对准确的检测。我目前在Python中使用simplecv,因为Python更容易实验。从我刚刚开始,我正在使用的眼睛图片是相当标准化的。然而,虹膜和瞳孔的大小以及虹膜的颜色可以变化。并且眼睛的位置可以在图片之间移动一点。这是来自维基百科的图片,类似于我正在使用的图片: Epicstessie的"MyStrangeIris.JPG"已根据CC BY-SA 3.0

获得许可

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

此外,我尝试了simplecv的内置sobel和canny边缘检测,它不适用于具有较暗虹膜的眼睛。我也怀疑单独的索贝尔或canny可以解决这个问题,因为有时候瞳孔的边缘会有噪音(例如睫毛的反射)

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

  1. 根据某些变量对阈值进行回归
  2. 仅为瞳孔的边缘检测制作特定遮罩
  3. 每个像素的分类(这看起来像构建训练集的许多工作)
  4. 我是否在正确的轨道上?我想与任何对这类问题有更多经验的人联系。任何提示/建议都非常受欢迎。谢谢!

4 个答案:

答案 0 :(得分:2)

我认为,首先你应该放弃机器学习。您还可以尝试“常规”计算机视觉。

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

  1. 靠近影像中心。
  2. 它是棕色/绿色/蓝色圆圈,具有明显的黑色中心,被大多数白色椭圆包围。
  3. 白色椭圆周围有肤色。
  4. 它不能太小或太大(取决于你的图像..)
  5. 构建模型后,尝试找到更好的方法来查找这些功能。很难指出具体的东西,但你可以从:HSV色彩空间,相关性,霍夫变换,形态学操作开始..

    只有在您觉得自己已经用尽所有传统工具之后,才开始考虑功能提取和机器学习。

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

答案 1 :(得分:1)

我已经为图像编写了一个小的matlab代码(你提供的链接),我使用的函数是用于圆检测的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');            

输入图片:

enter image description here

算法结果:

enter image description here

谢谢

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

我认为您可以尝试使用活动形状建模,或者如果您想要一个功能丰富的建模并且不关心执行算法所花费的时间,您可以尝试使用活动外观建模。您可能希望查看这些文章以便更好地理解:

Active Shape Models: Their Training and Application

Statistical Models of Appearance for Computer Vision - In Depth