2011-11-07 61 views
5

我正在研究虹膜识别算法,该算法将these类型的图像处理为用于识别和验证目的的唯一代码。圆形霍夫变换改进

过滤后,智能阈值化,然后找到图像中的边缘,下一步显然是将圆圈适合瞳孔和虹膜。我查看过使用的技术是圆形Hough变换。这是我实现的代码。对于这些神秘的变量名称感到抱歉。

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循环仅对黑色像素进行操作。

回答

1

假设你想圆的位置,而不是R.

的量度如果有可能的范围R的一个体面估计然后一个常用技术是运行算法的固定的第一猜测R,调整并重试。

+0

我知道,通过消除或简化R回路,问题显着减少。问题是我不知道如何简化循环。我试图通过将虹膜的中心限制在靠近瞳孔中心的位置来简化对虹膜的检测,但这并不能帮助我找到瞳孔。如果有某种方法可以估计学生的边界和位置(就像你说的那样),那么这将解决一些问题,但是位置,位置和大小可能会有很大的差异,我不知道我会怎么做那。 –

+0

据推测,从相机的位置和镜头类型来看,尺寸是有限制的?如果瞳孔只有3-4像素,那么你可能不会找到它,它不能超过图像高度的一半 –