2013-04-08 8 views
7

イメージ内で円を検出する方法はありますか?イメージ内の円を検出するための速い方法はありますか?

例: 大きな円で1つの画像があり、大きな円の中に6つの小さな円があります。

ハフサークル(OpencV)を使用せずに大きなサークルを見つける必要があります。

+0

あなたはサークルのサイズを知っていますか?そして、単純な相関法がこのトリックを行うかもしれない。 –

+0

いいえ、円のサイズはわかりませんし、円のサイズを知っているかどうかを知る方法を提案してください:P – Pixel

+0

実際、ハフ変換は非常に速く、おそらく唯一の良い解決策です。 opencvのハフ変換では、キャニー演算子を使ってエッジを取得します。キャニーオペレータはボトルネックです。画像のエッジを見つけるためにコードを手書きすることができます。相関は浮動小数点値と乗算を使用します。私は、相関がより多くの時間を必要とする(大きなオブジェクトのために本当に多くの時間)、より正確ではないと言うでしょう。 opencvのハフ変換が非常にうまくコーディングされていない可能性があります。 – jamk

答えて

8

円を見つけるための標準的なアルゴリズムは、Hough(コメントに記載されたジャム)とRANSACです。これらのアルゴリズムをパラメータ化すると、アプリケーションのベースライン速度が設定されます。

http://en.wikipedia.org/wiki/Hough_transform

http://en.wikipedia.org/wiki/RANSAC

これらのアルゴリズムを高速化するには、画像のコレクションを見て、検索範囲を制限することは、検索のスピードアップに役立つかどうかを決定することができます。それは十分に簡単です。半径の合理的な範囲内でのみ検索してください。エッジポイントを入力として使用するため、チェックしたエッジポイントの数を減らす方法も検討することができます。

しかし、処理を高速化するためのいくつかのトリックがあります。

  • 半径を確認する範囲を慎重に設定します。たとえば、可能な限り小さい半径から可能な限り大きい半径まで単にチェックするのではなく、半径R1からR2まで、次に半径R3からR4の2つの異なる範囲に検索を分割することができます。
  • アプリケーションで許容される可能性のある最速のエッジ検出を優先して、Cannyエッジ検出を実行します。 (あなたは多くのアプリケーションのためにCannyを捨てることができます)
  • 異常値を除去するためにエッジポイントの画像を前処理します。異常値を除去する適切なアルゴリズムは画像セットに固有のものですが、明らかに異常値を排除するアルゴリズムを見つけることができ、より高価なサークルフィットアルゴリズムで検索時間を節約できます。
  • サークルが非常によく定義されていて、すべての点またはほぼすべての点が存在する場合は、円の代わりに四分円または半円のみをどのように一致させるかを把握します。

短い説明:完全な実装から始めてベンチマークしてから、パラメータ設定を徐々に強化し、検索範囲を制限しながらアプリケーションや画像セットのサークルを見つけることができます。

あなたの画像がスケーリングに適している場合、画像のピラミッド画像を1/2スケール、1/4スケール、1/8スケールなどの異なるスケールで作成することが可能です。エッジが必要です小さなスケールでのスケーリング方法の予測

あなたの画像ピラミッドを作成したら、次のことを試してください。

  1. 検索円を非常に小さいスケールで。画像は小さく、 の可能な半径の範囲が制限されるので、これは のすばやい操作である必要があります。
  2. 初期縮みを小縮尺で使用して円を見つけた場合は、次の大縮尺画像でテストして適合を改善します。または、フルスケール画像を検索します。
  3. 次に大きいスケールを確認してください。小スケールの画像で表示されなかったサークルは、現在のスケールで突然表示されることがあります。
  4. 上記の手順をイメージのすべての縮尺で繰り返します。

イメージスケーリングは高速な操作であり、少なくとも1つのサークルが小さいスケールのイメージに存在する場合は、ラフサークルフィットを実行して合計サイクル数を減らすことができますフルスケール画像内のそれらのエッジポイントのみの適合度を最適化することによって達成される。

エッジを保存するスケーリングでは、相関型ツールを使用して円を見つけることもできますが、ノイズを含む画像の内容、エッジポイントが円をどのように表しているかなどによって異なりますに。

+1

幸いですが、Houghはノイズに強く堅牢ですが、優れたパフォーマンスを得るにはかなり完璧なサークルが必要です。とにかく+1。 –

+1

ありがとう、Roger。真の円から+/- Nピクセル離れているかもしれないエッジポイントに対して少しの位置の不自然さを許容するために、時にはハフフィットを微調整します。基本的なハフのテクニックの他の特別な調整は、私のために過去にうまくいきました。 – Rethunk

+0

「ハフフィットを調整する」ということは、あなたのニーズに合わせてopenCVのソースコードを修正するということですか? – LandonZeKepitelOfGreytBritn

関連する問題