Python 无法识别人眼图像中的虹膜区域
使用OpenCV识别虹膜区域+瞳孔区域(外部灰色区域+内部黑色圆圈),如图所示 尝试了以下方法,但无法100%提取虹膜区域 方法1 使用图像中像素的颜色代码检测虹膜区域Python 无法识别人眼图像中的虹膜区域,python,opencv,image-processing,computer-vision,Python,Opencv,Image Processing,Computer Vision,使用OpenCV识别虹膜区域+瞳孔区域(外部灰色区域+内部黑色圆圈),如图所示 尝试了以下方法,但无法100%提取虹膜区域 方法1 使用图像中像素的颜色代码检测虹膜区域 import cv2 from PIL import Image #import cv2.cv as cv img = cv2.imread('i1.jpg') im = Image.open('i1.jpg') pix = im.load() #cv2.imshow('detected Edge',img) height,
import cv2
from PIL import Image
#import cv2.cv as cv
img = cv2.imread('i1.jpg')
im = Image.open('i1.jpg')
pix = im.load()
#cv2.imshow('detected Edge',img)
height, width = img.shape[:2]
print height,width
height=height-1
width=width-1
count=0
print pix[width,height]
print pix[0,0]
for eh in range(height):
for ew in range(width):
r,g,b=pix[ew,eh]
if r<=30 and g<=30 and b<=30:
print eh,ew
cv2.circle(img,(ew,eh),1,(0,255,0),1)
print height,width
cv2.imshow('detected Edge',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
这是守则的一部分
请指导我们如何自动提取人眼图片中的圆形黑色区域。为了避免错误结果并提高性能,您应该始终为HoughCircles使用正确的边界。虹膜和瞳孔半径将在一定范围内 我会在图像中寻找一个大小合理的黑色斑点来定位瞳孔。一旦你知道瞳孔在哪里,你就知道在哪里寻找虹膜。提取一个包含虹膜的感兴趣区域(使用瞳孔大小来估计虹膜大小),但不要太多。然后进行两次hough变换,得到虹膜和瞳孔的位置和半径。
之后,如果需要,您可以使用hough变换中的知识拟合圆/椭圆,从而进一步提高精度。我使用了以下参考。 要识别人眼图像中的虹膜区域,可以使用以下步骤:- 1)瞳孔区域的识别:-由于瞳孔区域强度非常接近于零,您可以使用二进制阈值来查找瞳孔区域。您可以使用连接组件标签来获得相同强度的区域,然后选择偏心率接近零的区域来标识为瞳孔圆。此连接区域的质心将是圆的中心,您可以通过连接组件的尺寸来获得半径盒子 2)虹膜区域的识别:-现在您已经有了瞳孔区域,您可以使用hough圆方法获得虹膜区域。使用canny边缘检测获得边缘贴图。将虹膜圆的中心放在瞳孔中心周围的框中,并且虹膜半径大于瞳孔半径且小于固定值。按照上述规定制作多个具有不同中心和不同半径的圆,并计算边缘贴图的数量位于此类圆上的点。位于其上的边点最多的圆将是虹膜圆
注意:-根据我的经验,我发现获得虹膜圆的成本非常高,因为你必须制作多个圆心和半径不同的圆。一个解决方案是将圆心固定为瞳孔中心,并且只改变半径,因为虹膜圆离瞳孔中心非常近。但是,它给出了错误的结果,因为顶部和底部的睫毛边缘贴图给出了错误的边缘贴图点。为了解决这个问题,我做了一个jugaad。我将虹膜中心固定为瞳孔中心,并仅从瞳孔中心找到图像左侧部分的虹膜半径。类似地,我从瞳孔中心找到了图像右侧的虹膜半径。我使用半径和中心的平均值作为瞳孔中心来获得虹膜边界。这对我有用 使用方法2,你是否可以从瞳孔中心开始,然后向外移动,保持在同一排(瞳孔中心的左侧或右侧),直到碰到眼睛的巩膜。将其用作包含虹膜的圆的半径
radius_iris = abs(first_column_of_sclera - column_of_pupil_center)
#this is the yellow line in the attatched image
要找到巩膜:取一个小像素区域,如3x3块(或类似的,这是图像中的绿色框),检查两个标准
半径_iris
创建虹膜遮罩如果需要,也可以使用瞳孔遮罩仅提取虹膜
那不是角膜。那是学生。。。这些东西不再在学校里教了吗(hough输出图像有什么问题?如果这个结果不够好,您希望实现什么?什么足够好?准确地说,我们希望识别虹膜区域(外圆灰色区域)和瞳孔区域(内黑圈)如图所示。Hough输出图像不一致。在某些眼部图像中,它无法精确识别虹膜区域。如果不为Hough变换设置最小和最大半径,则无法获得良好的结果…尝试了,但未能获得所需的结果。如果您能指向一些示例代码,那将非常好。您的结果是什么?有c在线无数量的houghcircles示例。如果我不添加另一个副本,请理解。您使用了哪个半径?尝试了这种方法,可以在这里看到输出图像困难的是确定虹膜区域的确切中心点(也应该是瞳孔区域的中心点).如何识别虹膜区域的中心点?@Vikram虹膜的中心从
cv2中获得。Houghcirle
在代码中,虹膜的中心是(i[0],i[1])
,半径i[2]
如果houghcircle的结果不一致地找到虹膜,则在方法2中获得该结果,然后按照其他人的建议添加最小值和最大值。查看您发布的图像,您可以使用maxRadius=75
您的解决方案帮助我们部分解决了问题。谢谢。@Vikram我很高兴它有所帮助,祝您好运在你们项目的其余部分,我们取得了相当大的进展,现在的问题是识别角膜盲人的眼睛。无法识别像这样的图像中的虹膜区域,任何指针都将非常感谢。我们尝试了虹膜中心到左侧边界和虹膜中心到右侧边界的平均值。但输出不一致,将是灰色的t如果你能分享上述问题的源代码,我现在无法获得源代码,因为我正在旅行。所以,让我们来确定你的问题
radius_iris = abs(first_column_of_sclera - column_of_pupil_center)
#this is the yellow line in the attatched image