将二进制图像中多边形的顶点存储在数组中

时间:2018-08-23 09:55:08

标签: python numpy opencv scipy polygon

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

二进制数据

我使用scipy.ndimage.binary_erosion遵循了此方法,如下所述:

Isolating coastal grids using convolving window (python)

结果是一个布尔矩阵: Binary Data

要提取点,我在经度和纬度数组之外的网格上使用了布尔矩阵:

# 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

enter image description here

那我怎样才能正确提取多边形呢?

谢谢。

0 个答案:

没有答案