【问题标题】:Fitting circle to photo of iris using Python / OpenCV使用 Python / OpenCV 将圆圈拟合到虹膜照片
【发布时间】:2021-04-22 03:46:40
【问题描述】:

我有很多正面图像,我想获得这些图片中两个虹膜(中心)的确切位置。例如:

我已经运行了 DLib 68 landmark face annotator 来获取两只眼睛的位置,所以例如我会有一张看起来像这样的图片:

可以看出,注释能够正确地得到眼睛的大致位置。我已经尝试过遵循this article中的方法,但这需要所有图片的光照条件相同,并且需要手动设置阈值。此外,眼睛周围的凸多边形并不总是完整的,所以这不起作用,因为它有时只有眼睛的一部分在蒙版内:

keypoints = [36, 37, 38, 39, 40, 41]
landmarks = image.get_face_landmarks()
points = np.array([landmarks[i] for i in keypoints], dtype=np.int32)

mask = np.zeros(img.shape[:2], dtype=np.uint8)
mask = cv2.fillConvexPoly(mask, points, 255)
    
mask = cv2.dilate(mask, np.ones((9,9)))
eyes = cv2.bitwise_and(img, img, mask=mask)
eyes[(eyes == 0).all(2)] = [255, 255, 255]
eyes_gray = cv2.cvtColor(eyes, cv2.COLOR_BGR2GRAY)

我正在考虑使用霍夫圆变换之类的东西,但为此我需要整个虹膜完全可见,而不是被眼睑部分覆盖。由于虹膜是部分圆形的,并且眼睛内部被一种非常不同的颜色所包围,我认为应该可以在虹膜上放置一个圆圈,我该如何最好地解决这个问题? This answer 建议使用地标和轮廓,但到目前为止我还没有得到可靠的工作。

【问题讨论】:

  • 您可以尝试使用简单的形状描述符,例如在分割过程后查看圆形或边框。您可以寻找自适应阈值的分段。这是一篇采用更复杂方法的论文thume.ca/projects/2012/11/04/…

标签: python opencv


【解决方案1】:

Diego Schmaedech 在 cmets 中提出的文章和论文确实提供了解决此问题的好方法,我找到了一个实现 here,它可以产生准确的结果和良好的性能

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多