私は、OpenCV/C++ フレームワークを使用して、オーバーラップできる楕円オブジェクトを基本的にカウントするプログラムに取り組んでいます。
画像のしきい値を設定し、すべてのオブジェクトの輪郭を見つけた後
次のステップでは、重なり合った楕円で構成されていないオブジェクトを除外します (残りのものは後でセグメント化します)。
最終的には、次のようなオブジェクトになります。
この例の画像では、右側のオブジェクトはすべてネガティブですが、左側のオブジェクトは有効です。
私の現在のフィルターは、主に等周商に基づいてオブジェクトを除外します。しかし、私はさまざまなサイズとノイズを特徴とするオブジェクトを持っているため、このアプローチに常に満足しているわけではありません。
理想的には、現在のフィルターの効率を高めるためのメトリックを追加したいと考えています。
この解析を多くの等高線で繰り返さなければならないので、それほどコストはかからないはずです。
次のようなアプローチを考えました。
- 輪郭内の連続する点のすべてのトリプレット間の角度の値のヒストグラムに基づく何か?
- 「多楕円」を数学的にフィッティングしますか(その方法についてはわかりません)?
- フリーマン チェーンと一致しますか?
しかし、私は、より効率的で乱雑でない明らかな何かを見落としていたと確信しています。何か提案はありますか、ありがとうございます:)、
編集: Regis が正しく示唆したように、実際には任意の形状を十分な数の円で構成できます。したがって、私の問題を解決できるようにするために、次の仮定を追加します。
- オブジェクトあたりの楕円は 16 個以下。
- 楕円を平らにすることはできません: 長軸/短軸 < 3.
- オブジェクト内で、最小の楕円の面積に対する最大の楕円の面積は 10 未満でなければなりません。