Kwadraty marszowe: znajdowanie wielu konturów w jednym polu źródłowym?

9

Zasadniczo jest to pytanie uzupełniające do problemu sprzed kilku tygodni , mimo że ogólnie dotyczy algorytmu bez zastosowania do mojego rzeczywistego problemu.

Algorytm zasadniczo przeszukuje wszystkie linie na obrazie, zaczynając od jego lewego górnego rogu, aż znajdzie piksel będący ramką. W pseudo-C ++:

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

Kiedy go znajdzie, uruchamia algorytm marszowych kwadratów i znajduje kontur do dowolnego obiektu, do którego należy piksel.

Powiedzmy, że mam coś takiego:

wprowadź opis zdjęcia tutaj

Gdzie wszystko oprócz koloru białego jest ramką.

I znalazłem punkty konturu pierwszego obiektu blob:

wprowadź opis zdjęcia tutaj

Dla ogólnego algorytmu to już koniec. Znalazł kontur i wykonał swoją pracę. Jak mogę przejść do pozostałych dwóch obiektów blob, aby również znaleźć ich kontury?

TravisG
źródło
potrzebujesz pomocy z tym proszę zajrzyj do tego stackoverflow.com/questions/17232672/…

Odpowiedzi:

7

Czy możesz po prostu usunąć znaleziony wielokąt, rysując go kolorem tła i powtarzać, aż nic nie pozostanie?

Adam
źródło
1
Tak właśnie należy to zrobić. Wypełnij zalany element tłem (lub innym kolorem) i kontynuuj wyszukiwanie (możesz kontynuować od momentu znalezienia pierwszego „dopasowania”)
bummzack
och wow. Nie wiedziałem nawet o zalewaniu. dzięki.
TravisG
1

dlaczego nie zapisać informacji o obiekcie blob w innej tablicy i sprawdzić, czy nowo znalezione piksele mieszczą się w obwiedni wcześniejszego obiektu blob? Konieczna będzie dodatkowa manipulacja, aby poradzić sobie z obiektami blob poniżej centriodu wcześniejszego obiektu blob, które mieszczą się w obwiedni.

Abe K.
źródło