使用Segment-Geospatial实现遥感影像自动对象分割

使用Segment-Geospatial实现遥感影像自动对象分割

【免费下载链接】segment-geospatial A Python package for segmenting geospatial data with the Segment Anything Model (SAM) 【免费下载链接】segment-geospatial 项目地址: https://gitcode.com/gh_mirrors/se/segment-geospatial

概述

Segment-Geospatial是基于Segment Anything Model(SAM)开发的一个地理空间分析工具包,专门用于处理遥感影像的自动对象分割任务。本文将详细介绍如何使用该工具包实现遥感影像的自动分割,包括环境配置、影像获取、模型参数调优以及结果可视化等完整流程。

环境准备

在开始之前,需要确保已安装必要的依赖包。Segment-Geospatial提供了完整的Python接口,可以通过简单的pip命令安装:

pip install segment-geospatial

安装完成后,导入所需模块:

import os
import leafmap
from samgeo import SamGeo, show_image, download_file, overlay_images, tms_to_geotiff

数据获取与准备

1. 创建交互式地图

使用leafmap创建一个交互式地图,方便选择感兴趣区域:

m = leafmap.Map(center=[37.8713, -122.2580], zoom=17, height="800px")
m.add_basemap("SATELLITE")
m

2. 确定分析区域

用户可以通过地图工具绘制多边形或矩形来选择分析区域。如果没有手动选择,则使用默认边界:

if m.user_roi_bounds() is not None:
    bbox = m.user_roi_bounds()
else:
    bbox = [-122.2659, 37.8682, -122.2521, 37.8741]

3. 下载卫星影像

使用TMS服务下载指定区域的卫星影像:

image = "satellite.tif"
tms_to_geotiff(output=image, bbox=bbox, zoom=17, source="Satellite", overwrite=True)

SAM模型初始化

Segment-Geospatial提供了多种SAM模型变体,可以根据需求选择合适的模型:

sam = SamGeo(
    model_type="vit_h",  # 使用ViT-Huge模型
    sam_kwargs=None,     # 使用默认参数
)

自动分割处理

1. 基本分割

执行自动分割并保存结果:

sam.generate(image, output="masks.tif", foreground=True, unique=True)

参数说明:

  • foreground=True:只保留前景对象
  • unique=True:为每个对象分配唯一ID

2. 结果可视化

查看分割掩码:

sam.show_masks(cmap="binary_r")

生成带注释的结果图:

sam.show_anns(axis="off", alpha=1, output="annotations.tif")

3. 结果对比

使用滑动条对比原始影像和分割结果:

leafmap.image_comparison(
    "satellite.tif",
    "annotations.tif",
    label1="Satellite Image",
    label2="Image Segmentation",
)

高级参数调优

SAM提供了多个可调参数,可以优化分割效果:

sam_kwargs = {
    "points_per_side": 32,  # 每边采样点数
    "pred_iou_thresh": 0.86,  # 预测IOU阈值
    "stability_score_thresh": 0.92,  # 稳定性分数阈值
    "crop_n_layers": 1,  # 裁剪层数
    "crop_n_points_downscale_factor": 2,  # 裁剪点降采样因子
    "min_mask_region_area": 100,  # 最小掩码区域面积
}

使用优化参数重新初始化模型:

sam = SamGeo(
    model_type="vit_h",
    sam_kwargs=sam_kwargs,
)

结果后处理

1. 矢量转换

将分割结果转换为矢量格式(如GeoPackage):

sam.tiff_to_vector("masks.tif", "masks.gpkg")

2. 结果叠加

将分割结果叠加到原始影像上,并调整透明度:

overlay_images(image, "annotations2.tif", backend="TkAgg")

应用建议

  1. 小对象检测:对于小目标,可以增加points_per_sidecrop_n_layers参数值
  2. 精度优化:适当提高pred_iou_threshstability_score_thresh可提升分割质量
  3. 性能平衡:较大的模型(ViT-H)精度高但速度慢,可根据硬件条件选择合适模型

总结

Segment-Geospatial工具包简化了SAM模型在遥感影像分析中的应用流程,通过本文介绍的方法,用户可以快速实现高质量的自动对象分割。该工具特别适用于建筑物提取、土地利用分类、变化检测等遥感应用场景。

【免费下载链接】segment-geospatial A Python package for segmenting geospatial data with the Segment Anything Model (SAM) 【免费下载链接】segment-geospatial 项目地址: https://gitcode.com/gh_mirrors/se/segment-geospatial

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值