点击下面卡片,快速关注本公众号
在地理空间分析领域,图像分割是一项至关重要的任务。它使我们能够从卫星或航空影像中识别和提取关键特征,进而获取关于空间分布、地物类型以及各类目标物体的详细信息。这些信息对于支持广泛领域的决策至关重要,例如农业、林业、环境监测等场景。
传统的图像分割方法主要依赖手动或半自动处理,这些方法既耗时又费力。近年来,深度学习模型的发展推动了分割过程的自动化。然而,这些模型通常需要大量的训练数据,并且计算成本高昂,这使得它们在许多应用场景中难以实际应用。
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。
如果你的 Python 环境中已经安装了 pip 包管理器,可以直接在终端中运行以下命令进行安装:
1pip install segment-geospatial
如果你使用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,也可以考虑以下方案:
未来,segment-geospatial软件包将继续完善和发展,例如:
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