2011-11-07 3 views
5

나는 these 종류의 이미지를 식별 및 인증 목적으로 고유 한 코드로 처리하는 홍채 인식 알고리즘을 연구 중입니다.원형 허깅 변환 개선

지능적으로 임계 값을 필터링 한 다음 이미지에서 가장자리를 찾는 다음 단계는 분명히 동공과 홍채에 원을 맞추는 것입니다. 나는 원형 허프 트랜스 폼 (Hough Transform)을 사용하는 기술을 둘러 보았습니다. 여기 내 구현을위한 코드입니다. 비밀스러운 변수 이름을 유감스럽게 생각합니다.

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 이미징 라이브러리를 사용하여 이미지 처리를 수행합니다. 보시다시피, 이것은 원을 찾는 매우 순진한 무차별 방식입니다. 작동하지만 몇 분이 걸립니다. 기본적인 아이디어는 검정색 픽셀 (thresholding 및 edge-detection에서)이있을 때마다 rmin에서 rmax까지 원을 그려서 이미지의 위치가 "투표"된 횟수의 누적 기 축척을 작성하는 것입니다. x, y 및 r 중 가장 많은 표를 얻은 것이 관심 분야입니다. 저는 홍채와 눈동자가 r 루프의 복잡성을 줄이기 위해 같은 중심 (변수 ra와 rb)을 사용한다는 사실을 사용하려고했지만, 동공 탐지에는 시간이 오래 걸려 문제가되지 않습니다.

분명히 내 구현은 매우 순진합니다. 3 차원 매개 변수 공간 (x, y 및 r)을 사용합니다. 불행하게도 허용되는 것보다 느리게 실행됩니다. 어떤 종류의 개선을 할 수 있습니까? 이것을 2 차원 매개 변수 공간으로 축소 할 수있는 방법이 있습니까? 인식하지 못하는 픽셀에 액세스하고 설정하는보다 효율적인 방법이 있습니까?

내가 알지 못하는이 알고리즘의 전반적인 런타임을 개선하기위한 다른 기술이 있습니까? 동공이나 홍채의 최대 반지름을 근사하는 방법 같은가?

참고 : OpenCV를 사용해 보았지만 일관되게 정확한 매개 변수를 조정할 수 없었습니다.

기타 필요한 정보가 있으면 알려주십시오.

참고 : 다시 한 번 내 자신의 코드를 잘못 해석했습니다. 이것은 기술적으로 5 차원이지만 3 차원 x, y, r 루프는 검정색 픽셀에서만 작동합니다.

답변

1

당신이 일반적인 기술은 고정의 제 추측하는 알고리즘을 실행하는 것입니다 다음 R의 가능한 범위의 괜찮은 추정이있는 경우 원의 위치보다는 R.

의 측정을 원하는 가정 R, 그것을 조정하고 다시 시도하십시오.

+0

R 루프를 제거하거나 단순화하면 문제가 현저히 줄어 듭니다. 문제는 루프를 단순화하는 방법을 모른다는 것입니다. 나는 홍채의 중심을 동공의 중심에 가깝도록 제한함으로써 홍채 탐지를 단순화하려고 시도했으나 그것이 학생을 찾는 데 도움이되지는 못한다. 학생의 범위와 위치를 추정 할 수있는 방법이 있다면 (예를 들어 말한 것처럼) 문제의 일부를 해결할 수 있지만 위치, 위치 및 크기가 너무 다양해서 내가 어떻게해야할지 모르겠다. 그. –

+0

아마 카메라가있는 곳의 크기와 렌즈의 종류에 제한이 있습니까? 학생이 단지 3-4 픽셀면 당신은 아마 그것을 찾지 못할 것이고 이미지 높이의 반 이상은 될 수 없습니다. –