Demonstracja szkieletu w oparciu o koła

Dec 03 2020

Szkieletonizacja (lub transformacja osi środkowej) to proces znajdowania „środkowej” osi regionu (wyrażonej jako maska). Wykonywany jest przez SkeletonTransform, który wydaje się działać poprzez przerzedzenie maski, aż zbiegną się „granice”, gdzie wyznaczają oś środkową.

Jest inna metoda, oparta na rosnących kręgach, która mnie niepokoi.

Rozważ tę maskę głowy konia:

Załóżmy, że zaczynasz od małego czerwonego kółka, które jest styczne do granicy maski (tj. Dotyka granicy maski w co najmniej dwóch punktach, jak pokazano poniżej).

Ta alternatywna metoda zwiększa stopniowo promień okręgu i automatycznie dostosowuje położenie nowego środka, tak aby zachować ten warunek dwu styczności.

Przykładowy obraz powyżej to hack ... a kludge ... oparty na wybraniu niektórych środków kół kandydatów i zwiększaniu promienia, aż dwa (lub więcej) punkty dotkną granicy maski.

Chciałbym przeprowadzić ten proces poprawnie i algorytmicznie.

Moje ogólne podejście polegało na przyjęciu obecnego największego okręgu, zwiększeniu jego promienia o niewielką wartość (np. O 1 piksel), a następnie wyszukaniu środka okręgu, który jest najbliżej środka obecnego największego okręgu, który zachowuje dwu-styczność. Myślę, że w Mathematica istnieją sprytne prymitywy oparte na regionach, które mogłyby tworzyć wydajny kod, ale niestety po prostu nie jestem wystarczająco zaznajomiony z obliczeniami opartymi na regionach. Co więcej, funkcje takie jak RegionMemberQnie odnoszą się bezpośrednio do bi-tangencji.

Ostatecznie chciałbym pokolorować okręgi i związane z nimi środki łączące linie, jak przedstawiono powyżej.


Sugestia @bills dotycząca RidgeFilter(nowego dla mnie) naprawdę pomogła!

Muszę tylko dostroić progi i tym podobne.

Odpowiedzi

2 bills Dec 03 2020 at 06:48

Może nie zapewniać wszystkiego, czego szukasz, ale:

img = Import["https://i.stack.imgur.com/zV7QC.png"];
RidgeFilter[DistanceTransform[img],0.5] // ImageAdjust

To są grzbiety, które powinny być środkami twoich kręgów. Promienie byłyby wartością obrazu Transformacja odległości w tych środkach.