Python遥感开发之时序数据的线性插值

Python遥感开发之时序数据的线性插值

  • 0 历史博客
  • 1 实现思路
  • 2 代码实现
  • 3 效果展示

前言:在遇到空间数据的时候,尤其是哨兵、Landsat或者MODIS数据会出现局部值的空缺,为了解决这些值的空缺,通常采用插值的方法,本博客使用时序数据,采用线性插值的方法,完成遥感数据空缺值的处理。

0 历史博客

《Python开发之二维数组空缺值的近邻填充》
《Python开发之手动实现一维线性插值》

1 实现思路

1.首先读取时序数据,对读取的数据拼接在一起,然后转换成3D数组(时间、行和列),然后进行线性插值。
2.线性插值:由于输入的是一个三维数组,需要对输入的三维数据进行逐列处理,填充每列中的NaN值。如果一整列都是NaN,则保持不变。否则,对每列的NaN值进行线性插值,使得NaN值由其相邻的非NaN值来估计。最终得到一个插值完成的3D数组。
3.对三维数组的时间列进行遍历,挨个保存每一个时间对应的数据为TIF文件。

2 代码实现

from osgeo import gdal, gdalnumeric, gdalconst
import numpy as np
import osdef save_tif(data, file, output):ds = gdal.Open(file)shape = data.shapedriver = gdal.GetDriverByName("GTiff")dataset = driver.Create(output, shape[1], shape[0], 1, gdal.GDT_Float32)  # 以float类型进行存储dataset.SetGeoTransform(ds.GetGeoTransform())dataset.SetProjection(ds.GetProjection())dataset.GetRasterBand(1).WriteArray(data)def read_tif02(filepath):data = gdalnumeric.LoadFile(filepath)data = data.astype(np.float32)a = data[0][0]data[data == a] = np.nanreturn data# 进行线性插值
def linear_interpolation(data):x = np.arange(data.shape[0])data_interpolated = np.zeros_like(data)for i in range(data.shape[1]):for j in range(data.shape[2]):y = data[:, i, j]if np.all(np.isnan(y)):data_interpolated[:, i, j] = yelse:mask = np.isnan(y)y[mask] = np.interp(x[mask], x[~mask], y[~mask])data_interpolated[:, i, j] = yreturn data_interpolated"""
通过传入文件夹的路径,输出文件的完整路径
通过传入文件夹的路径,传入输出的路径和名字,输出传出文件的完整路径
"""
def get_data_list(file_path, out = "", out_name = ""):list1 = []  # 文件的完整路径if os.path.isdir(file_path):fileList = os.listdir(file_path)if out_name != "" and out != "":for f in fileList:file_name = "".join(list(filter(str.isdigit, f))) + ".tif"out_data = out + "\\" + out_name + file_namelist1.append(out_data)else:for f in fileList:pre_data = file_path + '\\' + f  # 文件的完整路径list1.append(pre_data)return list1if __name__ == '__main__':rsei_file_path = r"E:\AAWORK\work\研究方向\rsei\data\月\in"output_dir = r"E:\AAWORK\work\研究方向\rsei\data\月\out"rsei_file_path_list = get_data_list(rsei_file_path)all_data_list = []# 读取数据for tif_file in rsei_file_path_list:data = read_tif02(tif_file)all_data_list.append(data)# 转换为3D数组 (时间, 行, 列)data_array = np.array(all_data_list)# 进行线性插值data_interpolated = linear_interpolation(data_array)for i in range(data_interpolated.shape[0]):file_name = os.path.basename(rsei_file_path_list[i])file_name = file_name.replace(".tif","_interpolated.tif")out_file = os.path.join(output_dir, file_name)save_tif(data_interpolated[i], rsei_file_path_list[i], out_file)print(f"Saved: {out_file}")

3 效果展示

没有插值之前的TIF数据
在这里插入图片描述
插值之后的TIF数据
在这里插入图片描述

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

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

相关文章

在Ubuntu 14.04上安装和配置VNC的方法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 简介 VNC,即“虚拟网络计算”,是一种连接系统,允许您使用键盘和鼠标与远程服务器上的图形桌面环境进…

Python编程学习笔记(1)--- 变量和简单数据类型

1、变量 在学习编程语言之前,所接触的第一个程序,绝大多数都是: print("Hello world!") 接下来尝试使用一个变量。在代码中的开头添加一行代码,并对第二行代码进行修改,如下: message "…

中国星坤X1224系列线对板连接器:小巧稳定,助力物联网终端高效运行

在物联网、电器和消防等领域,终端设备的安全稳定运行至关重要。为了满足这些领域对连接器高可靠性、小巧轻便和耐高温的需求,X1224系列线对板连接器应运而生。这款连接器以其独特的设计和卓越的性能,成为了终端设备中不可或缺的一部分。 一、…

LeetCode415-字符串相加

题目 代码 public String addStrings(String num1, String num2) {if (num1 null) {return num2;}if (num2 null) {return num1;}int min Math.min(num1.length(), num2.length());int abs Math.abs(num1.length() - num2.length());// 0.字符串对齐(补0&…

Ubantu22.04 通过FlatPak安装微信

Ubuntu22.04 下使用Flatpak稳定安装微信! 国际惯例,废话不多说,先上效果图。为啥使用Flatpak,因为Wechat官方只在FlatPak发布了最新的版本。之前使用了Wine以及Dock安装Wechat,效果都不是很理想,bug很多。所以使用了FlatPak。 Fl…

免费的鼠标连点器电脑版教程!官方正版!专业鼠标连点器用户分享教程!2024最新

电脑技术的不断发展,许多用户在日常工作和娱乐中,需要用到各种辅助工具来提升效率或简化操作,而电脑办公中,鼠标连点器作为一种能够模拟鼠标点击的软件,受到了广大用户的青睐。本文将为大家介绍一款官方正版的免费鼠标…

力扣第134场双周赛压轴题:子数组按位与值为K的数目

题目描述 给你一个整数数组 n u m s nums nums 和一个整数 k k k ,请你返回 n u m s nums nums 中有多少个子数组满足:子数组中所有元素按位 A N D AND AND 的结果为 k k k 。 子数组是数组中连续的非空元素序列。 数据范围 1 ≤ n u m s . l e …

解释一下 Redis 的主从复制原理?

Redis 的主从复制是 Redis 实现数据冗余和高可用性的重要机制。它允许创建一个或多个 Redis 服务器(从服务器)来复制主服务器的数据,从而实现数据的备份和读写分离,提高系统的性能和可靠性。 主从复制的工作原理主要包括以下几个…

使用Java构建一个高性能的消息队列系统

使用Java构建一个高性能的消息队列系统 大家好,我是微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 消息队列系统在现代分布式系统中起着至关重要的作用,它能够提供异步通信、解耦系统组件、缓冲和削…

一.2.(3)放大电路的图解分析方法和微变等效电路分析方法;

放大电路的主要分析方法:图解法、微变等效电路法 这里以共射放大电路为例 (1) 图解法: 1.静态分析 首先确定静态工作点Q,然后根据电路的特点,做出直流负载线,进而画出交流负载线,最后,画出各极电流电压的波形。求出最大不失真输出电压。 估算IBQ,然后根据数据手册里…

09.QT控件:按钮类控件

1. QPushButton 在QT中使⽤ QPushButton 表⽰⼀个按钮。QPushButton 继承⾃ QAbstractButton,这个类是⼀个抽象类,是其他按钮的⽗类。 (1)QAbstractButton 中,和 QPushButton 相关性较⼤的属性: &#xf…

STM32-Unix时间戳和BKP备份寄存器以及RTC实时时钟

本内容基于江协科技STM32视频学习之后整理而得。 文章目录 1. Unix时间戳1.1 Unix时间戳简介1.2 UTC/GMT1.3 时间戳转换 2. BKP备份寄存器2.1 BKP简介2.2 BKP基本结构2.3 BKP库函数 3. RTC实时时钟3.1 RTC简介3.2 RTC框图3.3 RTC基本结构3.4 硬件电路3.5 RTC操作注意事项3.6 R…

vue事件处理v-on或@

事件处理v-on或 我们可以使用v-on指令(简写)来监听DOM事件,并在事件触发时执行对应的Javascript。用法:v-on:click"methodName"或click"hander" 事件处理器的值可以是: 内敛事件处理器&#xff1…

LocalDateTime 字符串与时间戳的相互转换

主要介绍LocalDateTime的格式化字符串与时间戳的相互转换 常见带日期时间格式: 字段名字段值api格式DateTimeFormatter.ISO_LOCAL_DATE_TIME字符串patternyyyy-MM-dd’T’HH:mm:ss.SSS’示例2022-06-15T22:06:29.483字符串patternyyyy-MM-dd HH:mm:ss示例2022-06-…

Golang | Leetcode Golang题解之第213题打家劫舍II

题目: 题解: func _rob(nums []int) int {first, second : nums[0], max(nums[0], nums[1])for _, v : range nums[2:] {first, second second, max(firstv, second)}return second }func rob(nums []int) int {n : len(nums)if n 1 {return nums[0]}…

SSRF靶场通关合集

目录 前言 SSRF总结 1.pikachu 1.1SSRF(curl) 1.1.1http协议 1.1.2 file协议查看本地文件 1.1.3 dict协议扫描内网主机开放端口 1.2 SSRF(file_get_content) 1.2.1 file读取本地文件 1.2.2 php://filter/读php源代码 2.DoraBox靶场 前言 最近…

恢复出厂设置手机变成砖

上周,许多Google Pixel 6(6、6a、6 Pro)手机用户在恢复出厂设置后都面临着设备冻结的问题。 用户说他们在下载过程中遇到了丢失 tune2fs 文件的错误 。 这会导致屏幕显示以下消息:“Android 系统无法启动。您的数据可能会被损坏…

openGauss配置vscode编译调试环境

如何编译和安装openGauss请参考官方文档。 生成任务文件tasks.json {"version": "2.0.0","tasks": [{"type": "shell","label": "C/C: g 生成活动文件","command": "make -sj &&a…

@Bean注解

Bean 是 Spring 框架中的一个非常重要的注解,主要用于定义和注册 bean 到 Spring 容器中。在 Spring Boot 或更广泛的 Spring 生态系统中,Bean 提供了一种灵活的方式来创建和配置 bean,而无需 XML 配置或更复杂的 Java 配置方式。 下面是 Be…

使用Kubernetes部署Spring Boot应用的实践

使用Kubernetes部署Spring Boot应用的实践 大家好,我是微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! Kubernetes(简称K8s)是一个开源的容器编排引擎,广泛用于自动化部署、扩…