gpt4 book ai didi

numpy - 二维网格中 scipy 标记区域周围的轮廓

转载 作者:行者123 更新时间:2023-12-01 12:47:25 26 4
gpt4 key购买 nike

我试图在具有较大无数据值 (1e6) 的二维网格中找到所有整体的边界多边形。我有使用 scipy 标签工作的漏洞列表。如果不深入研究 gdal 的多边形化,是否有一种简单的方法来生成边界多边形?我看到有 matplotlib.pylab.contour,但这试图绘制一个我真的不想要的图。关于如何为每个标签获取边界多边形的任何建议(如果可能,最好使用一种稍微简化多边形的方法)?我确信我可以写一些东西来遍历每个标记的洞的边界,但是有什么东西已经存在了吗?

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),]

例如我不是在计算,而是在寻找在 qgis 中查看的所有这些白色区域的边界,这是使用 gdal_polygonalize.py 完成的。

gdal_polygonalize.py contour plot in qgis

最佳答案

感谢 Joe Kington 指点我使用 Scikit Image。

from skimage import measure
contours = measure.find_contours(labels, 1)

contours[-1]
array([[ 2686.99905927, 1054. ],
[ 2686. , 1053.00094073],
[ 2685.00094073, 1054. ],
[ 2686. , 1054.99905927],
[ 2686.99905927, 1054. ]])

imshow(labels)
for n, contour in enumerate(contours):
plt.plot(contour[:,1], contour[:, 0], linewidth=2)

左下角放大后:

enter image description here

关于numpy - 二维网格中 scipy 标记区域周围的轮廓,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14572933/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com