****
在地理空间分析领域,图像分割是一项至关重要的任务。它使我们能够从卫星或航空影像中识别和提取关键特征,进而获取关于空间分布、地物类型以及各类目标物体的详细信息。这些信息对于支持广泛领域的决策至关重要,例如农业、林业、环境监测等场景。

传统的图像分割方法主要依赖手动或半自动处理,这些方法既耗时又费力。近年来,深度学习模型的发展推动了分割过程的自动化。然而,这些模型通常需要大量的训练数据,并且计算成本高昂,这使得它们在许多应用场景中难以实际应用。
Meta AI研发的Segment Anything Model (SAM) 改变了这一现状。SAM是一种可提示的分割模型,具备卓越的零样本泛化能力,无需额外的训练即可应用于未知的物体和图像。该模型在包含1100万张图像和超过10亿个掩膜的数据集上进行了训练。用户可以使用现有的模型检查点分割任何图像中的任何物体,而无需进行额外的训练。自2023年4月发布以来,SAM已在包括医学影像在内的多个领域得到广泛应用。

然而,在地理空间领域,缺少基于SAM的Python包。segment-geospatial Python包就是为了填补这一空白而开发,并为地理空间数据分割提供低代码甚至无代码的解决方案。

segment-geospatial
segment-geospatial是一个旨在简化使用Segment Anything Model (SAM)分割地理空间数据的流程的开源Python包。该软件包充分利用了地理空间数据分析相关的的Python库,例如leafmap、ipywidgets、rasterio、geopandas和segment-anything-py,为用户提供了一个易于操作使用的图形化界面,用于分割遥感影像并将结果导出为包括矢量和栅格数据等各种格式。

1. 分割模式和主要功能
segment-geospatial提供以下分割模式:
- 自动分割:无需任何用户输入,即可对图像进行自动分割。
- 交互式GUI分割:通过图形用户界面 (GUI) 进行交互式分割,用户可以通过点击或绘制等方式引导分割。
- 文本提示分割:基于文本提示 (由Grounding DINO模型驱动) 进行分割,用户可以通过自然语言描述来指定要分割的目标。

该软件包提供以下实用功能:
- 遥感影像下载:支持从Tile Map Service (TMS) 服务器下载地图瓦片并创建GeoTIFF文件
- GeoTIFF文件分割:使用Segment Anything Model (SAM) 和HQ-SAM分割GeoTIFF格式的地理空间影像文件。HQ-SAM是SAM的高质量版本,可以提供更精细的分割结果。
- 文本提示分割遥感影像:通过文本提示,例如 “汽车”、“树木”、“建筑物” 等,引导 SAM 分割遥感影像中的特定地物目标。
- **交互式前景和背景标记:**在GUI界面中,用户可以通过交互式地添加前景和背景标记,来更精确地引导SAM进行分割。
- **从矢量数据集加载现有标记:**支持从常见的矢量数据集 (例如Shapefile, GeoJSON) 中加载已有的标记点或区域,并将其作为SAM的分割提示。
- **保存分割结果为矢量格式:**可以将分割结果保存为常见的矢量格式,例如 GeoPackage、Shapefile和GeoJSON,方便后续的GIS分析和应用。
- 保存输入提示为GeoJSON文件:用户可以将输入的分割提示 (例如点、框、文本) 保存为GeoJSON文件,以便复用和共享。
- **可视化交互式分割结果:**在Jupyter环境中,可以交互式地可视化分割结果,方便用户评估分割效果和进行调整。
- 时序遥感影像目标分割:支持对时序遥感影像进行目标分割,例如监测地物随时间的变化。

2. 安装方法
segment-geospatial软件包可以通过两种方式安装:PyPI和conda-forge。
- 使用PyPI安装
如果你的 Python 环境中已经安装了 pip 包管理器,可以直接在终端中运行以下命令进行安装:
1pip install segment-geospatial
- 使用conda-forge安装
如果你使用Anaconda或Miniconda管理Python环境,建议使用conda安装,以获得更好的依赖管理和兼容性。
首先,创建一个新的 conda 环境(推荐):
1conda create -n geo python
2conda activate geo
然后,使用conda-forge和mamba (更快速的conda包管理器) 安装segment-geospatial及其依赖项:
1conda install -c conda-forge mamba
2mamba install -c conda-forge segment-geospatial
GPU 支持 (可选)
如果你的系统配备了NVIDIA GPU,并且希望利用GPU加速分割过程,可能需要手动安装支持CUDA的PyTorch版本。可以使用以下命令强制安装GPU版本的PyTorch:
1mamba install -c conda-forge segment-geospatial “pytorch==cuda”
其他依赖项
segment-geospatial还有一些可选的依赖项,用于支持更高级的功能,例如文本提示分割。 如果需要使用这些功能,可以运行以下命令安装这些依赖项:
1mamba install -c conda-forge groundingdino-py segment-anything-fast
3. 使用案例
segment-geospatial提供了丰富的示例和演示,帮助用户快速上手和了解软件包的功能。以下是一些典型的使用案例:
-
遥感影像自动分割: 使用自动掩膜生成器,无需任何提示,即可快速分割遥感影像中的所有物体。

-
基于文本提示的图像分割(text prompts): 输入文本提示分割卫星影像中的物体(如树木、游泳池)

-
交互式图像分割: 通过在GUI界面中点击某类目标,交互式地分割图像中的目标

-
批量文本提示分割: 批量处理多张遥感影像,并使用文本提示分割特定地物。

-
结合ArcGIS Pro: 在ArcGIS Pro环境中使用segment-geospatial进行图像分割。
-
1import os
2import leafmap
3from samgeo import SamGeo
4
5workspace = os.path.dirname(arcpy.env.workspace)
6os.chdir(workspace)
7arcpy.env.overwriteOutput = True
8
9sam = SamGeo(
10 model_type=“vit_h”,
11 sam_kwargs=None,
12)
13
14image = “water.tif”
15sam.generate(image, output=“water_masks.tif”, foreground=True, unique=True)
16sam.show_masks(cmap=“binary_r”)
17sam.show_anns(axis=“off”, alpha=1, output=“water_annotations.tif”)
18m.addDataFromPath(os.path.join(workspace, “water.tif”))
19m.addDataFromPath(os.path.join(workspace, “water_annotations.tif”))
20in_raster = os.path.join(workspace, “water_masks.tif”)
21out_shp = os.path.join(workspace, “water_masks.shp”)
22arcpy.conversion.RasterToPolygon(in_raster, out_shp) -
卫星影像变化检测: 使用时序卫星影像,检测地物随时间的变化情况。

更多详细的使用案例和代码示例,请参考官方文档和示例 notebooks。
4. 与其他GIS软件集成
segment-geospatial软件包还可以与桌面GIS软件集成,例如QGIS和ArcGIS,扩展其在地理空间分析领域的应用范围。
- QGIS: 可以结合QGIS的Geometric Attributes插件,实现更强大的地理空间分析功能。
- ArcGIS: ArcGIS提供了Segment Anything Model (SAM) Toolbox和Resources for Unlocking the Power of Deep Learning Applications Using ArcGIS工具箱,方便用户在 ArcGIS环境中使用SAM进行图像分割。
5. 计算资源支持
Segment Anything Model (SAM)本身是一个计算密集型的模型,建议使用配备高性能GPU的计算机运行,以获得更流畅的体验和更快的处理速度。推荐至少配备8GB GPU显存的GPU。
如果你没有高性能GPU,也可以考虑以下方案:
- Google Colab:利用Google Colab提供的免费GPU资源。
- AWS Cloud Credit for Research::申请亚马逊AWS提供的科研云平台,利用AWS云平台上的GPU资源进行计算。
未来,segment-geospatial软件包将继续完善和发展,例如:
- 支持更多类型的遥感数据:例如多光谱、高光谱数据。
- 集成更多先进的分割算法:例如针对遥感影像特点优化的SAM变体。
- 提供更丰富的地理空间分析功能:例如变化检测、目标追踪等。
segment-geospatial软件包的发布,为地理空间数据分割领域带来了新的可能性。它凭借用户友好的界面、高效的分割性能、灵活的分割模式和强大的扩展性,有望成为地理空间分析人员进行图像分割的得力助手。
References:
- Wu, Q., & Osco, L. P. (2023). samgeo: A Python package for segmenting geospatial data with the Segment Anything Model (SAM). Journal of Open Source Software, 8(89), 5663. https://doi.org/10.21105/joss.05663
- Osco, L. P., Wu, Q., de Lemos, E. L., Gonçalves, W. N., Ramos, A. P. M., Li, J., & Junior, J. M. (2023). The Segment Anything Model (SAM) for remote sensing applications: From zero to one shot. International Journal of Applied Earth Observation and Geoinformation, 124, 103540. https://doi.org/10.1016/j.jag.2023.103540
本公众号相关内容推荐
- DeepSeek AI创新:颠覆传统,重新定义大模型开发范式
- 大语言模型在科学研究中的应用
- 6个用于清洗地理空间数据的Python工具库
- AllClear:用于卫星影像云去除的综合数据集
- 深度学习技术在地理空间人工智能(GeoAI)中的应用
- xgcm-通用环流模式后处理Python工具包
- GeoAI:地理信息与人工智能的交叉融合
- 深度学习提升全球海洋涡旋动力学卫星观测能力
- 基于xarray扩展的开源地图可视化Python库
- NOAA 发布世界磁场模型 WMM2025
- 推荐10个用于处理GIS和遥感数据的Python库
- ECMWF的AI天气预报系统AIFS开放模型权重参数
- The Well:可用于机器学习研究的15TB 物理模拟数据集
- 推荐6个美化Matplotlib可视化样式的python库
- AI天气模型的现状与未来
- 流式传输和渲染可视化三维地理空间数据
- GIS领域常用的24种数据格式
- 一种基于图神经网络的三维建筑模型重建方法
- WebGIS技术栈推荐
- 使用Python工具可视化大型图网络
- 使用NetworkX提取图网络特征
- Argo海洋观测数据处理分析python库:ArgoPy
- 在Jupyter环境中创建交互式可视化地图
- 处理和可视化地理空间数据的Python库:EarthPy
- 地理空间深度学习python库:TorchGeo
- 遥感数据分析python库scikit-eo
- 图网络的应用场景及图分析python库
- 使用Python和NetworkX创建并可视化图网络(Graph Network)
- OpenResearcher:一个开源科学研究AI助理
- NeuralGCM: 一种融合机器学习与物理原理来模拟地球大气的新方法
- Transformer Explainer:文本生成模型交互式可视化工具
- 用于探索性数据分析(EDA)的开源python库
- 分享一个构建交互式D3js可视化的Python库
- 推荐15个图网络可视化python软件包
- 9个提升科研效率的软件工具
- 生成式人工智能模型颠覆传统天气预报
- 分享5个python可视化图表工具
- 分享17个网络(Network)数据可视化工具