マーチングスクエア:1つのソースフィールド内で複数の輪郭を見つける?


9

主に、これは数週間前の問題のフォローアップ質問ですが、これは実際の問題に適用しない一般的なアルゴリズムに関するものです。

アルゴリズムは基本的に、画像の左上から開始して、境界であるピクセルが見つかるまで、画像内のすべての行を検索します。疑似C ++の場合:

int start = 0;
for(int i=0; i<amount_of_pixels; ++i)
{
   if(pixels[i] == border)
   {
      start = i;
      break;
   }
} 

1つが見つかると、マーチングスクエアアルゴリズムを開始し、ピクセルが属するオブジェクトの輪郭を見つけます。

私がこのようなものを持っているとしましょう:

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

白以外のすべてが境界です。

そして、最初のブロブの輪郭点を見つけました:

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

一般的なアルゴリズムについてはこれで終わりです。それは輪郭を見つけ、その仕事をしました。他の2つのblobに移動して、それらの輪郭も見つけるにはどうすればよいですか?


これについてサポートが必要な場合は、このstackoverflow.com/questions/17232672/…

回答:


7

見つけたポリゴンを背景色で消して消し、何もなくなるまで繰り返しますか?


1
それはそれがされるべき方法です。見つかった要素を背景(または別の色)で塗りつぶし、検索を続行します(最初の「一致」が見つかったところから続行できます)
bummzack

ああすごい。洪水についてさえ知りませんでした。ありがとう。
TravisG 2011


1

blob情報を別の配列に保存して、新しく見つかったピクセルが以前のblobのバウンディングボックス内にあるかどうかを確認しませんか?以前のブロブの中心点より下で、境界ボックス内にあるブロブを処理するには、さらにいくつかの操作が必要になります。

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