【问题标题】:Tips on building a program detecting pupil in images构建图像中瞳孔检测程序的技巧
【发布时间】:2016-01-24 10:02:06
【问题描述】:

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

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

此外,我尝试了 simplecv 的内置 sobel 和 canny 边缘检测,它不适用于虹膜较深的眼睛。我也怀疑单独使用 sobel 或 canny 能否解决问题,因为有时瞳孔边缘会出现噪音(例如,睫毛的反射)

我具备图像处理和机器学习方面的入门级知识。现在,我在考虑三种可能:

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

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

【问题讨论】:

  • 好的。我对这个网站比较陌生。我想知道为什么我的问题被否决了?只是想知道,这样我下次发帖时可以改进。
  • 可能是问题太宽泛,没有具体的解决方案。无论如何,我认为这是一个详细的问题!
  • @Flying_Banana 谢谢 :)

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


【解决方案1】:

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

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

  1. 它位于图像中心附近。
  2. 它是棕色/绿色/蓝色圆圈,具有明显的黑色中心,周围大部分是白色椭圆。
  3. 白色椭圆周围有肤色。
  4. 它不能太小或太大(取决于您的图像..)

构建模型后,请尝试寻找更好的方法来找到这些特征。很难指出具体的东西,但您可以从:HSV 颜色空间、相关性、霍夫变换、形态学运算开始。

只有在你觉得你已经用尽了所有常规工具之后,才开始考虑特征提取和机器学习。

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

【讨论】:

  • 好建议。我同意,我会像你提到的那样尝试一些更常规的计算机视觉。
  • 我已经对这些主题进行了一些研究,并阅读了一些关于 stackoverflow 的帖子。我发现的与我正在做的有点不同。这就是我决定在这里发帖的原因。但我一定会继续寻找相关项目。谢谢!
【解决方案2】:

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

输入图像:

算法结果:

谢谢

【讨论】:

  • 您好,谢谢!输出看起来很有希望。我正在尝试将此移植到opencv。由于opencv的圆形霍夫变换与matlab的有点不同,我正在试验它。然后我将尝试在我的样本数据上对此进行测试。但是,我不确定这是否适用于识别虹膜中的瞳孔,因为瞳孔的灰度往往与虹膜的强度较低但差别不大。我一定会让你知道我的结果。
  • 尝试发布您的结果。一切顺利。
  • 嗨,我首先在opencv中尝试了HoughCircles()函数,它不工作,因为它使用了与matlab不同的边缘检测方法。所以在试验了一下之后,我实际上在matlab上测试了我的样本数据。将对比度调高后,matlab的houghcircle函数99%的时间都在识别虹膜,1%的时间可以通过调整因子来识别。所以太好了!
  • 但是,houghcircle 函数都不能用于识别瞳孔,因为瞳孔和虹膜之间的对比不那么明显。但是,我可能会使用分类器以某种方式裁剪图像并提高对比度。
【解决方案3】:

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

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

【讨论】:

  • 谢谢。由于那里有很多学习算法,我一直在研究一些但不确定哪一个会起作用。我一定会调查 k 近邻。
  • 请注意,许多机器学习算法都是二进制的,也就是线性分类器。他们只能将某物分为两类。如果您想要两个以上,例如,您想要从学生中对人的种族进行分类,您想要寻找可以处理多个类别的分类器。 knn 恰好是完成这项工作的最直观、最简单的算法!
【解决方案4】:

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

Active Shape Models: Their Training and Application

Statistical Models of Appearance for Computer Vision - In Depth

【讨论】:

  • 谢谢!这很有趣。我会调查的。
  • 如果对您有帮助,您可以给我加一分。绝望的时代!
  • 我会的,但我现在做不到......我会在可以的时候给你加分
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-19
  • 2018-10-04
  • 1970-01-01
  • 2011-05-29
  • 2015-01-08
  • 2012-09-01
  • 1970-01-01
相关资源
最近更新 更多