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:
Gdzie wszystko oprócz koloru białego jest ramką.
I znalazłem punkty konturu pierwszego obiektu blob:
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?
Odpowiedzi:
Czy możesz po prostu usunąć znaleziony wielokąt, rysując go kolorem tła i powtarzać, aż nic nie pozostanie?
źródło
Sprawdź to:
http://en.wikipedia.org/wiki/Connected-component_labeling Po wykryciu obiektów blob wystarczy zastosować algiernię kwadratową, aby uzyskać marginesy dla każdego obiektu blob.
Pa. Lo
źródło
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.
źródło