Python读取栅格遥感影像并加以辐射校正后导出为Excel的一列数据

简介: Python读取栅格遥感影像并加以辐射校正后导出为Excel的一列数据

  本文介绍基于Python语言中的gdal模块,读取一景.tif格式的栅格遥感影像文件,提取其中每一个像元的像素数值,对像素值加以计算(辐射定标)后,再以一列数据的形式将计算后的各像元像素数据保存在一个.csv格式文件中的方法。

  首先,我们明确一下本文的需求。现在有一个栅格遥感影像文件,其为.tiff格式的文件(但其实和.tif格式文件的操作方法是一样的),且像元的数值都是真实数值乘上10000之后的。这一遥感影像如下图所示,可以看到其各个波段的像元像素数据都是几百、几千的范围。

  我们现在希望,对于这一景遥感影像的第一个波段(如果大家需要对多个波段加以这一操作,那么就在本文的代码中加以循环,分别对多个波段依次加以同样的处理就好),提取出其中每一个像元的数值;随后对提取出来的数据加以辐射定标,即除以10000,并将结果保存在一个.csv格式文件中,且以一列的形式来保存。这里本文之所以需要用多行一列而非多行多列矩阵格式来存放数据,是因为后面需要将这些像素数据当作神经网络的预测样本,即一行表示一个样本,所以就需要保存为多行一列;如果大家需要保存为多行多列矩阵格式,那代码的思路还是一致的,就是在导出数据之前将其保存为二维矩阵格式的变量就好。

  知道了需求,我们就可以开始代码的撰写;具体代码如下。

# -*- coding: utf-8 -*-
"""
Created on Wed Nov 29 01:32:28 2023
@author: fkxxgis
"""
import csv
from osgeo import gdal
file_path = "E:/04_Reconstruction/05_Image_Test/GF1WFV4.16m.2021252035621.48STB.000000_SR.tiff"
dataset = gdal.Open(file_path, gdal.GA_ReadOnly)
band = dataset.GetRasterBand(1)
data = band.ReadAsArray()
dataset = None
data = data * 0.0001
data_one_column = data.flatten()
csv_file = "E:/04_Reconstruction/05_Image_Test/column_1.csv"
with open(csv_file, 'w', newline='') as file:
    writer = csv.writer(file)
    writer.writerow(["Value"])
    writer.writerows([[value] for value in data_one_column])

  其中,我们首先导入所需的库。在这里,csv库用于处理.csv格式文件,gdal库(从osgeo模块中导入)则用于读取和处理遥感影像文件;随后,定义遥感影像文件路径——file_path用来指定要读取的遥感影像文件的路径。

  接下来,我们打开遥感影像文件。dataset = gdal.Open(file_path, gdal.GA_ReadOnly)意味着我们以只读方式打开遥感影像文件,并将返回的Dataset对象赋值给变量dataset;随后,获取第一个波段的像元值,这可以通过band = dataset.GetRasterBand(1)来完成(需要注意,这里波段编号的索引是从1开始的);随后,data = band.ReadAsArray()意思是将波段的像元值读取为一个二维数组,并将结果赋值给变量data。随后,我们需要关闭遥感影像文件,通过将dataset变量设为None,释放对遥感影像文件的引用,从而关闭文件。

  其次,我们对像元值进行处理。首先,完成辐射定标,也就是通过data = data * 0.0001将像元值乘以0.0001;随后,将处理后的像元值按列展平——在这里,data_one_column = data.flatten()表示我们使用flatten()方法将二维数组展平为一维数组,并将结果赋值给变量data_one_column

  最后,将上述处理好的数据写入.csv格式文件。其中,csv_file指定要写入的.csv格式文件的路径;with open(csv_file, 'w', newline='') as file表示我们使用open()函数打开.csv格式文件,并创建一个csv.writer对象,同时指定文件的写入模式为覆盖写入'w'writer.writerow(["Value"])意味着我们写入.csv格式文件的第一行,即表头,这里是一个标题为Value的列;最后,writer.writerows([[value] for value in data_one_column])通过迭代data_one_column中的每个值,并将其作为单独的列表传递给writer.writerows()方法,从而将每个值写入.csv格式文件的一行中。

  运行上述代码,即可得到如下图所示的结果.csv格式文件。

  其中,第一行就是我们的列名;后面几行数据都是0,这是由于原本的遥感影像在左上角区域NoData值(大家看我们本文的第一张图就能看到)导致的。如果往下继续拖动这个.csv格式文件,就会看到处理后的非0数据了。

  至此,大功告成。

欢迎关注:疯狂学习GIS

相关文章
|
23天前
|
数据采集 数据可视化 数据挖掘
利用Python自动化处理Excel数据:从基础到进阶####
本文旨在为读者提供一个全面的指南,通过Python编程语言实现Excel数据的自动化处理。无论你是初学者还是有经验的开发者,本文都将帮助你掌握Pandas和openpyxl这两个强大的库,从而提升数据处理的效率和准确性。我们将从环境设置开始,逐步深入到数据读取、清洗、分析和可视化等各个环节,最终实现一个实际的自动化项目案例。 ####
|
21天前
|
数据采集 分布式计算 大数据
构建高效的数据管道:使用Python进行ETL任务
在数据驱动的世界中,高效地处理和移动数据是至关重要的。本文将引导你通过一个实际的Python ETL(提取、转换、加载)项目,从概念到实现。我们将探索如何设计一个灵活且可扩展的数据管道,确保数据的准确性和完整性。无论你是数据工程师、分析师还是任何对数据处理感兴趣的人,这篇文章都将成为你工具箱中的宝贵资源。
|
1月前
|
传感器 物联网 开发者
使用Python读取串行设备的温度数据
本文介绍了如何使用Python通过串行接口(如UART、RS-232或RS-485)读取温度传感器的数据。详细步骤包括硬件连接、安装`pyserial`库、配置串行端口、发送请求及解析响应等。适合嵌入式系统和物联网应用开发者参考。
53 3
|
20天前
|
机器学习/深度学习 前端开发 数据处理
利用Python将Excel快速转换成HTML
本文介绍如何使用Python将Excel文件快速转换成HTML格式,以便在网页上展示或进行进一步的数据处理。通过pandas库,你可以轻松读取Excel文件并将其转换为HTML表格,最后保存为HTML文件。文中提供了详细的代码示例和注意事项,帮助你顺利完成这一任务。
32 0
|
1月前
|
图形学 Python
SciPy 空间数据2
凸包(Convex Hull)是计算几何中的概念,指包含给定点集的所有凸集的交集。可以通过 `ConvexHull()` 方法创建凸包。示例代码展示了如何使用 `scipy` 库和 `matplotlib` 绘制给定点集的凸包。
31 1
|
1月前
|
数据采集 JavaScript 程序员
探索CSDN博客数据:使用Python爬虫技术
本文介绍了如何利用Python的requests和pyquery库爬取CSDN博客数据,包括环境准备、代码解析及注意事项,适合初学者学习。
81 0
|
1月前
|
数据采集 存储 分布式计算
超酷炫Python技术:交通数据的多维度分析
超酷炫Python技术:交通数据的多维度分析
|
1月前
|
索引 Python
SciPy 空间数据1
SciPy 通过 `scipy.spatial` 模块处理空间数据,如判断点是否在边界内、计算最近点等。三角测量是通过测量角度来确定目标距离的方法。多边形的三角测量可将其分解为多个三角形,用于计算面积。Delaunay 三角剖分是一种常用方法,可以对一系列点进行三角剖分。示例代码展示了如何使用 `Delaunay()` 函数创建三角形并绘制。
36 0
|
2月前
|
数据采集 存储 JavaScript
自动化数据处理:使用Selenium与Excel打造的数据爬取管道
本文介绍了一种使用Selenium和Excel结合代理IP技术从WIPO品牌数据库(branddb.wipo.int)自动化爬取专利信息的方法。通过Selenium模拟用户操作,处理JavaScript动态加载页面,利用代理IP避免IP封禁,确保数据爬取稳定性和隐私性。爬取的数据将存储在Excel中,便于后续分析。此外,文章还详细介绍了Selenium的基本设置、代理IP配置及使用技巧,并探讨了未来可能采用的更多防反爬策略,以提升爬虫效率和稳定性。
160 4
|
4月前
|
关系型数据库 MySQL Shell
不通过navicat工具怎么把查询数据导出到excel表中
不通过navicat工具怎么把查询数据导出到excel表中
54 0