2011-11-07 17 views
5

私は、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のいずれかが最も多く投票しているのは関心のあるサークルです。私は虹彩と瞳孔がrループの複雑さのいくつかを減らすために同じ中心(変数raとrb)を持っているという事実を利用しようとしましたが、瞳孔の検出にはそれほど時間がかかりません。

明らかに私の実装は非常に素朴です。 3次元パラメータ空間(x、y、r)を使用していますが、残念ながら許容範囲を超えて動作させることはできません。どのような改善ができますか?これを2次元のパラメータ空間に減らす方法はありますか?私が気づいていないピクセルにアクセスして設定するより効率的な方法はありますか?

私が気付いていないこのアルゴリズムの実行時間を改善するための他のテクニックはありますか?瞳孔や虹彩の最大半径を近似する方法など?

注:これにもOpenCVを使用しようとしましたが、一貫して正確にパラメータを調整することはできませんでした。

他に必要な情報がある場合は教えてください。

注:もう一度自分のコードを誤解しました。これは技術的には5次元ですが、3次元のx、y、rループは黒のピクセルでのみ動作します。

答えて

1

あなたは一般的な手法は、固定の最初の推測のためのアルゴリズムを実行することですその後、Rの可能な範囲のまともな見積もりをお持ちの場合は、円の位置ではなく、R.

の測定をしたいと仮定すると、 Rを調整して、もう一度試してください。

+0

Rループを削除または簡素化することで、問題が大幅に軽減されることがわかりました。問題は、ループを単純化する方法がわからないことです。私は虹彩の検出を簡素化しようとしましたが、その中心を瞳孔の中心に近づけるように制限しましたが、それは瞳孔を見つけるのに役立ちません。あなたが言ったように、瞳孔の境界と位置を推定する方法があれば、それは問題のいくつかを解決するでしょうが、位置、位置、および大きさが大きく変わることがあり、私は自分のやり方を知らないそれ。 –

+0

おそらく、カメラの位置とレンズの種類の大きさには限界がありますか?瞳孔が3〜4ピクセルしかない場合、おそらくそれを見つけることはできません。画像の高さの半分を超えることはできません –

関連する問題