前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python批量更改多波段遥感数据的方法

Python批量更改多波段遥感数据的方法

作者头像
疯狂学习GIS
发布于 2024-08-08 09:37:01
发布于 2024-08-08 09:37:01
28600
代码可运行
举报
文章被收录于专栏:疯狂学习GIS疯狂学习GIS
运行总次数:0
代码可运行

  本文介绍基于Python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处理,并将所得处理后数据保存为新的遥感影像文件的方法。

  首先,看一下本文的具体需求。我们现有一个文件夹,其中含有大量.tif格式的遥感影像文件;其中,这些遥感影像文件均含有4个波段,每1个波段都表示其各自的反射率数值。而对于这些遥感影像文件,有的文件其各波段数值已经处于01的区间内(也就是反射率数据的正常数值区间),而有的文件其各波段数值则是还没有乘上缩放系数的(在本文中,缩放系数是0.0001)。

  例如,如下图所示,即为文件夹中某一景遥感影像。可以看到其各波段数值都是大于1的,这是因为其数值都是还没有乘上缩放系数的,即是真实的反射率数值10000倍。

  我们希望实现的是,对于这些遥感影像中,还没有乘上缩放系数0.0001的遥感影像,将其像元值乘上这个缩放系数;而对于已经缩放过(也就是像元数值已经落在01区间内)的遥感影像,则不加以任何处理。最后,将经过上述操作后的所有图像(无论是否执行缩放)均保存至指定的输出结果文件夹中。

  本文所需代码如下。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# -*- coding: utf-8 -*-
"""
Created on Thu Apr 18 12:37:22 2024

@author: fkxxgis
"""

import os
from osgeo import gdal

original_folder = r"E:\04_Reconstruction\99_MODIS\new_data\GF_Original"
output_folder = r"E:\04_Reconstruction\99_MODIS\new_data\GF_Rec"

for filename in os.listdir(original_folder):
    if filename.endswith('.tif'):
        dataset = gdal.Open(os.path.join(original_folder, filename), gdal.GA_ReadOnly)
        width = dataset.RasterXSize
        height = dataset.RasterYSize

        band_count = dataset.RasterCount
        driver = gdal.GetDriverByName('GTiff')
        output_dataset = driver.Create(os.path.join(output_folder, "New_" + filename), width, height, band_count, gdal.GDT_Float32)

        for band_index in range(1, band_count + 1):
            band = dataset.GetRasterBand(band_index)
            data = band.ReadAsArray()

            if band_index == 1:
                data = data.astype(float)
                data[data > 1] /= 10000
            elif band_index == 2:
                data = data.astype(float)
                data[data > 1] /= 10000
            elif band_index == 3:
                data = data.astype(float)
                data[data > 1] /= 10000
            elif band_index == 4:
                data = data.astype(float)
                data[data > 1] /= 10000

            output_band = output_dataset.GetRasterBand(band_index)
            output_band.WriteArray(data)
            output_band.FlushCache()

        output_dataset.SetGeoTransform(dataset.GetGeoTransform())
        output_dataset.SetProjection(dataset.GetProjection())

        dataset = None
        output_dataset = None

  首先,我们使用os.listdir()函数遍历原始数据文件夹中的所有文件,并使用if语句筛选出以.tif结尾的文件;随后,使用gdal.Open()函数打开原始影像数据集,并指定只读模式;接下来,使用dataset.RasterXSizedataset.RasterYSize获取影像数据集的宽度和高度。

  随后,使用dataset.RasterCount获取波段数量,并使用gdal.GetDriverByName()创建输出数据集的驱动程序对象;紧接着,通过Create()方法创建输出数据集,并指定输出文件的路径、宽度、高度、波段数量和数据类型(gdal.GDT_Float32表示浮点型)。

  接下来,就可以开始使用循环,对每个文件每个波段进行处理。首先,使用dataset.GetRasterBand()方法获取当前波段对象,然后使用band.ReadAsArray()将波段数据读取为数组;根据波段索引的不同,对波段数据进行处理。在本文中,对4个波段进行的其实是相同的处理,即将大于1的像素值除以10000

  其次,使用output_dataset.GetRasterBand()方法获取输出数据集中的当前波段对象,并使用output_band.WriteArray()方法将处理后的数据写入输出数据集。

  再次,使用dataset.GetGeoTransform()dataset.GetProjection()分别获取原始数据集的地理转换和投影信息,并使用output_dataset.SetGeoTransform()output_dataset.SetProjection()设置输出数据集的地理转换和投影信息。

  最后一步,关闭数据集对象。至此,代码就完成了对每个.tif文件的处理,并将处理后的数据保存到输出文件夹中。

  此时,打开本文开头展示的那1景遥感影像,可以看到其像素数值已经是乘上缩放系数之后的了,也就是落在了01的区间内;如下图所示。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-08-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 疯狂学习GIS 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Python自动计算大量遥感数据的NDVI
  本文介绍基于Python中的gdal模块,批量基于大量多波段遥感影像文件,计算其每1景图像各自的NDVI数值,并将多景结果依次保存为栅格文件的方法。
疯狂学习GIS
2024/07/31
2280
Python自动计算大量遥感数据的NDVI
Python GDAL批量求取栅格文件两两之差
  本文介绍基于Python语言,针对一个含有大量遥感影像栅格文件的文件夹,从其中第2景遥感影像开始,分别用每一景影像减去其前一景影像,从而求取二者的差值,并将每一个所得到的差值结果保存为新的一景遥感影像文件的方法。
疯狂学习GIS
2024/10/14
1340
Python GDAL批量求取栅格文件两两之差
Python辐射校正遥感图像并以一列的形式导出Excel
  本文介绍基于Python语言中的gdal模块,读取一景.tif格式的栅格遥感影像文件,提取其中每一个像元的像素数值,对像素值加以计算(辐射定标)后,再以一列数据的形式将计算后的各像元像素数据保存在一个.csv格式文件中的方法。
疯狂学习GIS
2024/02/29
2790
Python辐射校正遥感图像并以一列的形式导出Excel
Python批量绘制多张遥感影像并分别设定子图标题
  本文介绍基于Python语言的matplotlib模块与gdal模块,读取大量长时间序列遥感影像,分别将其不同时相的图像作为子图,绘制在1个完整的大图中,并分别为每1个子图构建、显示标题的方法。
疯狂学习GIS
2025/04/13
1230
Python批量绘制多张遥感影像并分别设定子图标题
Python提取大量栅格文件各波段的时间序列与数值变化
  本文介绍基于Python语言,读取文件夹下大量栅格遥感影像文件,并基于给定的一个像元,提取该像元对应的全部遥感影像文件中,指定多个波段的数值;修改其中不在给定范围内的异常值,并计算像元数值在每一景遥感影像中变化的差值;最终将这些数据保存为一个新的Excel表格文件的方法。
疯狂学习GIS
2024/07/22
2380
Python提取大量栅格文件各波段的时间序列与数值变化
将图像转换为8位通道_imagej像素和毫米转换
遥感图像一般像素深度比较高,基本的就是unit16了,但是如果想在OpenCV中正确使用,而且不丢失数据RGB三通道信息,就需要转为unit8才能进行其他分析。
全栈程序员站长
2022/09/30
8940
栅格数据创建与保存
使用Python进行栅格数据处理,很多时候,我们会将GDAL的Dataset对象转化为NumPy的ndarray对象,这样我们可以使用很多通用的Python库对数据进行处理,然后再借助GDAL库将数据写回到文件。
卡尔曼和玻尔兹曼谁曼
2019/01/22
1.7K0
栅格数据裁剪
在进行遥感影像处理的时候,我们经常需要进行裁剪的工作,来看看如何使用GDAL工具进行这项操作吧!
卡尔曼和玻尔兹曼谁曼
2019/03/23
2.5K0
遥感数据机器学习的准备工作:python将栅格数据提取至EXCEL
大部分我们处理的降水、气温等栅格数据的格式是nc形式,需要我们将他转换成栅格数据并导入至Arcgis中,进行下一步操作。
Twcat_tree
2023/02/28
1.5K0
遥感数据机器学习的准备工作:python将栅格数据提取至EXCEL
Python中GDAL绘制多波段图像的像素时间变化走势图
  本文介绍基于Python中的gdal模块,对大量长时间序列的栅格遥感影像文件,绘制其每一个波段中、若干随机指定的像元的时间序列曲线图的方法。
疯狂学习GIS
2023/09/06
3790
Python中GDAL绘制多波段图像的像素时间变化走势图
Python中gdal栅格影像读取计算与写入及质量评估QA波段筛选掩膜
  本文介绍基于Python语言gdal等模块对遥感影像加以处理的详细代码与操作。
疯狂学习GIS
2023/07/09
3890
Python中gdal栅格影像读取计算与写入及质量评估QA波段筛选掩膜
大栅格数据如何更快运算
这两周我在使用python进行大量的栅格数据的运算,在运算过程中遇到了数据量超级大但算力不足的问题。通过这两周的探索,也慢慢找到了一些加快栅格数据计算的方法,和读者分享。
自学气象人
2023/06/21
4280
大栅格数据如何更快运算
【Python】GDAL基本操作/遥感大图显示
遥感图像往往尺寸较大,无法用默认的图像浏览器加载。 GDAL是空间数据处理的开源包,支持多种数据格式的读写。 遥感图像是一种带大地坐标的栅格数据,因此,可以借用GDAL对遥感图像进行读写,本文就来记录一些相关操作。
zstar
2023/02/10
2.7K0
SVM检测影像的云
首先利用arcgis对landsat影像打点云样本和非云样本点图层,转为csv,用作机器学习检测样本
一个有趣的灵魂W
2020/09/15
4690
SVM检测影像的云
读取HDF或者NetCDF格式的栅格数据
HDF(Hierarchical Data Format)由NCSA(National Center for Supercomputing Applications)设计提出,官方对其定义是:HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.
卡尔曼和玻尔兹曼谁曼
2019/01/22
1.8K0
Python中gdal实现MODIS遥感影像数据读取与质量控制QC波段筛选及掩膜
  前期推文Python中gdal栅格影像读取计算与写入及质量评估QA波段筛选掩膜详细介绍了基于Python语言gdal等模块实现遥感影像栅格数据的读取,以及基于质量评估(QA)波段实现栅格像元筛选与掩膜的全部操作。而在本文,我们依据前述这一篇推文的代码,结合大家更为熟悉的MODIS系列遥感影像产品,基于其质量评估波段进行具体的对照讲解。也就是说,本文重点不在于代码的讲解(具体代码在前述这一篇推文中已经很详细地介绍了),而是将上述代码在更为具体的一个实践中加以应用,告诉大家该如何选择波段、处理质量评估QA波段并进行筛选操作等。同时,这里还有一点需要注意:在MODIS系列遥感影像中,质量评估波段更应该称为质量控制波段,因为其官方手册中将其写作Quality Control,因此后文就写作质量控制波段或QC波段。
疯狂学习GIS
2022/02/23
1.5K0
Python中gdal实现MODIS遥感影像数据读取与质量控制QC波段筛选及掩膜
C++将h5转tif:支持高分数据等szip压缩的图像
  本文介绍基于C++ 语言的hdf5库与gdal库,将.h5格式的多波段HDF5图像批量转换为.tif格式的方法;其中,本方法支持对szip压缩的HDF5图像(例如高分一号卫星遥感影像)加以转换。
疯狂学习GIS
2024/12/19
1950
C++将h5转tif:支持高分数据等szip压缩的图像
打开栅格数据的正确方式
下面的例子打开一副GeoTIFF影像,输出了影像的一些信息,然后遍历了所有波段,输出波段的一些信息
卡尔曼和玻尔兹曼谁曼
2019/01/22
1.2K0
Python干货 | 遥感影像拼接
在上一篇推文中,我展示了如何使用Python结合Landsat制作遥感影像图(Python干货 | 制作遥感影像图)。
bugsuse
2020/10/09
4K1
Python干货 | 遥感影像拼接
Python | GDAL处理影像
注意读取数据的数组下标不要越界!GDAL并不会自动帮你处理下标越界的问题,它只会报错。因此特别当你想用部分读取的方式处理一个很大的文件时,对边界的处理需要你特别的注意,必须正好读完不能越界也不能少读。
GIS与遥感开发平台
2022/04/29
4.6K0
Python | GDAL处理影像
推荐阅读
相关推荐
Python自动计算大量遥感数据的NDVI
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验