Python对遥感影像重采样,以及重采样方法

news2024/9/29 18:09:56

首先,本次重采样使用的是GDAL方法完成

参考了以下博客,并根据自己的需要进行了删改以及原理的探究:
重采样:栅格影像重采样

我使用了下该代码,发现是可行的,但是仍然存在一定的问题,即他的采样方式不是我想要的(最邻近采样,对于采样间隔较大的数据十分不友好),因此又探索了下,在此记录,也方便后续自己再次学习。

再次说明,这个代码不是我写的,原创我找不到,网上大家发布的都是一个代码,我只是对这个代码加了一个参数,然后分析了下!重要参数如下:resample_alg = gdalconst.GRIORA_Average,这个代表的是重采样过程每个重采样后的像元内所有数据求平均,还有双线性插值,最邻近插值等。

from osgeo import gdal, gdalconst
import os
import numpy as np
import glob
 
def resampling(source_file, target_file, scale):
    """
    影像重采样
    :param source_file: 源文件
    :param target_file: 输出影像
    :param scale: 像元缩放比例
    :return:
    """
    dataset = gdal.Open(source_file, gdalconst.GA_ReadOnly)
    band_count = dataset.RasterCount  # 波段数
 
    if band_count == 0 or not scale > 0:
        print("参数异常")
        return
 
    cols = dataset.RasterXSize  # 列数
    rows = dataset.RasterYSize  # 行数
    cols = int(cols * scale)  # 计算新的行列数
    rows = int(rows * scale)
 
    geotrans = list(dataset.GetGeoTransform())
    # print(dataset.GetGeoTransform())
    # print(geotrans)
    geotrans[1] = geotrans[1] / scale  # 像元宽度变为原来的scale倍
    geotrans[5] = geotrans[5] / scale  # 像元高度变为原来的scale倍
    print(geotrans)
 
    if os.path.exists(target_file) and os.path.isfile(target_file):  # 如果已存在同名影像
        os.remove(target_file)  # 则删除之
 
    band1 = dataset.GetRasterBand(1)
    data_type = band1.DataType
    target = dataset.GetDriver().Create(target_file, xsize=cols, ysize=rows, bands=band_count,
                                        eType=data_type)
    target.SetProjection(dataset.GetProjection())  # 设置投影坐标
    target.SetGeoTransform(geotrans)  # 设置地理变换参数
    total = band_count + 1
    for index in range(1, total):
        # 读取波段数据
        # print("正在写入" + str(index) + "波段")
        data = dataset.GetRasterBand(index).ReadAsArray(buf_xsize=cols, buf_ysize=rows, resample_alg = gdalconst.GRIORA_Average)
        out_band = target.GetRasterBand(index)
        # out_band.SetNoDataValue(dataset.GetRasterBand(index).GetNoDataValue())
        out_band.WriteArray(data)  # 写入数据到新影像中
        out_band.FlushCache()
        out_band.ComputeBandStats(False)  # 计算统计信息
    # print("正在写入完成")
    del dataset
    del target
 
 
if __name__ == "__main__":
    dir_in=r'D:\dataset\ours'
    dir_out=r'D:\dataset\our_1_average'
    for file_i in glob.glob(os.path.join(dir_in,'*.tiff')):
        file_name=os.path.split(file_i)[1]
        source_file=file_i
        target_file=os.path.join(dir_out,file_name)
        resampling(source_file, target_file, scale=0.1)
        print(file_name)

其他的几个重采样方式关键字:

'GRIORA_Average',
 'GRIORA_Bilinear',
 'GRIORA_Cubic',
 'GRIORA_CubicSpline',
 'GRIORA_Gauss',
 'GRIORA_Lanczos',
 'GRIORA_Mode',
 'GRIORA_NearestNeighbour'

下面讲讲这个的平均大概是什么样的方式:

原始栅格如下:生成的一个10*10大小的顺序数组
在这里插入图片描述

1 重采样的分辨率刚好同原始分辨率成倍数关系:将其重采样成5*5

在这里插入图片描述
这里我们可以看到:第一个数字5.5 刚好就是(0+1+10+11)/4的结果其他的数据也是对应位置求平均,很好理解。

2 降采样成4*4呢?

在这里插入图片描述
那么这个是怎么计算的呢?以第一个数字为例:他的结果应该是这样,重采样后的像元将原始的前四个像元都是完全包了的(数值为0,1,10,11)然后(数值为2,12,20,21)四个像元都只能包含一半,数值为22的像元只能包含1/4。 所以同理,如果不等分,就是按照原始像元的覆盖率来进行求得平均:这儿的例子来讲:
8.8=((0+1+10+11)+((2+12+20+21)/2)+(22/4))/(4+4/2+1/4)
(0+1+10+11)代表四个完整的像元值
(2+12+20+21)四个像元只覆盖了一半,所以他的值应该只算一半
(22)只覆盖了1/4,所以只能算成22/4

(4+4/2+1/4)代表覆盖的原始像元个数。
在这里插入图片描述

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

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

相关文章

【java web篇】Maven的基本使用以及IDEA 配置Maven

📋 个人简介 💖 作者简介:大家好,我是阿牛,全栈领域优质创作者。😜📝 个人主页:馆主阿牛🔥🎉 支持我:点赞👍收藏⭐️留言&#x1f4d…

Redis高级-主从复制相关操作

2.1 主从复制简介 2.1.1 高可用 首先我们要理解互联网应用因为其独有的特性我们演化出的三高架构 高并发 应用要提供某一业务要能支持很多客户端同时访问的能力,我们称为并发,高并发意思就很明确了 高性能 性能带给我们最直观的感受就是:速…

西北工业大学大学物理(I)下期末考试2021-2022选填解析

11 告诉你n2了,那么l0或者1,后续限制类推。2 几乎每年都出。散射波波长的偏移只与散射角有关。3 产生激光的条件。先认识到激光就是受激幅射光放大。受激辐射是产生激光的必要条件,粒子数偏转是产生激光的必要条件,谐振腔也需要。…

速来~与 Werner Vogels 博士一起探索敏捷性与创新速度一起提升的秘方

Amazon Web Services 的现代应用程序创新一直是 Amazon 公司坚持追求的核心目标。约20年前,我们经历了一次彻底的转型,旨在建立起“发明、发布、再发明、再发布、重新开始、洗牌、再重复”的快速迭代流程。正是此番探索,彻底改变了我们构建应…

OAK相机如何将yoloV8模型转换成blob格式?

编辑:OAK中国 首发:oakchina.cn 喜欢的话,请多多👍⭐️✍ 内容可能会不定期更新,官网内容都是最新的,请查看首发地址链接。 ▌前言 Hello,大家好,这里是OAK中国,我是助手…

Paddle配置

目录: 1.激活环境 2.版本选择 突发情况:ModuleNotFoundError: No module named paddle 检验是否安装成功 1.激活环境 Anaconda: conda remove -n paddle --all conda activate paddle 2.版本选择 打开链接:https://www.pa…

银行数字化转型导师坚鹏:BLM银行数字化转型战略课程大纲

BLM银行数字化转型战略——以BLM模型为核心,实现知行果合一 课程背景: 很多银行存在以下问题: 不知道如何系统地制定银行数字化转型战略? 不清楚其它银行数字化转型战略是如何制定的? 不知道其它银行数字化转型战略…

【离线数仓-8-数据仓库开发DWD层设计要点-工具域互动域流量域用户域相关事实表】

离线数仓-8-数据仓库开发DWD层-工具域&互动域&流量域&用户域相关事实表离线数仓-8-数据仓库开发DWD层设计要点-工具域&互动域&流量域&用户域相关事实表一、工具域相关事实表1.工具域优惠券领取事务事实表&使用(下单)事务事实…

基于nodejs+vue的果蔬商城在线销售系统vscode

水果蔬菜在线销售借助于当今盛行互联网技术,为消费者和供应商提供了一个更加方便的交易平台,使消费者足不出户就可以选购所需商品,省下许多时间和精力。商家通过该销售系统可以快速了解市场行情,更好地适应市场需求,扩…

【华为OD机试模拟题】用 C++ 实现 - 找到它(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 去重求和(2023.Q1) 文章目录 最近更新的博客使用说明找到它题目输入输出示例一输入输出示例二输入输出说明Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 OD …

工具篇(四)基于WPS的数据处理和分析

作者的话 大家好,我是一名练习时长两年半的数据分析师,今天想和大家分享一下我在使用WPS进行数据操作时的经验。 在日常工作中,数据处理是我们最常用到的功能之一。而在处理数据时,一个强大的工具是至关重要的。我个人非常喜欢使…

Clickhouse学习:MergeTree

MergeTree一、MergeTree逻辑存储结构二、MergeTree物理存储结构三、总结一、MergeTree逻辑存储结构 如上图所示,在排序键(CountrID、Date)上做索引,数据会按照这两个字段先后排序ClickHouse是稀疏索引,每隔8192行做一个索引,如(a,1),(a,2),比如想查a,要读取[0,3)之间的内容,稀疏…

2023年三月份图形化四级打卡试题

活动时间 从2023年3月1日至3月21日,每天一道编程题。 本次打卡的规则如下: 小朋友每天利用10~15分钟做一道编程题,遇到问题就来群内讨论,我来给大家答疑。 小朋友做完题目后,截图到朋友圈打卡并把打卡的截图发到活动群…

网络原理之初识

目录 一. 网络互连 1. 局域网 2. 广域网 二. 网络通信基础 1. IP 地址 2. 端口号 3. 网络协议 4. 协议分层 5. TCP/IP 五层网络模型 (简述) 6. 网络数据传输的基本流程 一. 网络互连 随着时代的发展,越来越需要计算机之间互相通信&am…

【华为OD机试模拟题】用 C++ 实现 - IPv4 地址转换成整数(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 去重求和(2023.Q1) 文章目录 最近更新的博客使用说明IPv4 地址转换成整数题目输入输出示例一输入输出说明示例一输入输出说明Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,

使用Phpstorm进行项目管理

对于项目管理我们还是使用传统的终端命令行(命令行很重要是基础中的基础)么 ? 不现在我们要通过工具提高我们的效率,作为一名合格的程序猿下班提交代码是我们的基操!!!!但是经过一天…

ctf pwn基础-4

今天是学pwn的第四天,去接触了pwn的整数溢出。 目录 基础 实例讲解 实例讲解2 基础 关于整数溢出,这里以int为例,因为我php之前搞的比较多,以为这个int也是想php一样是64,最大值是9开头的那个,闹了不少笑…

关于程序员中年危机的一个真实案例

​ 关于中年危机,网上已经有了各种各样的解读。但是,这两天一个学员跟我简单几句聊天,却触发了对于中年危机的另一种思考。如果你曾经也有点迷茫,或许你可以稍微花几分钟看下这个故事。 一、无奈的故事 ​ 39岁还出来面试&#x…

论文阅读:NeRF Representing Scenes as Neural Radiance Fields for View Synthesis

论文阅读–NeRF Representing Scenes as Neural Radiance Fields for View Synthesis 这是 2020 ECCV 的一篇文章,记得好像还获得了最佳论文奖的提名,这篇文章相当于将自由视点生成这个方向开辟出了一个新的解决思路。 文章的作者们提出了一种可以对复…

数据结构与算法——1.数据结构概述

从这篇文章开始,我们来讲一下数据结构与算法的相关内容 1.数据结构概述 什么是数据结构? 官方解释: 数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及他们之间的关系和操作等相关问题的学科。 大白话&#xff1…