【下集】meta分割一切segment-anything 卫星遥感影像,建筑物轮廓提取(下)

我们要完成基于segment-anything建筑物矢量数据的提取。要解决下面3个问题:
1、准备一张有经纬度信息的图片,图片的4点经纬度。
2、获取segment-anything生成的mask点
3、将mask点转换成经纬度坐标。
注意:因为经过了多次转换,最后结果会有一定的偏差。
一、经纬度信息的图片
使用geobuilding [快照]-[左侧快照] 导出地图快照,并且有4点坐标。

下面是导出的,快照图片,我们来提取这个区域的矢量。
对应的4点坐标是:
[[121.430832338,31.1898182841],[121.43891127,31.1898182841],[121.43891127,31.1851553423],[121.430832338,31.1851553423]]

二、获取segment-anything mask点序列
由于我没有部署segment-anything,后台有不少up主私信,都比较关注本集内容。这里直接使用segment-anything.com官网进行mask点序列获取。
首先打开chrome浏览器控制台,然后上传上面的地图快照图片。
首先查看官网给前端返回了哪些数据,可以看到返回了mask掩模数组。这里面encodedMask应该就是mask点序列。

通过分析代码,得到了这个点序列是一个svg数组。

三、将mask点序列转换成经纬度数据
svg点序列---<转1>-->图片像素px点序列---<转2>-->经纬度
<转1> 将svg点转换成相对于图片的px坐标。有很多开源的方法都可以转换得到。
<转2> 前面提到已知了图片的4点坐标(分别是左上、右上、右下、左下)。
如果是正南正北,可以使用经纬度加减法,去计算每个px对应的经纬度。
算法在mapbox和three.js都有找到,这里不再直接贴代码。也可以询问chatgpt来获取答案。
经过转换我们得到了经纬度信息,将这些数据导入到geobuilding中,如下

放大对比下,可以看到卫星图上的转换后的经纬度轮廓和segment-anything识别的结果一致。


将其中一个轮廓设置高度,得到白模建筑物。可以看到segment-anything将这个建筑物的楼体和楼顶都识别在了一起。
