社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Segment-geospatial: 地理空间图像分割开源Python工具包

GISer last • 2 天前 • 9 次点击  

点击下面卡片,快速关注本公众号

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

传统的图像分割方法主要依赖手动或半自动处理,这些方法既耗时又费力。近年来,深度学习模型的发展推动了分割过程的自动化。然而,这些模型通常需要大量的训练数据,并且计算成本高昂,这使得它们在许多应用场景中难以实际应用。

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


本公众号相关内容推荐


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/178576
 
9 次点击