首页 > 解决方案 > 将二进制图像中多边形的顶点存储在数组中

问题描述

我想从二进制数据中提取代表海岸线的有序多边形(1 表示陆地,0 表示水)。目标是通过获取从 A 点开始并返回到 A 点的数组来描述多边形的海岸线。

二进制数据

我遵循了使用的方法scipy.ndimage.binary_erosion,在此处描述:

使用卷积窗口(python)隔离沿海网格

结果是一个布尔矩阵: 二进制数据

为了提取这些点,我在经度和纬度数组中的网格上使用了布尔矩阵:

# 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

在此处输入图像描述

那么如何正确提取多边形呢?

提前致谢。

标签: pythonnumpyopencvscipypolygon

解决方案


推荐阅读