个人网站免备案,建设银行中国网站首页,支付宝小程序api,报价表制作0. 引言
图像分割就是把图像空间按照一定的要求分成一些“有意义”的区域的技术叫图像分割。一幅图像通常是由代表物体的图案与背景组成#xff0c;简称物体与背景。若想从一幅图像中“提取”物体#xff0c;可以设法用专门的方法标出属于该物体的点#xff0c;如把物体上的…0. 引言
图像分割就是把图像空间按照一定的要求分成一些“有意义”的区域的技术叫图像分割。一幅图像通常是由代表物体的图案与背景组成简称物体与背景。若想从一幅图像中“提取”物体可以设法用专门的方法标出属于该物体的点如把物体上的点标为“1”而把背景点标为“0”通过分割以后可得一幅二值图像。
如图所示我们将遥感图像中目标地物作为前景通过语义分割网络实现前景与背景之间的分割 1. 数据获取
遥感数据获取的方式有很多主要包括自身项目获取的商业卫星影像如高分系列卫星数据等和通过网站下载获取的开源免费的遥感卫星数据如Landsat、Sentinel、MODIS等。下面列举了一些用于获取常用的免费的遥感卫星数据的网站
1.1 欧空局ESA 哨兵数据
Copernicus Data Space 是ESA提供的在线数据服务平台主要提供Sentinel卫星数据。用户需要注册账号后可以通过该平台检索和下载Sentinel数据。Copernicus Data Space 生态系统 |欧洲的地球之眼https://dataspace.copernicus.eu/
1.2 Earth Data地球科学数据系统(NASA)
地球科学数据系统 ESDS 计划提供对 NASA 地球科学数据收集的全面和开放访问提供了多种遥感数据包括MODIS、ASTER等。用户可以在该网站上注册账号并通过不同的工具获取数据如NASA Worldview、NASA GIBS等。
Earthdata | Earthdata (nasa.gov)https://www.earthdata.nasa.gov/
1.3 Google Earth EngineGEE
GEE是一个在线的遥感数据处理平台提供了全球范围内多种遥感数据。用户可以通过编写JavaScript代码在平台上进行数据处理和下载,包括Landsat、Sentinel、MODIS等系列卫星的遥感影像数据。
https://developers.google.com/earth-engine/https://developers.google.com/earth-engine/
1.4 地理空间数据云
地理空间数据云是中国科学院计算机网络信息中心下属数据平台具有包括Landsat、MODIS、Sentinel等常见遥感数据也包括高分1/2/3/4/5/6号、资源三号等国产数据。
地理空间数据云https://www.gscloud.cn/home
1.5 NOAA系列卫星数据
NOAA美国国家海洋和大气管理局的卫星系列广泛应用于科研、气象预报、环境监测和灾害管理等领域。如GOES地球静止环境卫星系列提供实时天气监测和预报能够跟踪风暴、温度、湿度等气象参数。POES极地轨道环境卫星系列和JPSS联合极地卫星系统获取全球气候数据监测温度、降水、海冰覆盖等。SST海表温度和海洋色素数据有助于研究海洋生态系统和气候变化。此外NOAA系列卫星还可以提供关于温室气体、气溶胶和臭氧层等大气成分的数据支持环境和气候变化研究。
国家环境卫星、数据和信息服务 (noaa.gov)https://www.nesdis.noaa.gov/
1.6 吉林一号高分辨率影像
“吉林一号”卫星遥感影像已广泛应用于国土资源监测、土地测绘、矿产资源开发、智慧城市建设、交通设施监测、农业估产、林业资源普查、生态环境监测、防灾减灾及应急响应等领域。
该系列卫星数据可通过教育认证形式申请免费数据使用分辨率可达亚米级
吉林一号网 (jl1mall.com)https://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.选择所有id0的数据 5.点击计算
6.在计算字段的选项框中字段名称选择id选择插入值选项并将插入值255
注值255后续可用于创建Label文件时作为目标地物的像元值该部分也可以在开始时新建一个属性字段value用于保存目标地物的像元值。
当目标地物为多个类别时可采用不同的像元灰度值作为每一类地物的标识如128255等背景为0
7.点击确定 2.5 将矢量标注文件转换为栅格数据
1.在顶部的视图选项中选择地理处理选项 2. 查找面转栅格工具 3. 在面转栅格的工具栏内进行设置
在该部分中输入要素选择最开始创建的shapefile图层值字段选择所设置像元灰度值的字段名称输出的栅格数据集选择自己的路径像元分配类型以像元中心像元大小选择进行标注的影像。
随后点击环境配置在该部分中像元大小捕获栅格输出的坐标均要以最开始参考的影像一致不然会出现导出的栅格图层与原始的影像像元数不对应的情况。 最后点击运行便可将所标注的矢量转为栅格数据.tif格式并在ArcGIS Pro中检查该标注栅格是否与原始影像的栅格像元数大小一致。 3. 数据集制作
在初步标注数据后我们将获得一对影像原始的遥感影像和相应的标注影像。然而由于遥感影像的像元数量即宽度和高度往往较大且不规则而深度学习模型的训练则需要规则的像元大小如256×256或512×512因此需要对数据进行进一步处理以符合网络训练的要求。
接下来我们将采用Python和GDAL库进行数据的滑动裁剪以生成符合训练需求的标准化影像。这一过程不仅能保证影像的连续性和完整性还能有效提高模型的训练效率和准确性。 3.1 滑动裁剪
下面这段代码用于对遥感影像进行滑动裁剪以生成适合深度学习模型训练的数据集。
代码的主要功能分为三个部分读取影像、滑动裁剪和保存裁剪结果。 读取数据read_image函数使用GDAL库读取指定路径的影像文件。可以选择读取特定波段或所有波段并将影像数据以NumPy数组的形式返回。如果影像无法打开将返回None。 滑动裁剪sliding_crop函数对读取的影像进行裁剪。首先计算是否需要在图像的边缘进行填充以确保裁剪窗口的完整性。然后利用指定的窗口大小和步长在影像上进行滑动裁剪生成多个裁剪的小图像这些小图像被存储在列表中并返回。 保存数据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_bandsNone, selected_bandsNone):dataset gdal.Open(image_path)if dataset is None:print(fCould 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), stride256):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)), modeconstant, constant_values0)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:ywindow_size[0], x:xwindow_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, fcrop_{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 rxxxx.tif# 标签的路径label_path rxxxx.tifimages 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), stride256)labels_crops sliding_crop(labels, window_size(512, 512), stride256)# 保存裁剪后的图像save_crops(images_crops,rH:\Images)# 影像块的文件夹save_crops(labels_crops,rH:\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-imageshttps://github.com/Harsh-M1/Tools-for-making-semantic-segmentation-data-sets-of-remote-sensing-images/tree/main