4

イメージのデータベースから CD のイメージを検出しようとしています。各画像で Circle Hough Transform を使用して、同様の中心を持つ同心円を含む画像を選択できると考えました。

円が外側の円の中心にない場合は正常に機能しますが、中心にある場合は機能しません。これはハフ変換自体の制限ですか、それとも実装の minDist 制限の問題ですか?

次の2つの画像で次のパラメーターを使用します(私は広範囲にいじりました):

Gray cannyThresh = new Gray(180);
Gray accumulatorThresh = new Gray(300);
int dp = 3;
double minDist = 0.0000001 //Ideally higher, but ok for illustrating this point

CircleF[] circles = gray.HoughCircles(cannyThresh, accumulatorThresh, dp, minDist, 0, 0)[0]

内側の円のオフセット (問題なく動作):

オフセット内円

中心の内側の円 (おそらく中心が内側の円に近いため、外側の円を適切に検出できませんか?)

中央内輪

円が同様の中心を共有しているかどうかに関係なく、円を検出するためにできることはありますか?

4

4 に答える 4

3

OpenCVで同心円を検出する方法を見つけるためにGoogle経由でここに来る他の人のために:OpenCVハフ円検出はこれを行うことができないようです. 少なくとも本の一節によると、「Learning OpenCV: Computer Vision with the OpenCV Library

最後に、中心は関連付けられたアキュムレータ値の昇順で考慮され、以前に受け入れられた中心に近すぎる場合は新しい中心が保持されないため、複数の円が同心またはほぼ同心である場合、より大きな円を保持する傾向があります。

この実装の詳細は、パフォーマンス上の理由から選択されたようです。

于 2016-06-08T15:20:17.707 に答える
1

最初にエッジ検出を行う必要があります。次に、大きな黒いチューブの代わりに、2つの細い円になります。これらの円は簡単に見つかります。

于 2012-12-20T08:17:33.463 に答える
1

さて、これはこの作業を行うための大まかな準備ができた方法である可能性があります(その後、「なぜ」を理解します)。

円が触れていないと仮定すると:

  1. それらに対してエッジ検出を実行します。(すでに持っている場合は、エッジマップ画像を一度チェックして、円が接触していないことを確認してください)

  2. ハフサークル検出を実行します。検出された円の中心と半径を保存します

  3. エッジ画像で連結成分(CoCo)検索を実行します。

  4. 検出されたそのようなコンポーネントごとに、その中心が検出されたハフ円の1つに近いかどうかを確認します。基本的に、コンポーネントに対応する検出されたハフサークルがあるかどうかを確認します。正確に一致する必要はありません。

    したがって、基本的に、ハフ変換を使用したパラメーターのいじりを回避できます。明らかに、接続されたコンポーネントはCDの正確な場所に対応します。

于 2012-12-20T15:27:40.473 に答える
0

複数の同心円を検出するためのアルゴリズム は、方法を提案します。

私の自由な解釈は次のとおりです。

  • エッジのバイナリ イメージを取得します。おそらく Canny で十分です
  • 連結成分を求める
  • 各連結要素内で、3 つのポイントをランダムに選択し (ただし、これらのポイント間の最小距離にいくつかの制約を課します)、それらを使用して円を生成します。すべての連結成分を通過し、各連結成分内で 3 点のいくつかのセットをランダムに選択して、いくつかの円を計算します。
  • さらに、一貫した半径を与えない接続されたコンポーネントを破棄できます
  • これらの円はすべて中心に投票します。これらの投票は、画像の効果的な中心に集中する必要があります。
  • 連結成分によって生成された円に戻り、見つかった円の中心と一致する円を生成する連結成分を検証します。同じ半径の円を生成した検証済みの接続コンポーネントをマージします。
于 2016-06-15T17:19:36.367 に答える