欢迎光临散文网 会员登陆 & 注册

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

2023-04-12 14:57 作者:geobuilding  | 我要投稿


我们要完成基于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将这个建筑物的楼体和楼顶都识别在了一起。


注意,由于segment-anything生成的mask点是连续的,常常有很多点。一个普通的矩形建筑物,segment-anything可能识别出是一个圆角矩形。所以还需要进行删减点优化轮廓。

整体来说,使用segment-anything做为数据统计可能是个好方法但是高质量的卫星遥感影像识别建筑物还是不太靠谱识别大块土地、河流是个不错的选择。



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

分享到微博请遵守国家法律