Kontury wokół regionów z etykietami Scipy w siatce 2D

Próbuję znaleźć graniczne wielokąty wszystkich całości w siatce 2D z dużą wartością bez danych (1e6). Mam listę dziur wykorzystujących etykietę Scipy. Bez zanurzania się w poligonalizacji gdal, czy istnieje łatwy sposób na generowanie granic wielokątów? Widzę, że istnieje matplotlib.pylab.contour, ale to próbuje narysować fabułę, której naprawdę nie chcę. Jakieś zalecenia dotyczące sposobu uzyskiwania ograniczających wielokątów dla każdej etykiety (najlepiej w taki sposób, aby uprościć wielokąty, jeśli to możliwe)? Jestem pewien, że mogę napisać coś, co będzie chodzić po granicach każdego oznaczonego otworu, ale czy jest coś, co już istnieje?

from osgeo import gdal
from scipy import ndimage

dem_file = gdal.Open('dem.tif')
dem = dem.file.GetRasterBand(1).ReadAsArray()

# Get a binary image of the no-data regions.  The no-data value is large
bin = dem > 9e5

# Find all the wholes.  Anything with a label > 0.
labels, num_labels = ndimage.measurements.label(bin)
num_labels
1063

# The hole's label and size. Skip 0 as that label has all the valid data.
holes = [(label, sum(labels==label)) for label in range(1, num_labels)]
holes[:3]
[(1, 7520492),
 (2, 1),
 (3, 1),]

na przykład zamiast liczyć, szukam granic wszystkich tych białych regionów, jak widać w qgis, co zostało zrobione za pomocą gdal_polygonalize.py.

questionAnswers(1)

yourAnswerToTheQuestion