当前位置: 首页 > article >正文

python批量对遥感影像进行归一化与数据清洗

掌握遥感数据清洗与归一化

目录

  1. 引言:为什么要进行数据清洗与归一化?
  2. Step 1:遥感影像的读取
  3. Step 2:处理无效数据(NoData 值)
  4. Step 3:数据归一化处理
  5. Step 4:保存处理后的影像
  6. Step 5:整合与执行
  7. 完整代码
  8. 总结

引言:为什么要进行数据清洗与归一化?

遥感数据广泛应用于地球观测、环境监测、农业分析等领域,为我们提供了宝贵的地球表面信息。然而,处理遥感数据并不像直接打开照片那么简单。

遥感数据的复杂性使得我们无法直接对数据进行分析,原因包括:

  1. 噪声与空值:遥感图像的某些像素由于传感器故障或云层遮挡可能无法获得有效数据,这些无效像素通常被标记为 NoData。如果不处理,可能会导致后续分析出现偏差。
  2. 数据尺度问题:遥感影像的数值范围取决于传感器及其使用的测量标准。例如,有些数据的反射率值可能在 0 到 1 之间,而有些则是 0 到 10000。这会导致在处理多波段图像或融合多源数据时出现不一致的问题。

因此,我们需要对遥感数据进行清洗和归一化处理,以保证数据的一致性和可靠性。接下来,我们将通过具体代码演示,如何使用 Python 对遥感数据进行有效的预处理。

环境配置

首先,确保你已经安装了 GDALnumpy 库,这两个库是本教程中遥感数据处理的核心工具。

安装命令:

pip install gdal numpy

接下来,开始我们的代码讲解。

Step 1:遥感影像的读取

遥感数据通常以 GeoTIFF 格式存储,它是一种包含地理信息的多波段图像文件格式。首先,我们需要使用 GDAL 库读取 .tif 文件并提取图像数据。

代码示例:

from osgeo import gdal
import numpy as np

def get_img(dataset_img):
    width = dataset_img.RasterXSize  # 获取图像宽度(列数)
    height = dataset_img.RasterYSize  # 获取图像高度(行数)
    bands = dataset_img.RasterCount  # 获取波段数

    print(f"图像大小:{width} x {height},波段数:{bands}")
    
    proj = dataset_img.GetProjection()  # 获取投影信息
    geotrans = dataset_img.GetGeoTransform()  # 获取仿射变换矩阵
    
    img = dataset_img.ReadAsArray(0, 0, width, height)  # 读取图像数据
    return img, proj, geotrans

在这段代码中,我们使用 GDAL 来打开遥感影像并读取其行数、列数和波段数,同时提取图像的投影信息和仿射矩阵。接下来我们还需要处理每个波段的数据,确保无效像素被正确处理。

Step 2:处理无效数据(NoData 值)

在遥感影像的每个波段中,可能存在传感器无法获取的无效数据。这些数据通常被标记为 NoData,为了避免影响分析,我们需要将这些无效数据值设为 0 或其他适当的替代值。

代码

def clean_nodata(image, dataset_img):
    for i in range(image.shape[0]):  # 遍历每个波段
        band = dataset_img.GetRasterBand(i + 1)
        nodata_value = band.GetNoDataValue()  # 获取该波段的 NoData 值
...

完整文章请查看该链接:

https://mp.weixin.qq.com/s/eTuDlztP1UkTFtSikqBSvg


http://www.kler.cn/news/311993.html

相关文章:

  • 【Linux】—— muduo网络库的安装配置与使用
  • 第160天:安全开发-Python-蓝队项目流量攻击分析文件动态监控Webshell检测
  • DepthCrafter:为开放世界视频生成一致的长深度序列
  • VISIA 皮肤检测
  • 深入浅出Docker
  • Docker UI强大之处?
  • k8s部署springboot项目
  • Vue3 : Pinia的性质与作用
  • Pandas与Matplotlib:Python中的动态数据可视化
  • 计算机专业的就业方向
  • Vue 3 中 `$emit` 的使用示例
  • 最新Kali Linux超详细安装教程(附镜像包)
  • go 实现操作mysql并且防止sql注入
  • 从《中国数据库前世今生》看中国数据库技术的发展与挑战
  • C#使用实体类Entity Framework Core操作mysql入门:从数据库反向生成模型
  • 【AI】简单了解AIGC与ChatGPT
  • VUE项目运行npm run dev命令后,自动打开浏览器导航到主页
  • flink 批量写clickhouse
  • SQL 查询语句汇总
  • 金砖软件测试赛项之Jmeter如何录制脚本!
  • 算法训练——day18 两数之和三数之和
  • 力扣春招100题——队列
  • Acwing 堆
  • 【QT】基于HTTP协议的网络应用程序
  • docker构建java镜像,运行镜像出现日志 no main manifest attribute, in /xxx.jar
  • 大模型-模型架构-新型模型架构
  • 程序员常用开发软件集合
  • AirTest 基本操作范例和参数解释(一)
  • 第157天: 安全开发-Python 自动化挖掘项目SRC 目标FOFA 资产Web 爬虫解析库
  • 缓存穿透 问题(缓存空对象)