イメージ内で円を検出する方法はありますか?イメージ内の円を検出するための速い方法はありますか?
例: 大きな円で1つの画像があり、大きな円の中に6つの小さな円があります。
ハフサークル(OpencV)を使用せずに大きなサークルを見つける必要があります。
イメージ内で円を検出する方法はありますか?イメージ内の円を検出するための速い方法はありますか?
例: 大きな円で1つの画像があり、大きな円の中に6つの小さな円があります。
ハフサークル(OpencV)を使用せずに大きなサークルを見つける必要があります。
円を見つけるための標準的なアルゴリズムは、Hough(コメントに記載されたジャム)とRANSACです。これらのアルゴリズムをパラメータ化すると、アプリケーションのベースライン速度が設定されます。
http://en.wikipedia.org/wiki/Hough_transform
http://en.wikipedia.org/wiki/RANSAC
これらのアルゴリズムを高速化するには、画像のコレクションを見て、検索範囲を制限することは、検索のスピードアップに役立つかどうかを決定することができます。それは十分に簡単です。半径の合理的な範囲内でのみ検索してください。エッジポイントを入力として使用するため、チェックしたエッジポイントの数を減らす方法も検討することができます。
しかし、処理を高速化するためのいくつかのトリックがあります。
短い説明:完全な実装から始めてベンチマークしてから、パラメータ設定を徐々に強化し、検索範囲を制限しながらアプリケーションや画像セットのサークルを見つけることができます。
あなたの画像がスケーリングに適している場合、画像のピラミッド画像を1/2スケール、1/4スケール、1/8スケールなどの異なるスケールで作成することが可能です。エッジが必要です小さなスケールでのスケーリング方法の予測
あなたの画像ピラミッドを作成したら、次のことを試してください。
イメージスケーリングは高速な操作であり、少なくとも1つのサークルが小さいスケールのイメージに存在する場合は、ラフサークルフィットを実行して合計サイクル数を減らすことができますフルスケール画像内のそれらのエッジポイントのみの適合度を最適化することによって達成される。
エッジを保存するスケーリングでは、相関型ツールを使用して円を見つけることもできますが、ノイズを含む画像の内容、エッジポイントが円をどのように表しているかなどによって異なりますに。
幸いですが、Houghはノイズに強く堅牢ですが、優れたパフォーマンスを得るにはかなり完璧なサークルが必要です。とにかく+1。 –
ありがとう、Roger。真の円から+/- Nピクセル離れているかもしれないエッジポイントに対して少しの位置の不自然さを許容するために、時にはハフフィットを微調整します。基本的なハフのテクニックの他の特別な調整は、私のために過去にうまくいきました。 – Rethunk
「ハフフィットを調整する」ということは、あなたのニーズに合わせてopenCVのソースコードを修正するということですか? – LandonZeKepitelOfGreytBritn
おそらく、contoursを検出し、そのプロパティを確認してください。 cv::isContourConvexを使用しようとするか、別の方法でcovariance matrixの固有値を使用し、輪郭の代表ellipse first eccentricityが〜0であるかどうかを確認することができます。
あなたはサークルのサイズを知っていますか?そして、単純な相関法がこのトリックを行うかもしれない。 –
いいえ、円のサイズはわかりませんし、円のサイズを知っているかどうかを知る方法を提案してください:P – Pixel
実際、ハフ変換は非常に速く、おそらく唯一の良い解決策です。 opencvのハフ変換では、キャニー演算子を使ってエッジを取得します。キャニーオペレータはボトルネックです。画像のエッジを見つけるためにコードを手書きすることができます。相関は浮動小数点値と乗算を使用します。私は、相関がより多くの時間を必要とする(大きなオブジェクトのために本当に多くの時間)、より正確ではないと言うでしょう。 opencvのハフ変換が非常にうまくコーディングされていない可能性があります。 – jamk