马萨诸塞州道路数据集预处理

今天我们将分享Massachusetts Roads遥感道路语义分割数据集,并会在下期使用FC-DenseNet进行遥感影像道路提取。

Massachusetts Roads遥感道路语义分割数据集覆盖了美国马萨诸塞州超过2600km2的面积,包含城市、城镇、农村和山区等多种地区的道路信息,图像大小均为1500像素×1500像素,空间分辨率约为1m。其中训练集1108张、验证集14张、测试集49张。部分数据如下所示。 alt

前面我们分享的网络中,都是对256*256的图像进行读取,因此我们需要对原始数据集进行处理,使之满足我们的模型需要。

这里我们调用python的rasterio库对tif影像进行操作。

「Rasterio」是一个很多模块是基于GDAL的 Python 包,可用于处理地理空间栅格数据,例如 GeoTIFF文件。为此,可以使用许多模块和函数,例如,处理来自卫星的原始数据、读取栅格数据、检索地理元数据、转换坐标、裁剪图像、合并多个图像以及以其他格式保存数据。大量的功能和易于实施使 Rasterio 成为卫星数据分析的标准工具。可以使用pip直接安装

pip install rasterio

也可以在https://www.lfd.uci.edu/~gohlke/pythonlibs/根据python版本自行下载对应rasterio的whl文件。

安装完成后,开始进行数据处理。

import os
import rasterio
from rasterio.windows import Window

def crop_images(input_folder, output_folder, window_size=256, stride=256):
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)

    for root, dirs, files in os.walk(input_folder):
        for file in files:
            if file.endswith('.tif'or file.endswith('.tiff') :  # 假设影像为TIFF格式,根据实际情况修改
                img_path = os.path.join(root, file)
                label_path = img_path.replace('data''label')
                if not os.path.exists(label_path):
                    # 尝试更换文件后缀名为.tif
                    label_path = label_path.replace('.tiff''.tif')
                # 获取对应的label路径
                output_img_folder = root.replace(input_folder, output_folder)
                output_label_folder = output_img_folder.replace('data''label')

                if not os.path.exists(output_img_folder):
                    os.makedirs(output_img_folder)
                if not os.path.exists(output_label_folder):
                    os.makedirs(output_label_folder)

                with rasterio.open(img_path) as src_img:
                    with rasterio.open(label_path) as src_label:
                        width = src_img.width
                        height = src_img.height

                        for y in range(0, height - window_size + 1, stride):
                            for x in range(0, width - window_size + 1, stride):
                                window = Window(x, y, window_size, window_size)

                                img_crop = src_img.read(window=window)
                                label_crop = src_label.read(window=window)

                                # 如果影像中含有目标并且不含nodata空值,则保存裁剪后的影像和label
                                if label_crop.any() and not (img_crop == 255).any():
                                    output_img_path = os.path.join(output_img_folder, f"{file.split('.')[0]}_{x}_{y}.tif")
                                    output_label_path = os.path.join(output_label_folder, f"{file.split('.')[0]}_{x}_{y}.tif")

                                    profile = src_img.profile
                                    profile['width'], profile['height'] = window_size, window_size

                                    with rasterio.open(output_img_path, 'w', **profile) as dst_img:
                                        dst_img.write(img_crop)

                                    profile_label = src_label.profile
                                    profile_label['width'], profile_label['height'] = window_size, window_size

                                    with rasterio.open(output_label_path, 'w', **profile_label) as dst_label:
                                        dst_label.write(label_crop)

# 调用函数对数据集进行裁剪
train_folder = './马萨诸塞州数据集/train'
val_folder = './马萨诸塞州数据集/valid'
test_folder = './马萨诸塞州数据集/test'

crop_images(train_folder, 'train_cropped', window_size=256, stride=256)
crop_images(val_folder, 'val_cropped', window_size=256, stride=256)
crop_images(test_folder, 'test_cropped', window_size=256, stride=256)

上述代码首先读取影像与对应的标签(由于部分标签后缀为tif,而大多数影像为tiff,所以在读取影像与标签时,需要进行替换后缀)。而后通过滑窗的方式生产256*256的数据,同时由于部分影像存在空值,会对后续训练产生影响,所以我们对滑窗产生的结果进行一个判断,只有当结果不存在空值(这里值为255,255,255)且含有道路目标时,才保存滑窗的结果。

处理完成的结果如下所示。 alt

获取方式

感兴趣的可以按文末方式,免费获取原始数据集

获取方法

如有需要,请关注微信公众号「DataAssassin」后,后台回复「026」领取。

本文由 mdnice 多平台发布

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

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

相关文章

Duboo-入门到学废【上篇】

目录 1🥞.什么是duboo 2🌭.架构图 3.🍿快速入门 4.🧇浅浅理解 1.什么是duboo🤶🤶🤶 Dubbo是一个由阿里巴巴开发的基于Java的开源RPC框架。它提供了高性能、透明化的远程方法调用&#xff0…

亚马逊云科技 re:Invent 2023 产品体验:亚马逊云科技产品应用实践 王炸产品 Amazon Q,你的 AI 助手

意料之中 2023年9月25日,亚马逊宣布与 Anthropic 正式展开战略合作,结合双方在更安全的生成式 AI 领域的先进技术和专业知识,加速 Anthropic 未来基础模型的开发,并将其广泛提供给亚马逊云科技的客户使用。 亚马逊云科技开发者社…

嵌入式-stm32-用PWM点亮LED实现呼吸灯

一:知识前置 1.1、LED灯怎么才能亮? 答:LED需要低电平才能亮,高电平是灯灭。 1.2、LED灯为什么可以越来越亮,越来越暗? 答:这是用到不同占空比来实现的,控制LED实现呼吸灯&…

MySQL日期查询 今天、明天、本月、下月、星期、本周第一天、本周最后一天、本周七天日期

文章目录 今天日期明天日期本月第一天本月最后一天下个月第一天当前月已过几天当前月天数当前月所有日期获取星期本周第一天本周最后一天获取本周的七天日期 今天日期 select curdate()明天日期 select DATE_SUB(curdate(),INTERVAL -1 DAY) AS tomorrow本月第一天 select d…

STM32 cubeMX 光敏电阻AD转化实验

文章代码使用 HAL 库。 文章目录 前言一、光敏电阻介绍二、光敏电阻原理图解析三、ADC采样介绍1. 工作原理:2. ADC精度: 四、STM32 cubeMX配置ADC采样五、代码编写总结 前言 实验开发板:STM32F051K8。所需软件:keil5 ,…

ElasticSearch 的 mapping 参数 - fields

概要 在 es 中,一个字段可能运用于不同的场景,但是某个字段类型的使用场景是有局限的 下面,我们先来看一段 es 查询语句: $must ["bool" > ["should" > [["range" > ["user_id.r…

tekton 发布 kubernetes 应用

tekton 发布 kubernetes 应用 基于Kubernetes 服务部署 Tekton Pipeline 实例,部署完成后使用tekton来完成源码拉取、应用打包、镜像推送和应用部署。 本文实现一个 golang-helloworld 项目 CI/CD 的完整流程,具体包括以下步骤: 从 gitee…

设计模式-依赖注入模式

设计模式专栏 模式介绍模式特点应用场景依赖注入和控制反转的区别代码示例Java实现依赖注入模式Python实现依赖注入模式 依赖注入模式在spring中的应用 模式介绍 依赖注入(Dependency Injection,简称DI)是一种面向对象编程中的设计模式&…

【目标跟踪】解决多目标跟踪遮挡问题

文章目录 前言一、判定遮挡目标二、扩展目标框三、结论 前言 目标跟踪在发生遮挡时,极其容易发生Id Switch。网上许多算法忽视跟踪遮挡问题,同时网上相关资料也很少。博主为了解决跟踪遮挡,翻阅大量论文。分享其中一篇论文。论文链接:https:…

网站被恶意扫描怎么办(上WAF)

在网络安全领域,有一大类工具被广泛使用,且作用不可忽视,它就是网络安全扫描器。扫描器是一种专门设计用来评估计算机、网络或者应用中已知的弱点的计算机程序,但是很多人恶意使用,找到网站弱点进行攻击。 扫描器的种…

Vue和React的运行时,校验引入包的上下文差异

背景 系统使用 webpack 5 模块联邦实现微前端,有关如何实现跨应用的代码共享,可参考 如何优雅的实现跨应用的代码共享 里的第三大点。 总之,这里是其他应用使用了某个应用共享出来的reg文件,引入方式为: import REG …

LSTM的记忆能力实验 [HBU]

目录 模型构建 LSTM层 模型训练 多组训练 模型评价 模型在不同长度的数据集上的准确率变化图 模型汇总 总结 长短期记忆网络(Long Short-Term Memory Network,LSTM)是一种可以有效缓解长程依赖问题的循环神经网络.LSTM 的…

ARM12.26

整理三个按键中断代码 key_it.h #ifndef __KEY_IT_H__ #define __KEY_IT_H__ #include"stm32mp1xx_gpio.h" #include"stm32mp1xx_gic.h" #include"stm32mp1xx_exti.h" #include"stm32mp1xx_rcc.h" #include"led.h" void k…

blender使用faceit绑定自己的表情动作

blender使用faceit绑定自己的表情控制模型 faceit是个神器,来记录一下如何让表情动起来保持相对位置头部分离,方便后续绑定faceitfaceit的注册rig生成地标Animate可以修正表情烘培之前记得保存使用Faceit的整个流程 faceit是个神器,来记录一下…

工具系列:TensorFlow决策森林_(3)使用dtreeviz可视化

文章目录 介绍设置安装 TF-DF 和 dtreeviz导入库 可视化分类树加载、清洗和准备数据分割训练/测试集并训练模型训练一个随机森林分类器显示决策树检查叶节点统计信息决策树如何对实例进行分类特征空间划分 可视化回归树加载、清洗和准备数据分割训练/测试集并训练模型训练一个随…

智能优化算法应用:基于协作搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于协作搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于协作搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.协作搜索算法4.实验参数设定5.算法结果6.…

nginx-proxy-manager初次登录502 bad gateway

nginx-proxy-manager初次登录502 bad gateway 按照官方docker-compose安装后,页面如下: 默认账户密码: adminexample.com/changeme点击sign in,提示Bad Gateway 打开调试 重装后依然如此,最后查阅githup issue 找到答案 https://github.com/NginxProxyManager/nginx-proxy-…

【操作系统】探究文件系统奥秘:创建proc文件系统的解密与实战

​🌈个人主页:Sarapines Programmer🔥 系列专栏:Linux专栏:《探秘Linux | 操作系统解密》⏰诗赋清音:月悬苍穹泛清辉,梦随星河徜徉辉。情牵天际云千层,志立乘风意自飞。 ​ 目录 &a…

web前端项目-七彩夜空烟花【附源码】

web前端项目-七彩动态夜空烟花【附源码】 本项目仅使用了HTML,代码简单,实现效果绚丽,且本项目代码直接运行即可实现,无需图片素材,接下来让我们一起实现一场美丽的烟花秀叭 运行效果:鼠标点击和移动可控制…

tamarin manual总结笔记5(使用流程的模型规格)

使用流程的模型规格 在本节中,我们提供了一个非正式的描述过程演算现在集成在Tamarin。它被称为SAPIC,即“状态应用PI-Calculus”。该模型的全部细节可以在(Kremer and k nnemann 2016)和(Backes et al 2017)中找到。 可以根据规则或作为(单个)流程对协…