Mam tablicy numpy które chcesz segmentu w odrębnych obszarach o unikalnych identyfikatorów, który wygląda mniej więcej tak:Segmentowanie tablicy Pythona w unikalne regiony połączone przez pojedynczą komórkę lub mniej?
Zazwyczaj na coś takiego użyłbym scipy.ndimage.label generować unikalne identyfikatory dla dyskretnych obiektów typu blob, ale w tym przypadku mam kilka bardzo dużych obszarów ciągłych, które również chcę podzielić na mniejsze, unikalne regiony, najlepiej gdy są one połączone tylko z sąsiadami przez połączenie o szerokości 1 komórki. Aby zilustrować, oto tablica próbki, wynik uzyskać podczas uruchamiania scipy.ndimage.label i mój pożądany rezultat:
import numpy as np
import scipy.ndimage as ndimage
import matplotlib.pyplot as plt
# Sample study area array
example_array = np.array([[0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1],
[0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1],
[0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0],
[1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1],
[1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1],
[1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0],
[1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0],
[1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0],
[1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]])
# Identify discrete regions and assign unique IDs
current_output, num_ids = ndimage.label(example_array, structure=np.ones((3,3)))
# Plot outputs
plt.imshow(example_array, cmap="spectral", interpolation='nearest')
plt.imshow(current_output, cmap="spectral", interpolation='nearest')
Szczególną numerację i podział komórek nie jest wtórne ; wszystko, co przypomina ostatni wykres powyżej, zrobi. Moja najlepsza próba dotąd w użyciu morfologicznego przetwarzania obrazu do pierwszego obniżają moją tablicę, uruchom scipy.ndimage.label a następnie rozszerzają się, ale nie ma to niefortunny efekt uboczny eliminując wszystkie regiony pojedynczej komórki lub cienkich obiektów liniowych (z których jest wiele).
Bardzo doceniam wszelkie myśli!
możliwe jest najpierw określić obszary jednokomórkowe i cienkie elementy liniowe i erozji i rozszerzają? –
Dzięki za przypomnienie mi tom10. Poprzednia odpowiedź została odpowiednio zaktualizowana! Julien: które mogą działać, ale można zobaczyć problemy z długich, cienkich obszarów wystających z krawędzi dużych obszarów, które powinny mieć ten sam niepowtarzalny identyfikator, ale jest oddzielona, gdy usuwa się przed dylatacji-erozji. Zdecydowanie warte zobaczenia! –