Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法识别人眼图像中的虹膜区域_Python_Opencv_Image Processing_Computer Vision - Fatal编程技术网

Python 无法识别人眼图像中的虹膜区域

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,

使用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, 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块(或类似的,这是图像中的绿色框),检查两个标准

  • r、g、b通道的方差很小。白色(或灰色)的R=G=B,这意味着白色的方差很小
  • 您还需要检查rgb值是否高于某个阈值。有灰色或黑色眼睛的人将符合标准1,但除非像素非常轻(接近白色),否则我们还没有到达巩膜
  • 通过创建一个以瞳孔为中心的圆,使用
    半径_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