遥感图像语义分割数据集制作(使用ArcGIS Pro)

0. 引言

图像分割就是把图像空间按照一定的要求分成一些“有意义”的区域的技术叫图像分割
一幅图像通常是由代表物体的图案与背景组成,简称物体与背景。若想从一幅图像中“提取”物体,可以设法用专门的方法标出属于该物体的点,如把物体上的点标为“1”,而把背景点标为“0”,通过分割以后,可得一幅二值图像

如图所示,我们将遥感图像中目标地物作为前景,通过语义分割网络实现前景与背景之间的分割:

1. 数据获取

遥感数据获取的方式有很多,主要包括自身项目获取的商业卫星影像(如高分系列卫星数据等)和通过网站下载获取的开源免费的遥感卫星数据(如Landsat、Sentinel、MODIS等)。下面列举了一些用于获取常用的免费的遥感卫星数据的网站:

1.1 欧空局ESA 哨兵数据

Copernicus Data Space 是ESA提供的在线数据服务平台,主要提供Sentinel卫星数据。用户需要注册账号后,可以通过该平台检索和下载Sentinel数据。Copernicus Data Space 生态系统 |欧洲的地球之眼icon-default.png?t=O83Ahttps://dataspace.copernicus.eu/

1.2 Earth Data地球科学数据系统(NASA)

地球科学数据系统 (ESDS) 计划提供对 NASA 地球科学数据收集的全面和开放访问,提供了多种遥感数据,包括MODIS、ASTER等。用户可以在该网站上注册账号,并通过不同的工具获取数据,如NASA Worldview、NASA GIBS等。

Earthdata | Earthdata (nasa.gov)icon-default.png?t=O83Ahttps://www.earthdata.nasa.gov/

1.3  Google Earth Engine(GEE)

GEE是一个在线的遥感数据处理平台,提供了全球范围内多种遥感数据。用户可以通过编写JavaScript代码在平台上进行数据处理和下载,包括Landsat、Sentinel、MODIS等系列卫星的遥感影像数据。

https://developers.google.com/earth-engine/icon-default.png?t=O83Ahttps://developers.google.com/earth-engine/

1.4 地理空间数据云

地理空间数据云是中国科学院计算机网络信息中心下属数据平台,具有包括Landsat、MODIS、Sentinel等常见遥感数据,也包括高分1/2/3/4/5/6号、资源三号等国产数据。

地理空间数据云icon-default.png?t=O83Ahttps://www.gscloud.cn/home

1.5 NOAA系列卫星数据

NOAA(美国国家海洋和大气管理局)的卫星系列广泛应用于科研、气象预报、环境监测和灾害管理等领域。如GOES(地球静止环境卫星)系列,提供实时天气监测和预报,能够跟踪风暴、温度、湿度等气象参数。POES(极地轨道环境卫星)系列和JPSS(联合极地卫星系统),获取全球气候数据,监测温度、降水、海冰覆盖等。SST(海表温度)和海洋色素数据,有助于研究海洋生态系统和气候变化。此外,NOAA系列卫星还可以提供关于温室气体、气溶胶和臭氧层等大气成分的数据,支持环境和气候变化研究。

国家环境卫星、数据和信息服务 (noaa.gov)icon-default.png?t=O83Ahttps://www.nesdis.noaa.gov/

1.6 吉林一号高分辨率影像

“吉林一号”卫星遥感影像已广泛应用于国土资源监测、土地测绘、矿产资源开发、智慧城市建设、交通设施监测、农业估产、林业资源普查、生态环境监测、防灾减灾及应急响应等领域。

该系列卫星数据可通过教育认证形式申请免费数据使用,分辨率可达亚米级!!

吉林一号网 (jl1mall.com)icon-default.png?t=O83Ahttps://www.jl1mall.com/

2. 数据标注

在计算机视觉任务中,尤其是在图像分割领域,数据标注通常使用Labelme工具进行目标标记。然而,与常规RGB图像(如.jpg和.png格式)不同,遥感图像通常包含更多的数据通道(如.tif格式),并且包含丰富的空间坐标信息。因此,使用传统的数据标注方法往往会导致重要属性信息的丢失。

在接下来的部分,我们将以ArcGIS Pro工具为例,进行遥感图像的数据人工标注,以便为深度学习模型的训练提供高质量的输入数据。通过这种方式,我们可以更好地保留遥感图像的多维信息,从而提高模型的性能和准确性。

2.1 加载遥感影像

2.2 新建shapefile(矢量)文件

2.3 标注目标地物

1. 选中新建的shapefile图层

2. 选择编辑

3. 点击创建

4. 选择面

5. 开始勾画索要提取的区域

2.4  设置属性值

1.选中新建的shapefile图层

2.右键该图层打开属性表

3.点击按属性选择

4.选择所有id=0的数据

5.点击计算

6.在计算字段的选项框中字段名称选择id,选择插入值选项,并将插入值=255

注:值255后续可用于创建Label文件时作为目标地物的像元值,该部分也可以在开始时新建一个属性字段value用于保存目标地物的像元值。

当目标地物为多个类别时,可采用不同的像元灰度值作为每一类地物的标识,如128,255等,背景为0

7.点击确定

2.5 将矢量标注文件转换为栅格数据

1.在顶部的视图选项中选择地理处理选项

2. 查找面转栅格工具

3. 在面转栅格的工具栏内进行设置

!!在该部分中,输入要素选择最开始创建的shapefile图层,值字段选择所设置像元灰度值的字段名称,输出的栅格数据集选择自己的路径,像元分配类型以像元中心,像元大小选择进行标注的影像。

!!随后点击环境配置,在该部分中,像元大小,捕获栅格输出的坐标均要以最开始参考的影像一致,不然会出现导出的栅格图层与原始的影像像元数不对应的情况。

最后点击运行,便可将所标注的矢量转为栅格数据(.tif格式),并在ArcGIS Pro中检查该标注栅格是否与原始影像的栅格像元数大小一致

 

3. 数据集制作

在初步标注数据后,我们将获得一对影像:原始的遥感影像和相应的标注影像。然而,由于遥感影像的像元数量(即宽度和高度)往往较大且不规则,而深度学习模型的训练则需要规则的像元大小(如256×256或512×512),因此需要对数据进行进一步处理,以符合网络训练的要求。

接下来,我们将采用Python和GDAL库进行数据的滑动裁剪,以生成符合训练需求的标准化影像。这一过程不仅能保证影像的连续性和完整性,还能有效提高模型的训练效率和准确性。

 3.1 滑动裁剪

下面这段代码用于对遥感影像进行滑动裁剪,以生成适合深度学习模型训练的数据集。

代码的主要功能分为三个部分:读取影像、滑动裁剪和保存裁剪结果。

  1. 读取数据read_image函数使用GDAL库读取指定路径的影像文件。可以选择读取特定波段或所有波段,并将影像数据以NumPy数组的形式返回。如果影像无法打开,将返回None。

  2. 滑动裁剪sliding_crop函数对读取的影像进行裁剪。首先,计算是否需要在图像的边缘进行填充,以确保裁剪窗口的完整性。然后,利用指定的窗口大小和步长,在影像上进行滑动裁剪,生成多个裁剪的小图像,这些小图像被存储在列表中并返回。

  3. 保存数据save_crops函数负责将裁剪后的影像保存到指定目录中。首先检查输出目录是否存在,不存在则创建之。接着,通过检查现有文件,确保新文件的命名不与已有文件冲突。每个裁剪图像使用连续的索引命名。save_image函数使用GDAL库将影像数据保存为GeoTIFF格式。

在主程序部分,代码读取原始影像和标注影像,确保它们的尺寸相同后,执行裁剪并保存结果。如果尺寸不一致,程序会输出相应的错误信息。整体流程高效且易于扩展,适合处理大规模遥感影像数据集。

import os
from osgeo import gdal
import numpy as np
from tqdm import tqdm# 读取数据
def read_image(image_path, num_bands=None, selected_bands=None):dataset = gdal.Open(image_path)if dataset is None:print(f"Could not open image: {image_path}")return Noneelse:if num_bands is None:num_bands = dataset.RasterCountimage_data = []for i in range(1, num_bands + 1):if selected_bands is not None and i not in selected_bands:continueband = dataset.GetRasterBand(i)band_data = band.ReadAsArray()image_data.append(band_data)return np.array(image_data)# 滑动裁剪
def sliding_crop(image, window_size=(512, 512), stride=256):height, width = image.shape[1], image.shape[2]# 计算需要填充的高度和宽度pad_height = 0pad_width = 0if height % window_size[0] != 0:pad_height = window_size[0] - (height % window_size[0])if width % window_size[1] != 0:pad_width = window_size[1] - (width % window_size[1])# 在图像右侧和下侧填充0值padded_image = np.pad(image, ((0, 0), (0, pad_height),(0, pad_width)), mode='constant', constant_values=0)crops = []for y in range(0, height + pad_height - window_size[0] + 1, stride):for x in range(0, width + pad_width - window_size[1] + 1, stride):crop = padded_image[:, y:y+window_size[0], x:x+window_size[1]]crops.append(crop)return crops# 保存数据
def save_crops(crops, output_dir):if not os.path.exists(output_dir):os.makedirs(output_dir)existing_files = os.listdir(output_dir)existing_indices = set()for filename in existing_files:if filename.startswith("crop_") and filename.endswith(".tif"):index_str = filename.split("_")[1].split(".")[0]existing_indices.add(int(index_str))start_index = max(existing_indices) + 1 if existing_indices else 0for i, crop in enumerate(crops):output_path = os.path.join(output_dir, f"crop_{start_index + i}.tif")save_image(crop, output_path)def save_image(image_data, output_path):num_bands, height, width = image_data.shapedriver = gdal.GetDriverByName("GTiff")dataset = driver.Create(output_path, width, height,num_bands, gdal.GDT_Byte)for i in range(num_bands):dataset.GetRasterBand(i + 1).WriteArray(image_data[i])dataset.FlushCache()if __name__ == "__main__":# 影像的路径image_path = r"xxxx.tif"# 标签的路径label_path = r"xxxx.tif"images = read_image(image_path)labels = read_image(label_path, 1)if images.shape[1:] == labels.shape[1:]:print("Images have same dimensions. Starting cropping...")# 设置滑动窗口的大小及步长,用于生成重叠的滑动裁剪块images_crops = sliding_crop(images, window_size=(512, 512), stride=256)labels_crops = sliding_crop(labels, window_size=(512, 512), stride=256)# 保存裁剪后的图像save_crops(images_crops,r"H:\Images")# 影像块的文件夹save_crops(labels_crops,r"H:\Labels")# 标签块的文件夹print("Cropping done and crops saved!")else:print("Images have different dimensions. Cannot proceed with cropping.")

最终,通过上述代码,我们可以生成两个对应的文件夹:Images和Labels,分别用于保存原始的遥感影像和相应的标签影像。接下来,用户可以根据自己的语义分割网络的数据读取方式,顺利进行网络训练。

代码已上传至GitHub仓库,未来还将定期更新更多用于遥感图像处理的Python代码,欢迎关注和使用!

GitHub - Harsh-M1/Tools-for-making-semantic-segmentation-data-sets-of-remote-sensing-images: The warehouse is used for making related tools for semantic segmentation data of remote sensing images, including: 1-.tif format remote sensing image and label image cropping (sliding cropping) Images and labels in 2-.tif format are converted to. jpg and. png formats. 3-label(.png format) is changed from 0-255 to gray values of 0, 1 and 2. ......The warehouse is used for making related tools for semantic segmentation data of remote sensing images, including: 1-.tif format remote sensing image and label image cropping (sliding cropping) Images and labels in 2-.tif format are converted to. jpg and. png formats. 3-label(.png format) is changed from 0-255 to gray values of 0, 1 and 2. ...... - Harsh-M1/Tools-for-making-semantic-segmentation-data-sets-of-remote-sensing-imagesicon-default.png?t=O83Ahttps://github.com/Harsh-M1/Tools-for-making-semantic-segmentation-data-sets-of-remote-sensing-images/tree/main

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/880626.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WebSocket实现在线聊天室

项目实现源码: 前端源码 后端源码 1.常见的消息推送方式 1.1 轮询 1.1.1 轮询的概念 客户端以固定的事件间隔(例如每秒或几分钟)向服务器发送HTTP请求,服务器收到请求后,处理请求并返回数据给客户端 轮询具体实现htt…

计算机毕业设计之:宠物服务APP的设计与实现(源码+文档+讲解)

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

如何把PDF样本册转换为网址链接

​随着互联网的普及,将纸质或PDF格式的样本册转化为网址链接,以便于在线浏览和分享,变得越来越重要。本文将为您详细讲解如何将PDF样本册转换为网址链接,让您轻松实现线上展示和分享。 一、了解PDF样本册与网址链接 1. PDF样本册…

游戏账号系统小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,卖家管理,游戏类别管理,游戏账号管理,站内联系管理,交易订单管理,帐号退货管理 微信端账号功能包括:系统首…

多输入多输出预测 | NGO-BP北方苍鹰算法优化BP神经网络多输入多输出预测(Matlab)

多输入多输出预测 | NGO-BP北方苍鹰算法优化BP神经网络多输入多输出预测(Matlab) 目录 多输入多输出预测 | NGO-BP北方苍鹰算法优化BP神经网络多输入多输出预测(Matlab)预测效果基本介绍程序设计往期精彩参考资料 预测效果 基本介…

数据结构:树的定义及其性质

树的定义 树是一种重要的非线性数据结构,树作为一种逻辑结构,同时也是一种分层结构。具有以下两个特点: 1.树的根结点没有前驱,除根结点意外的节点只有一个前驱 2.树中所有结点都可以有0个或多个后继 树结构在多个领域都有广泛…

GDB 调试

1. wsl 环境下搭建gdb: 1.1安装环境: #安装gcc编译器 (x86 linux) $ sudo apt install gcc #检查安装版本,看是否成功 $ gcc -v #安装gdb编译器 (x86 linux) $ sudo apt install gdb #检查安装是否成功 $ gdb 1.2 编写自己的程序&…

刷题学习日记 (1) - SWPUCTF

写这篇文章主要是想看看自己一个下午能干啥,不想老是浪费时间了,所以刷多少题我就会写多少题解,使用nss随机刷题,但是今天下午不知道为啥一刷都是SWPUCTF的。 [SWPUCTF 2021 新生赛]gift_F12 控制台ctrlf搜索flag即可&#xff0…

处理not in gzip format异常

1、为什么会触发这个异常? 当我们使用GZIPInputStream的read方法进行读取数据时,它会自动处理gzip格式的压缩数据,将它解析成原始的二进制数据。但是,如果你没有将原始数据进行gzip压缩后传入GZIPInputStream流,进行r…

车载诊断技术:汽车健康的守护者

一、车载诊断技术的发展历程 从最初简单的硬件设备到如今智能化、网络化的系统,车载诊断技术不断演进,为汽车安全和性能提供保障。 早期的汽车诊断检测技术处于比较原始的状态,主要依靠操作经验和主观评价。随着汽车工业的发展,车载诊断技术也经历了不同的阶段。20 世纪初…

视频融合共享平台LntonAIServer视频智能分析抖动检测算法和过亮过暗检测算法

LntonAIServer作为一款智能视频监控平台,集成了多种先进的视频质量诊断功能,其中包括抖动检测和过暗检测算法。这些算法对于提升视频监控系统的稳定性和图像质量具有重要意义。 以下是对抖动检测算法和过暗检测算法的应用场景及优势的详细介绍。 一、L…

数据分析:线性回归计算嵌套的组间差异

文章目录 介绍加载依赖包导入数据数据预处理数据概览线性回归画图森林图的特点:森林图的作用:总结系统信息介绍 在统计学中,嵌套的组间差异分析是一种评估不同组别间差异的方法,尤其适用于层级结构或分组数据。通过线性回归模型,我们可以计算出各个变量对于因变量的影响,…

基于Node.js+Express+MySQL+VUE新闻网站管理系统的设计与实现

1. 引言 随着互联网技术的发展,人们获取信息的方式发生了巨大的变化。传统的新闻媒体逐渐向数字化、智能化方向发展。新闻推荐网站管理系统能够帮助新闻网站更好地管理和推荐新闻内容,提高用户体验。本文将详细介绍一个新闻推荐网站管理系统的整体设计与…

《十年国庆游,洞察中国旅游新趋势》

作者:侯炯 一、十年国庆旅游数据总览 过去十年,中国国庆旅游市场呈现出丰富的变化和强劲的发展态势。从接待游客人次来看,2014 年接待国内游客 4.75 亿人次,到 2019 年已增长至 7.82 亿人次,2023 年国内旅游出游人数更…

北斗三号多模对讲机TD70:公专网融合、数模一体、音视频调度,推动应急通信效能升级

随着国家对应急通信和精准定位技术的重视程度不断提高,相关技术和设备的研发与应用也得到了迅猛发展。特别是在边防巡逻、林业巡防、海上作业等领域,通信设备的可靠性和功能性直接关系到人员的生命安全和任务的成功完成。 近年来,我国政府高度…

深度学习500问——Chapter17:模型压缩及移动端部署(1)

文章目录 17.1 模型压缩理解 17.2 为什么需要模型压缩和加速 17.3 模型压缩的必要性及可行性 17.4 目前有哪些深度学习模型压缩方法 17.4.1 前段压缩和后端压缩对比 17.4.2 网络剪枝 17.4.3 典型剪枝方法对比 17.4.4. 网络蒸馏 17.4.5 前端压缩 17.4.6 后端压缩 深度神经网络在…

A股收复3000点!外资积极看涨,对冲基金净买入量创三年来新高

9月27日,A股开盘后跳空上涨,连续四天的大幅上涨,9月26日,上证指数收复3000点大关,让一些温州股民感到兴奋不已,一些炒股群里沸腾了。但对于行情走势,股民们产生了分歧,有人是逢高减仓…

高防服务器有用吗?租用价格一般多少

高防服务器有用吗?有用。高防服务器是一种具备高度防御能力的服务器,主要用于应对DDoS攻击、CC攻击等网络威胁。它通过专业的硬件设备和先进的防御算法,为用户提供持续、稳定的网络安全防护。高防服务器的主要特点包括强大的防御能力、低延迟…

【Koa】初识 Koa

1. Koa 特点 1.1 更好的处理异步 Koa 的核心设计是基于 async/await 异步编程模型。这使得 Koa 可以更好地处理异步操作,相比于传统的回调方式,代码更清晰且更易于维护。 1.2 无内置中间件 与 Express 不同,Koa 并没有内置任何中间件&…

深入探讨在线教育系统源码:搭建知识付费平台实战方案详解

知识付费平台是软件开发行业内炙手可热的项目,其受众群体非常广,也是很多小伙伴提问比较多的,今天小编将从在线教育系统源码开始,为大家讲解一个知识付费平台的搭建开发实战方案。 一、系统架构设计 搭建在线教育系统需考虑以下几…