【问题标题】:How to remove some edges after applying edge detection?应用边缘检测后如何去除一些边缘?
【发布时间】:2016-10-04 14:12:32
【问题描述】:

我需要找到虹膜边缘,我使用的输入图像不是完全圆形的虹膜,有时可能会被眼睑覆盖。 我找到了一篇期刊文章的摘要,发现虹膜甚至被眼睑覆盖。但是,我坚持了其中一个步骤。再说一次,因为只是一个摘要,我找不到那篇文章的全文。

这就是我卡住的地方,我有一个图像,它已经被垂直 Sobel 边缘检测所暗示。 我有一个图像输入,这是图片:

这是应用垂直边缘检测后的图片:

我需要移除除虹膜边缘(红色边缘)之外的所有边缘。

我的预期结果应该是这样的:

注意:有些图像可能只有瞳孔的左右边缘,如上图,但有些图像可能有瞳孔的左右边缘。

在我看来,有两种方法可以获得优势。

  1. 移除水平边缘,因为瞳孔边缘有点垂直。但我不知道如何去除水平边缘,它不是真正的水平线,它是弯曲的水平线。

  2. 求图片中最长的边(我也不知道找到最长边的算法是什么)。

哪一种是解决我的问题的正确方法?或者不是以上两个选项?

如果你知道找到不完全圆形物体的方法,尤其是虹膜,请告诉我,它使我的项目更容易。

【问题讨论】:

    标签: image-processing edge-detection sobel iris-recognition


    【解决方案1】:

    这是一个特征检测问题,因此,我将使用 OpenCV 库中的 Hough Circle Transformation (tutorial)。从截图中可以看出,该方法在检测部分圆形方面非常稳健。


    import cv2
    import cv2.cv as cv
    import numpy as np
    
    img = cv2.imread(r'C:\path\to\eye.jpg',0)
    img = cv2.medianBlur(img,5)
    cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)
    
    circles = cv2.HoughCircles(img,cv.CV_HOUGH_GRADIENT,1,20,
                                param1=150,param2=30,minRadius=20,maxRadius=100)
    
    circles = np.uint16(np.around(circles))
    for i in circles[0,:]:
        # draw the outer circle
        cv2.circle(cimg,(i[0],i[1]),i[2],(0,255,0),2)
        # draw the center of the circle
        cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),3)
    
    cv2.imshow('detected circles',cimg)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    【讨论】:

    • 啊,你是对的,它是虹膜。我问过一些使用过圆形霍夫变换的人,他们说如果虹膜被什么东西覆盖,我就不能使用霍夫变换,也许他们没有尝试过这种情况。我以前从未尝试过霍夫变换,但在他们说出来之后,我只是找到了另一种方法来解决这个问题,但我仍然停留在这一步。说到你给我的openCV库,你有这个库的完整理论/论文吗?我不能只在我的项目中使用该库,因为找到虹膜是我大学最后一个项目的主要方法。
    【解决方案2】:

    我试着回答你的问题,我建议你使用圆形霍夫变换。 我正在尝试检测圆形,以便您可以获取圆的半径,然后您可以获取圆的大小。

    这里是代码和结果:

    A = imread('eye.jpg');
    A = imresize(A, 0.8);
    A = rgb2gray(A);
    A = edge(A, 'canny');
    imshow(A);
    [centers, radii, metric] = imfindcircles(A,[1 100]);
    centersStrong5 = centers(1:1,:);
    radiiStrong5 = radii(1:1);
    metricStrong5 = metric(1:1);
    viscircles(centersStrong5, radiiStrong5,'EdgeColor','b');
    

    结果是:

    希望它能帮助您解决问题。

    代码参考:http://www.mathworks.com/help/images/ref/imfindcircles.html

    【讨论】:

    • 起初我以为我可以在我的情况下使用圆形霍夫变换,但我不能。在我的情况下,图像输入有时不是完全圆形的瞳孔或虹膜。我的项目是关于眼睛注视估计的,所以会有一个眼睛向左或向右看的图像输入,瞳孔或虹膜可能被眼睑之类的东西覆盖。
    猜你喜欢
    • 2011-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-08
    相关资源
    最近更新 更多