segment anything进行高分辨率遥感影像分割及效果对比

article/2025/10/22 1:59:20

一、SAM模型介绍

  1. Segement Anything Model,简称SAM,是4月初Meta 发布的史上首个图像分割基础模型。它是通过将三个相互关联的元素:Task、Model和Data结合,来构建形成的一个大模型。Task的构成如下图所示,通过输入分割提示和图片,经模型运算生成掩膜
    在这里插入图片描述
    SAM的输入提示可以是标记点、规则/不规则框选边界、或者输入词语。如输入“Cat”,模型就会识别出来猫,并生成一个掩膜。

Model中主要运算的是词语和图像,架构如下图所示:
在这里插入图片描述

最后是Data,它是作为输入用于模型训练,训练过程中对数据进行注释,实现模型优化。SAM对于Data的解释如下:
在这里插入图片描述

二、模型使用

  1. set-up
import numpy as np
import torch
import matplotlib.pyplot as plt
import cv2# 用来显示掩膜
def show_anns(anns):if len(anns) == 0:returnsorted_anns = sorted(anns, key=(lambda x: x['area']), reverse=True)ax = plt.gca()ax.set_autoscale_on(False)img = np.ones((sorted_anns[0]['segmentation'].shape[0], sorted_anns[0]['segmentation'].shape[1], 4))img[:,:,3] = 0for ann in sorted_anns:m = ann['segmentation']color_mask = np.concatenate([np.random.random(3), [0.65]])img[m] = color_maskax.imshow(img)
  1. example image导入图片
image = cv2.imread('images/lzu.jpg')
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
  1. automatic mask generation自动掩膜生成器
import sys
sys.path.append("..")
from segment_anything import sam_model_registry, SamAutomaticMaskGenerator, SamPredictorsam_checkpoint = "sam_vit_b_01ec64.pth" # 模型
model_type = "vit_b"device = "cuda" # 使用GPUsam = sam_model_registry[model_type](checkpoint=sam_checkpoint)
sam.to(device=device)mask_generator = SamAutomaticMaskGenerator(sam)

注:SamAutomaticMaskGenerator生成器有几个可调整的参数,可用来控制采样密度或移除低质量和重复掩膜,以及设置生成器运行在裁剪后更小的对象上以提高性能、后处理移除零散像素和生成的洞等。SamAutomaticMaskGenerator参数设置如下:

# SamAutomaticMaskGenerator 参数输入
mask_generator_2 = SamAutomaticMaskGenerator(model=sam,points_per_side=32,pred_iou_thresh=0.86,stability_score_thresh=0.92,crop_n_layers=1,crop_n_points_downscale_factor=2,min_mask_region_area=100,  # Requires open-cv to run post-processing
)
  1. 调用generate方法,生成掩膜。这里如果使用自定义参数的生成器mask_generator_2 ,则替换为masks = mask_generator_2.generate(image)来生成掩膜即可
masks = mask_generator.generate(image)
  1. show image图像显示,包括分割图片和掩膜
plt.figure(figsize=(20,20))
plt.imshow(image)
show_anns(masks2)
plt.axis('off')
plt.show() 

三、结果对比

1. 城市复杂图像分割:目标是建筑物提取

Fig1. 默认参数分割结果(mask_generator生成器)默认参数分割结果
Fig2. 自定义参数分割结果(mask_generator_2生成器)
在这里插入图片描述

2. 类别简单的高分辨率遥感影像分割:目标是进行水域提取

Fig1. 默认参数分割结果(mask_generator生成器)
在这里插入图片描述

Fig2. 自定义参数分割结果(mask_generator_2生成器)
在这里插入图片描述

3. 结论

可以看出:
(1)对于复杂的城市影像:默认参数存在建筑物漏识别的情况,自定义参数识别的完整性相对较高;
(2)对于内容简单的图像:使用默认参数或自定义参数的结果没有太大差异;
(3)方案一和方案二对比,可见模型复杂图像(如城市)分割的精确度不如简单图像高;
(4)总之,可以使用该模型进行自动分割,再人为对结果进行处理。一方面可以提高图像分割和识别的效率,另一方面可以提高相对于手动数字化的精度;
(5)从SAM官方示例来看,官方示例所使用的数据集也有比较复杂的,但分割也效果却很好。我们本次实验与官方示例的区别是:官方的都是一些拍照的图片,本示例我们使用的高分辨率遥影像。再结合示例一和示例二的结果,我们猜想,这可能与这两种图片的像素问题等原因有关吧,所以分割效果不如官方示例的效果好。后续可以尝试将遥感影像的分割效果与图片的效果做对照。


http://chatgpt.dhexx.cn/article/YARZcVQx.shtml

相关文章

高分辨率遥感图像目标检测和场景分类研究进展

本文按照西北工业大学程塨老师的高分辨率遥感图像目标检测和场景分类研究进展汇报进行整理,需要的同学可借此了解遥感图像相关知识~ 高分辨率遥感图像目标检测和场景分类 一、背景介绍1.时间轴2.应用3.图像智能 二、高分辨率遥感图像目标检测研究进展1.任务定义2.难…

深度学习高分辨率遥感影像语义分割

深度学习大家都知道,在计算机视觉领域取得了很大的成功,在遥感影像自动解译方面,同样带来了快速的发展,我在遥感影像自动解译领域,也做了一些微薄的工作,发表几篇论文,我一直关注遥感影像自动解…

FCN全卷积网络模型——高分辨率遥感影像地物识别

FCN全卷积网络模型——高分辨率遥感影像地物识别 这是一篇操作日记 win10与ubuntu的caffe安装过程独立,只是两次不同系统下的演习,真正实验在ubuntu下完成。 操作空间 win10 1:Anaconda 2.0 2:Visual Studio 2013 3:caffe 4:python2.7 Ubuntu 16.04 …

高分辨率遥感影像融合技巧

软件下载地址: https://pan.baidu.com/s/1dt0yDUsAork9LnLnZTwCgw 需要百度网盘下载密码,留言邮箱地址。 或联系联系 QQ:1257396288​ 该软件包含高分辨率遥感影像融合功能(pansharp2),融合效果好&#…

【GIS】高分辨率遥感影像智能解译

1 绪论 随着航空科技工业的不断成熟与发展,我国遥感卫星研制能力不断攀升,发射数量逐年提高,在轨运行的遥感卫星为社会生产及居民日常生活提供了巨大的支持与便利。我国目前同时在轨运行的遥感卫星数量已超过60颗,每天获取并传回…

数据结构学习笔记(四)—— 树

树 文章目录 树一.树的基本概念二.树的遍历1.先序遍历2.后序遍历3.中序遍历4.层序遍历 三.树的存储表示和操作实现1.双亲表示法2.孩子表示法3.双亲孩子表示法4.孩子兄弟表示法 四.树的性质五.二叉树基本概念与定义二叉树的特殊形态——斜树二叉树的特殊形态——满二叉树二叉树的…

sklearn学习(集成算法:随机森林)

随机森林树 一.概述【1】集成算法概述1.概念与应用2.集成算法的目标3.其他定义 【2】sklearn中的集成算法1.sklearn中的集成算法模块ensemble(1)类与类的功能 2.复习:sklearn中的决策树3.sklearn的基本建模流程 二.RandomForestClassifier【1…

数据结构与算法之树(三)AVL树

数据结构与算法之树 数据结构与算法之树(一)二叉树概念及遍历方式(图文并茂) 数据结构与算法之树(二)二叉查找树 数据结构与算法之树(三)AVL树 数据结构与算法之树(四…

C语言数据结构总结:树

树 一,树的定义二,树的基本术语三,二叉树的定义四,二叉树的性质和存储结构五,关于二叉树的算法 一,树的定义 树是n(n>0)个结点的有限集合。 若n0,称为空树。 若n>…

【C++从入门到入土】第二十一篇:二叉搜索树之AVL树

AVL树 文章目录 AVL树一、AVL树1.特点2.操作旋转插入删除查找 一、AVL树 在计算机科学中,AVL树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树的高度最大差别为1,所以它也被称为高度平衡树。增加和删除可能需要通过一次或多次树旋转来重新平…

数据结构--二叉搜索树

二叉搜索树 一丶概念以及特点二丶相关操作定义TreeMap类put()操作--插入节点get()操作--得到key对应的value值getOrDefault()操作containsKey()操作--检查key是否存在containsValue()操作--检查value是否存在remove()操作--删除操作思路(1)叶子结点&…

Java数据结构--树2

Java数据结构--树 一、平衡树1.1 2-3 查找树1.1.1 2-3查找树的定义1.1.2 查找1.1.3 插入1.1.3.1 向2-结点中插入新键1.1.3.2 向一棵只含有一个3-结点的树中插入新键1.1.3.3 向一个父结点为2-结点的3-结点中插入新键1.3.1.4 向一个父结点为3-结点的3-结点中插入新键1.3.1.5 分解…

数据结构之多路查找树

多路查找树 一、2-3树1.1 查找1.2 2-3树的插入实现1.3 2-3树的删除节点 二、2-3-4树三、总结 二叉排序树简单的实现在多数情况能够达到预期的查找效率,但是每个节点只能存储一个元素和只能有两个孩子,使得在大量数据下会造成二叉排序树的深度特别大&…

【数据结构 7】二叉查找树及其Java实现

【数据结构 1】顺序表及其Java实现 【数据结构 2】单向链表及其Java实现 【数据结构 3】双向链表及其Java实现 【数据结构 4】栈及其Java实现 【数据结构 5】队列及其Java实现 【数据结构 6】符号表及其Java实现(使用链表实现) 【数据结构 7】二叉查找树…

C++从入门到精通(第十篇) :二叉搜索树

二叉搜索树 一:二叉搜索树概念二: 二叉搜索树实现节点的定义二叉搜索树实现 三:二叉搜索树的应用四:二叉树有关面试题ps 很多小伙伴为了刷题发愁 今天为大家推荐一款刷题神奇哦:刷题面试神器牛客 各大互联网大厂面试真…

数据结构与算法之树(二)二叉查找树

数据结构与算法之树 数据结构与算法之树(一)二叉树概念及遍历方式(图文并茂) 数据结构与算法之树(二)二叉查找树 数据结构与算法之树(三)AVL树 数据结构与算法之树(四…

【算法修炼】二叉搜索树

学习自:https://labuladong.gitee.io/algo/2/19/26/ 二叉搜索树 一、BST的中序遍历230、二叉搜索树中第k小的元素(中等)1038、从二叉搜索树到更大和树(中等) 二、判断BST的合法性※98、验证二叉搜索树(中等…

数据结构(C语言)-树

树 一、树1、树的定义2、树的基本术语3、树结构和线性结构的比较 二、二叉树1、二叉树的定义2、二叉树的形态与树的形态3、二叉树的性质4 、二叉树的存储结构5、遍历二叉树6、二叉树的其他操作7、线索二叉树 三、树与二叉树的转换1、树转换成二叉树2、二叉树变树 四、哈夫曼树1…

【数据结构与算法】程序内功篇六--树

程序内功篇六--树 一、树1、树的含义2、树的特点(选看)3、树的逻辑结构 二、二叉树1、二叉树的含义2、二叉树性质3、二叉树-顺序存储4、二叉树-链式存储5、二叉树的遍历6、二叉树创建与遍历C程序的实现(1)二叉树的创建(2)前序遍历…

数据结构---与树相关的知识

与树有关的一系列知识: 树,二叉树,满二叉树,完全二叉树,文章还没完,我会后序补充的 一: 树(了解就行)1.1 概念1.2 一些与树相关的重要概念1.3 树的表示形式 二: 二叉树(非常重要,重点掌握)2.1 概念2.2 两种特殊的二叉树2.2.1 满二叉树2.2.2 完全二叉树 2.3 二叉树的性质2.4 二叉…