エッジが互いに接触しているときに、個別のオブジェクトを検出するにはどうすればよいですか?


21

カメラから取得した画像内のすべての輪郭を見つける必要があります。そこで、まずエッジ検出器を使用してエッジを見つけ、次に輪郭を見つけます。ものすごく単純。

しかし、私の輪郭は「マージ」されます。たとえば、下の画像では、明らかに4つの異なるオブジェクトがあります。ただし、エッジはいくつかのポイントでわずかに接触しているため、4つの別々の輪郭ではなく、1つの大きな輪郭を取得します。しきい値、侵食、モルフォロジー操作などを変更してみましたが、エッジが少し触れたままです。下の画像に似た画像で別々の輪郭を取得する方法について誰か提案はありますか?(以下の画像は明らかに単なる例であり、実際の画像ははるかに複雑ですが、基本的な問題は同じです)。

ここに画像の説明を入力してください


流域セグメンテーションが機能します。
sm176357

そのため、連絡先が単なるポイントではなく線でもある(接触しているが重なっていない)場合も考慮する必要があります
Shravya Boggarapu

回答:


11

さまざまなコンポーネントの検出:

さまざまなコンポーネントを検出しようとしている場合は、おそらく輪郭を検出する以外の方法でそれらを実行できます。Mathematicaの例を次に示します。侵食に続いて膨張を使用して、検出前に2番目のコンポーネントのギャップを閉じます(これを行わないと、検出されません)。

img = Binarize@Import["http://i.stack.imgur.com/yqDyu.png"];
Colorize[MorphologicalComponents[Dilation[Erosion[img,1],1]]]

下の左の図は、不完全なオブジェクトの検出(ギャップを閉じない)を示し、右の図は、正しい検出(上のコードを実行)を示しています。

ここに画像の説明を入力してください ここに画像の説明を入力してください

異なる輪郭の検出:

ただし、実際に輪郭のみを分離したい場合は、ここに例を示します。前と同じように収縮と膨張を実行してギャップを閉じ、結果の画像をキャニーエッジ検出器に通します。デフォルトのオプションを明示的に指定したので、使用されているものを確認できます。

img2 = EdgeDetect[Dilation[Erosion[img, 1], 1], Method -> "Canny"]

これにより、ピクセルの幅が1より大きいため、内側と外側の両方のエッジが得られます(左下の図を参照)。パフォーマンスが低下するため(他の画像では異なる場合があります)、薄くすることはできませんでした。内側の輪郭は必要な輪郭であり、外側の輪郭は4つのコンポーネントすべてを組み合わせた輪郭です。ここで必要なのは、最も外側のものをドロップすることです:

SelectComponents[img2, "EnclosingComponentCount", # > 0 &]

内側の輪郭だけが表示されます(右下を参照)。つまり、少なくとも1つの他の輪郭に囲まれた輪郭のみを選択し、最も外側の輪郭を自動的に不適格にします。openCVのこれらのコマンド/操作に相当するものがわかりません。

ここに画像の説明を入力してください ここに画像の説明を入力してください

図の明らかな中断は、より小さなサイズでjpegに保存するためです。私の画面ではそのようには見えません。


2

侵食などの形態学的フィルタを使用して画像を前処理してみてください。これにより、接触する輪郭を分離できます。輪郭を検出した後、膨張操作を適用して格子を完成させることができます。


私はそれを試しましたが、結果は改善しませんでした。

1
実際のサンプル画像を見せてもらえますか?

2

それはあなたの質問に対する答えではありませんが、輪郭解析はエラーを起こしやすいです。あなたはそれについて多くをすることはできず、非常に単純なシナリオでのみ機能します。

使用に問題がある場合は、まったく異なるアルゴリズムを探す必要があります。物事を解決するためのより複雑で堅牢な方法がありますが、それはあなたが達成したいものに依存します(オブジェクト検出、追跡など)


ありがとうございました。私のプログラムは手の検出に使用されるため、オブジェクト検出に非常に似ていると思います。より複雑で堅牢なアルゴリズムに関する提案はありましたか?Haar Features、SURF、および同様の機械学習アルゴリズムは、私ができることではありません。

これらのリソースを見ましたか?paginas.fe.up.pt/~hgc2011それらは主にデータベース/結果ですが、ここでいくつかの良い論文を見つけられることを願っています。

0

輪郭が必ずしも開いているとは限りません。輪郭を検出するためにcannyを使用したことを考慮してください。キャニーの問題はすでにここで議論されていまし議論キャニーのは、あなたの評価を閉じた輪郭にキャニーの上に必要とされている決算や拡張などの操作がまだあるという基本的なアイデアを提供します。

これは、輪郭を探しているか、セグメンテーションを探しているかにも依存します(キャニーとGraphcutsのようなメソッド)。したがって、堅牢なソリューションを探すかどうかは、最終的なアプリケーションに依存すると思います。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.