numpy 数组和形状多边形之间的交叉区域

Intersection area between a numpy array and a shapely polygon

我想计算形状多边形与遮罩 (numpy.array) 的交集面积:

plt.plot(*building.exterior.xy, color='brown', linewidth=4)
plt.plot(*parcelle.exterior.xy, color='orange', linewidth=4)
plt.imshow(thr, origin='upper', extent=[x_left, x_right, y_bottom, y_top], cmap='Greys')

我希望能够计算出下面的绿地面积:

为此,我尝试使用此处描述的方法:How to transform contours obtained from OpenCV to SHP file polygons?

mask_to_polygons(np.flip(thr, 0))

plt.plot(*parcelle.exterior.xy)
plt.plot(*building.exterior.xy)

mask_pol = translate(mask_to_polygons(np.flip(thr, 0)), x_left, y_bottom)
for geo in mask_pol:
    plt.plot(*geo.exterior.xy, color = 'green')

然而,结果并不令人满意:

事实上,MultiPolygon 的边界 mask_pol 不是 thr 数组的维度:

> mask_pol.bounds
(0.0, 0.0, 511.0, 511.0)
> thr.shape
(256, 256)

所以,我想知道从 mask 切换到 multipolynom shapely 的选项是否正确。我也可以尝试从匀称多项式切换到掩码。有没有更好的方法来完成这个任务?

经过几次尝试,我得出的结论是,最简单的方法是使用 rasterio 从形状优美的多边形创建遮罩。然后需要进行米-像素换算得到总面积。