python - 将二进制图像中多边形的顶点存储在数组中
问题描述
我想从二进制数据中提取代表海岸线的有序多边形(1 表示陆地,0 表示水)。目标是通过获取从 A 点开始并返回到 A 点的数组来描述多边形的海岸线。
我遵循了使用的方法scipy.ndimage.binary_erosion
,在此处描述:
为了提取这些点,我在经度和纬度数组中的网格上使用了布尔矩阵:
# Get Coastline
erosion = scipy.ndimage.binary_erosion(waterlevel)
coast = waterlevel != erosion
# Read out Coastline-Points
m_lon, m_lat = np.meshgrid(lons,lats)
coastline_points = np.dstack((m_lon[coast],m_lat[coast]))
我卡住的部分是以有序的方式提取点,提取多边形。我的方法像我预期的那样工作,但很明显它将连接不同的多边形。
def distance(point, array1, array2):
dist = (point[0]-array1[:])**2 + (point[1]-array2[:])**2
return np.argmin(dist)
def sort_it(start,array1,array2):
queue = [start]
result = []
while array1.size > 0:
point = queue.pop(0)
idx = distance(point,array1,array2)
queue.append((array1[idx],array2[idx]))
result.append(point)
array1 = array1[np.arange(len(array1))!=idx]
array2 = array2[np.arange(len(array2))!=idx]
return result
那么如何正确提取多边形呢?
提前致谢。
解决方案
推荐阅读
- reactjs - react-pdf 在我的应用程序上不起作用,不显示我的 pdf
- python-requests - 用于序列优化的 HERE-API 获取不返回
- c - C中的递归函数用于查找任意数字N的算术组合
- c - C和它的抽象机器之间的精确关系是什么?
- android - 程序类型已经存在:android.support.v4.app.LoaderManager$LoaderCallbacks
- c# - C# NRE 通过相对 XPath 和 XPathSelectElement 选择子元素
- angular - Angular Material mat-table 在组件中定义可重用列
- git - 如何克隆特定版本的 TensorFlow 模型 + Reasearch 模型
- design-patterns - 微服务架构数据共享/管理
- css - CSS scrollabr 不出现 (overflow-y)