Mam warstwę wektorową z milionami wielokątów tworzących ciągłe pokrycie. Muszę je sklasyfikować według ich kształtu. Używam już kilku indeksów kształtów z ekologii krajobrazu, takich jak zwartość ( 4piA / P ^ 2 ), średnia szerokość ( 2A / P ), numer kształtu ( P / sqrt (A) ), widziałem również tę odpowiedź na Obliczanie okrągłości / zwięzłości wielokąt?
Mój problem polega na tym, że wszystkie te wskaźniki wykorzystują tylko pewien stosunek powierzchni i obwodu. Nawet wskaźnik wymiaru fraktalnego używa tylko powierzchni i obwodu ( 2nn (0,25P) / ln (A) ). Ale jak mogę rozróżnić dwa wielokąty o tym samym obszarze i obwodzie, ale całkowicie innym kształcie? Jak ten rozgałęziony wielokąt A:
którą próbowałem narysować przy użyciu tego samego obszaru i obwodu co zakrzywiony pasek B. Wszystkie moje znane indeksy będą dla nich takie same. Ale dla mnie bardzo ważne jest odróżnianie prostych pasków (w tym zakrzywionych jak księżyc w nowiu) od skomplikowanych rozgałęzionych kształtów.
Celowo pokazuję wielokąt B jako zakrzywiony pasek, a nie prosty pasek, ponieważ znam wskaźnik pokrewnego obwodu, który wykrywa proste wydłużone kształty, ale moje wielokąty mogą mieć te same koła. Nawet jeśli zbuduję Wypukły kadłub i obliczę stosunek obszarów Apolygon / Aconvex , tutaj może być bardzo podobnie.
Jak więc wyraźnie odróżnić rozgałęziony wielokąt A od wielokąta B w danych wektorowych ? (Konwersja ich do rastra wymagałaby bardzo małej wielkości komórki, ogromnego zestawu danych i braku pamięci, więc nie jest to możliwe). Czy istnieją inne indeksy kształtów, które zawierają inne parametry? Idealnie metoda wyróżniałaby nie tylko wyraźnie rozgałęzione wielokąty, ale nawet C i D:
Moim jedynym pomysłem jest zbudowanie wypukłego kadłuba, a następnie usunięcie wielokąta z jego wypukłego kadłuba i policzenie liczby (dużych) kawałków, które pozostawia (kasowanie wielokąta po wielokącie, a nie całej warstwy). Może to pokazać złożoność granic.
Z zadowoleniem przyjmuję matematyczne rozwiązania / algorytmy, które później zaimplementuję w Pythonie.