9

私は、OpenCV/C++ フレームワークを使用して、オーバーラップできる楕円オブジェクトを基本的にカウントするプログラムに取り組んでいます。

画像のしきい値を設定し、すべてのオブジェクトの輪郭を見つけた後

次のステップでは、重なり合った楕円で構成されていないオブジェクトを除外します (残りのものは後でセグメント化します)。

最終的には、次のようなオブジェクトになります。

ここに画像の説明を入力

この例の画像では、右側のオブジェクトはすべてネガティブですが、左側のオブジェクトは有効です。

私の現在のフィルターは、主に等周商に基づいてオブジェクトを除外します。しかし、私はさまざまなサイズとノイズを特徴とするオブジェクトを持っているため、このアプローチに常に満足しているわけではありません。

理想的には、現在のフィルターの効率を高めるためのメトリックを追加したいと考えています。

この解析を多くの等高線で繰り返さなければならないので、それほどコストはかからないはずです。

次のようなアプローチを考えました。

  • 輪郭内の連続する点のすべてのトリプレット間の角度の値のヒストグラムに基づく何か?
  • 「多楕円」を数学的にフィッティングしますか(その方法についてはわかりません)?
  • フリーマン チェーンと一致しますか?

しかし、私は、より効率的で乱雑でない明らかな何かを見落としていたと確信しています。何か提案はありますか、ありがとうございます:)、

編集: Regis が正しく示唆したように、実際には任意の形状を十分な数の円で構成できます。したがって、私の問題を解決できるようにするために、次の仮定を追加します。

  1. オブジェクトあたりの楕円は 16 個以下。
  2. 楕円を平らにすることはできません: 長軸/短軸 < 3.
  3. オブジェクト内で、最小の楕円の面積に対する最大の楕円の面積は 10 未満でなければなりません。
4

3 に答える 3

2

1つの可能性は、試すことです:

  1. オブジェクトの輪郭を抽出する
  2. 等高線に沿って等間隔にあるサンプル ポイント
  3. これらのポイントを使用して、一定の間隔で方向を決定します (ラップアラウンドの問題を回避するために、この方向を表すには複素数を使用するのが最善の場合があります)。
  4. これらの方向を使用して、一定の間隔で曲率を計算します
  5. この曲率に基づいてメトリクスを作成します。たとえば、曲率サンプルの 80% 以上が正しい範囲にあるオブジェクトを探します。

曲率について期待しているグラフは、一連の一定値 (形状が円ではなく楕円の場合はゆっくりと変化) であり、円から円へと変化する突然の不連続性があります。

画像にノイズが多い場合は、最初に曲率値をローパス フィルター処理することをお勧めします。

円/楕円で作成された形状は、ほとんどの場合、周囲全体に大きな曲率がありますが、直線のエッジで作成された形状には、曲率の低い部分があります。

于 2012-07-29T19:07:21.953 に答える
0

重なり合う楕円の十分に大きなセットから任意の形状を作成できるのではないかと思いますが、あなたの手には不明確な問題があります。私があなたの問題文を誤解していない限り。

于 2012-07-30T09:00:36.390 に答える
0

円と楕円のハフ変換を調べましたか? 利用可能な円のOpenCV 実装さえあります。これらの変換は、オブジェクトの輪郭に適用する必要があります。

于 2013-03-08T18:03:36.130 に答える