【发布时间】: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/…。