【问题标题】:Circular Hough Transform Improvements圆形霍夫变换改进
【发布时间】:2011-11-07 23:30:38
【问题描述】:

我正在研究一种虹膜识别算法,该算法将these 类型的图像处理成唯一代码,用于识别和身份验证。

经过过滤、智能阈值化,然后在图像中找到边缘,下一步显然是为瞳孔和虹膜拟合圆圈。我环顾四周使用的技术是圆形霍夫变换。这是我的实现代码。抱歉,变量名很神秘。

print "Populating Accumulator..."
# Loop over image rows
for x in range(w):
    # Loop over image columns
    for y in range(h):
        # Only process black pixels
        if inp[x,y] == 0:
            # px,py = 0 means pupil, otherwise pupil center
            if px == 0:
                ra = r_min
                rb = r_max
            else:
                rr = sqrt((px-x)*(px-x)+(py-y)*(py-y))
                ra = int(rr-3)
                rb = int(rr+3)
            # a is the width of the image, b is the height
            for _a in range(a):
                for _b in range(b):
                    for _r in range(rb-ra):
                        s1 = x - (_a + a_min)
                        s2 = y - (_b + b_min)
                        r1 = _r + ra
                        if (s1 * s1 + s2 * s2 == r1 * r1):
                            new = acc[_a][_b][_r]
                            if new >= maxVotes:
                                maxVotes = new
print "Done"

# Average all circles with the most votes
for _a in range(a):
    for _b in range(b):
        for _r in range(r):
            if acc[_a][_b][_r] >= maxVotes-1:
                total_a += _a + a_min
                total_b += _b + b_min
                total_r += _r + r_min
                amount += 1
top_a = total_a / amount
top_b = total_b / amount
top_r = total_r / amount
print top_a,top_b,top_r

这是用 python 编写的,并使用 Python Imaging Library 进行图像处理。如您所见,这是一种非常幼稚的寻找圆圈的蛮力方法。它有效,但需要几分钟。基本思想是在有黑色像素的地方(来自阈值和边缘检测)绘制从 rmin 到 rmax 的圆圈,构建一个累加器数组,该数组包含图像上某个位置被“投票”的次数。得票最多的 x、y 和 r 就是感兴趣的圈子。我试图利用虹膜和瞳孔具有大致相同的中心(变量 ra 和 rb)这一事实来降低 r 循环的一些复杂性,但是瞳孔检测需要很长时间,所以这并不重要。

现在,显然我的实现非常幼稚。它使用三维参数空间(x、y 和 r),不幸的是,这使得它运行得比可接受的慢。我可以做哪些改进?有什么办法可以将其简化为二维参数空间?有没有更有效的方法来访问和设置我不知道的像素?

顺便说一句,是否还有其他我不知道的技术可以提高该算法的整体运行时间?比如近似瞳孔或虹膜最大半径的方法?

注意:我也尝试过为此使用 OpenCV,但我无法将参数调整到足以始终准确的程度。

如果您需要任何其他信息,请告诉我。

注意:我再次误解了自己的代码。它在技术上是 5 维的,但 3 维的 x,y,r 循环只对黑色像素起作用。

【问题讨论】:

    标签: algorithm hough-transform


    【解决方案1】:

    假设您想要圆的位置而不是 R 的度量。

    如果您对 R 的可能范围有一个不错的估计,那么一种常见的技术是运行该算法以对固定的 R 进行第一次猜测,然后对其进行调整并重试。

    【讨论】:

    • 我知道,通过移除或简化 R 循环,问题会大大减少。问题是我不知道如何简化循环。我试图通过将虹膜的中心限制在靠近瞳孔的中心来简化虹膜的检测,但这并不能帮助我找到瞳孔。如果有某种方法可以估计瞳孔的范围和位置(如您所说),那将解决一些问题,但是位置、位置和大小可能会有很大差异,以至于我不知道该怎么做那个。
    • 大概只从相机所在的位置和镜头的类型来限制尺寸吧?如果瞳孔只有 3-4 像素那么你可能找不到它,它不能超过图像高度的一半
    猜你喜欢
    • 1970-01-01
    • 2015-11-24
    • 1970-01-01
    • 1970-01-01
    • 2015-05-03
    • 1970-01-01
    • 2017-07-01
    • 1970-01-01
    相关资源
    最近更新 更多