【PythonRS】基于GDAL遥感影像分幅裁剪(固定尺寸)

        之前分享过一篇分幅裁剪的文章:【Python&RS】基于GDAL遥感影像分幅裁剪,只不过这篇文章当时编写的逻辑是自己输入需要裁剪多少行多少列,由于大家可能并没有直观地希望自己裁剪多少行列,所以非常局限。今天跟大家分享一下使用固定尺寸对遥感影像进行分幅裁剪,即每张裁剪的影像都是一样大的。

原创作者:RS迷途小书童

博客地址:https://blog.csdn.net/m0_56729804?type=blog

1. 代码逻辑

        逻辑其实很简单,就是利用输入的尺寸计算出需要裁剪多少行多少列。然后按照之前文章的方法进行裁剪即可。当然这里要注意一下边缘处的处理。

2. 代码主函数

        由于和之前发的文章原理差不多,所以我这里就不做过多的解释了,代码中都有详细的注释,如果大家有什么问题可以给我留言。

ds = gdal.Open(filepath)  # 打开数据集dataset
ds_width = ds.RasterXSize  # 获取数据宽度
ds_height = ds.RasterYSize  # 获取数据高度
ds_bands = ds.RasterCount  # 获取波段数
raw = int(ds_height / size) + 1
col = int(ds_width / size) + 1
print("分割后影像行数:", raw)
print("分割后影像列数:", col)
print("分割后影像数为:", raw * col)
for j in range(0, raw):print("正在裁剪第%s行......" % (j + 1))for k in range(0, col):raw_frame = size# 计算每幅图像的高度col_frame = size# 计算每幅图像的宽度left_x = j * raw_frameleft_y = k * col_frame# 计算当前影像的左上角像素坐标raw_frame = min(ds_height-left_x, raw_frame)col_frame = min(ds_width-left_y, col_frame)# 防止幅宽超过整幅影像driver = gdal.GetDriverByName('GTiff')  # 载入数据驱动,用于存储内存中的数组ds_result = driver.Create(out_path+"%s_%s.tif" % (j+1, k+1), col_frame, raw_frame,bands=ds_bands, eType=gdal.GDT_Byte)  # 创建空tifds_geo = ds.GetGeoTransform()  # 获取仿射地理变换参数top_left_x = ds_geo[0]  # 原始影像左上角x的投影坐标top_left_y = ds_geo[3]  # 原始影像左上角y投影坐标top_left_x = top_left_x + left_y * ds_geo[1]top_left_y = top_left_y + left_x * ds_geo[5]# 计算得到当前影像的左上角投影坐标ds_geo = (top_left_x, ds_geo[1], ds_geo[2], top_left_y, ds_geo[4], ds_geo[5])# 新影像的仿射地理变换参数ds_result.SetGeoTransform(ds_geo)  # 导入仿射地理变换参数ds_result.SetProjection(ds.GetProjection())  # 导入投影信息array_band = []for i in range(1, ds_bands+1):array_band = ds.GetRasterBand(i).ReadAsArray(left_y, left_x, col_frame, raw_frame).astype(np.float64)# 根据左上角的像素坐标和幅宽读取指定区域内的数据ds_result.GetRasterBand(i).SetNoDataValue(0)  # 将无效值设为0ds_result.GetRasterBand(i).WriteArray(array_band)  # 将每个波段写入新的文件中ds_result = Nonedel ds_result

3. 总结

        今天主要分享的是遥感影像的分幅裁剪,大家可以用这段代码减少数据量,也可以用它制作样本集。同时结合之前发的那篇分幅裁剪的文章,基本上概括了所有的分幅裁剪的情况,友友们也可以根据自己的需求修改一下代码。如果大家在学习Python或者RS时有什么问题,可以随时留言交流!如果大家对批量处理有兴趣同样可以留言给博主,博主会分享相关代码以供学习!

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

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

相关文章

蓝桥杯 - 穿越雷区

解题思路: dfs 方法一: import java.util.Scanner;public class Main {static char[][] a;static int[][] visited;static int[] dx { 0, 1, 0, -1 };static int[] dy { 1, 0, -1, 0 };static long min Long.MAX_VALUE;static long count 0;publi…

记第一次eudsrc拿到RCE(上)

目录 前言 个人介绍 挖洞公式 漏洞介绍 CLI命令注入介绍 RCE漏洞介绍 漏洞详情 漏洞点1 漏洞点2 修复建议 总结 前言 免责声明 以下漏洞均已经上报漏洞平台。请勿利用文章内的相关技术从事非法测试。若因此产生一切后果与本博客及本人无关。 本来想大学四年都不会…

Linux 线程:使用管理线程、多线程、分离线程

目录 一、使用线程 1、pthread_create创建线程 2、pthread_join等待线程 主线程获取新线程退出结果 获取新线程退出返回的数组 3、线程异常导致进程终止 4、pthread_exit 5、pthread_cancel 6、主线程可以取消新线程,新线程可以取消主线程吗 二、如何管理线…

Linux 常用命令(持续更新中...)

1. ls 查看文件列表命令 语法: ls [-a -l -h] [Linux路径] -a -l -h 是可选的选项 (-h需配合-l命令一起使用)Linux路径是此命令可选的参数 ls #查看当前目录所有非隐藏文件(平铺方式显示) ls -a #查看当前目录下所有文件 …

C++11 thread_local学习笔记

C11 thread_local thread_local 是 C11 中引入的关键字,用于声明线程局部存储变量。线程局部存储变量是一种在每个线程中都有其自己的独立实例的变量。每个线程都可以独立地访问和修改其线程局部存储变量,而不会影响其他线程的对应变量。 使用 thread_…

【stm32】I2C通信外设

【stm32】I2C通信外设 概念部分 如果简单应用,选择软件I2C。如果对性能指标要求比较高 选择硬件I2C 有硬件电路自动反转引脚电平,软件只需要写入控制寄存器CR和数据寄存器DR 为了实时监控时序的状态,还要读取状态寄存器SR 写入控制寄存器CR…

力扣刷题 二叉树遍历的统一迭代法

题干 给定一个二叉树的根节点 root ,返回 它的 前中后序 遍历 。 示例 1: 输入:root [1,null,2,3] 输出:[1,3,2]示例 2: 输入:root [] 输出:[]示例 3: 输入:root […

数据挖掘入门项目二手交易车价格预测之建模调参

文章目录 目标步骤1. 调整数据类型,减少数据在内存中占用的空间2. 使用线性回归来简单建模3. 五折交叉验证4. 模拟真实业务情况5. 绘制学习率曲线与验证曲线6. 嵌入式特征选择6. 非线性模型7. 模型调参(1) 贪心调参(2)…

fping命令

fping是一个用于网络扫描的工具,它可以在 Linux 系统上使用。fping可以发送 ICMP ECHO_REQUEST(即 ping)数据包到指定的网络地址范围,并等待响应。通过这种方式,fping可以用来检测哪些 IP 地址是活跃的。 可以测试多个…

做亚马逊需要IP代理吗?需要纯净度高的吗?

做亚马逊需要IP代理吗? 在亚马逊平台上进行业务活动时,是否需要使用IP代理取决于具体的业务需求和操作环境。以下是一些考虑因素: 多账号管理:如果您在亚马逊上拥有多个卖家账号,为了避免账号关联风险,使…

浮动辊位移测量功能块(CODESYS ST代码)

1、张力测量+标定(ST代码) 张力测量+标定(ST代码)_动态舞轮控制张力-CSDN博客文章浏览阅读804次。跳舞轮对应张力调节范围,我们可以通过改变气缸的气压方式间接改变,张力跳舞轮在收放卷闭环控制上的详细应用,可以参看下面的文章链接,这里我们主要讨论精密可调气阀的模拟量…

第五届信大超越杯团体赛部分题解

第五届信大超越杯团体赛部分题解 B 时间的礼物 题目大意: 给定一个数n,通过分解n得到一个m大小的数组(数组元素可以是0)。问一共有多少种解决方案。答案对P取模。 输入三个整数 n,m,P。 样例输入: 4 2 10 样例输出…

每日五道java面试题之ZooKeeper篇(三)

目录: 第一题. 会话管理第二题. 服务器角色第三题. Zookeeper 下 Server 工作状态第四题. 数据同步第五题. zookeeper 是如何保证事务的顺序一致性的? 第一题. 会话管理 分桶策略:将类似的会话放在同一区块中进行管理,以便于 Zoo…

autovacuum

相关查询语句 select relname,reltuples from pg_class where relnamepgbench_accounts; show autovacuum_vacuum_scale_factor ; select count(*) from pgbench_accounts; \dt pgbench_accounts SELECT * FROM pgstattuple(pgbench_accounts); --需要开启插件 SELECT relnam…

微软云学习环境

微软公有云 - Microsoft Azure 本文介绍通过微软学习中心Microsoft Learn来免费试用Azure上的服务,也不需要绑定信用卡。不过每天只有几个小时的时间。 官网 https://docs.microsoft.com/zh-cn/learn/ 实践 比如创建虚拟机,看到自己的账号下多了Learn的…

Javascript/Node.JS中如何用多种方式避免属性为空(cannot read property of undefined ERROR)

>>>>>>问题 "cannot read property of undefined" 是一个常见的 JavaScript 错误,包含我在内很多人都会遇到,表示你试图访问一个未定义(undefined)对象的属性。这通常是因为你在访问一个不存在的对象…

(ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类

文章目录 相关论文摘要引言类别嵌入局限性——问题1普通ZSL模型局限性——问题2自动属性注释过程——对应问题1深度语义-视觉对齐(DSVA)模型——对应问题2 基于遥感多模态相似性的自动属性标注属性词汇表构造使用CLIP模型自动标注属性对CLIP模型进行训练…

Odoo中编写和执行自动化测试用例

在Odoo中,自动化测试是确保模块功能按预期工作的重要部分。自动化测试有助于在开发过程中快速发现和修复错误,提高软件质量,并确保代码更改不会引入新的问题。Odoo支持两种类型的测试:Python单元测试和YAML测试(在较新…

YoloV8实战:使用YoloV8实现水下目标检测(RUOD)

摘要 水下目标检测技术在生态监测、管道检修、沉船捕捞等任务中发挥着重要作用。常用的检测方法包括高清视像、侧扫声呐等。光学图像检测因高分辨率和灵活性,在近距离检测中优势显著。但水下图像受水体吸收、衰减、光源分布等影响,呈现蓝绿色&#xff0…

ideaSSM 网上选课管理系统bootstrap开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 idea 开发 SSM 网上选课管理系统是一套完善的信息管理系统,结合SSM框架和bootstrap完成本系统,对理解JSP java编程开发语言有帮助系统采用SSM框架(MVC模式开发),系统具有完整的源代码和数据库&#xff…