【GDAL-Python】10-在Python中可视化多波段卫星影像

文章目录

  • 1-介绍
    • 1.1 主要内容
    • 1.2 线性拉伸介绍
  • 2-代码实现
    • 2.1 数据介绍
    • 2.2 代码实现
    • 2.3 效果显示
  • 4-参考资料

1-介绍

1.1 主要内容

(1)在本教程中,主要介绍如何使用 Python 和 matplotlib 可视化多波段 Landsat 8 卫星影像组成的真彩色影像以及假彩色合成影像。

(2)基本过程:
1)将单个栅格波段读取为数组;
2)显示图像时的三种显示策略将波段像素值缩放到0-1;
3)使用 numpy.dstack 堆叠数组 ;
4)使用 plt.imshow() 绘制 RGB 合成

(3)视频地址:B站对应教程-在Python中可视化多波段卫星影像

(4)显示策略
由于卫星影像的像素值一般不为8bit(0-255),通常为16bit或者32bit;参考QGIS中显示图像的策略,本教程共三种显示策略,分别是:

  • 1)归一化值显示:(像素值-最小值)/(最大值-最小值)
  • 2)线性拉伸显示:(像素值-百分比累计值1)/(百分比累计值2-百分比累计值1);
  • 3)标准差值后显示
    PS:遥感图像中最常用的是线性拉伸。

参考QGIS显示策略如下图:
在这里插入图片描述

1.2 线性拉伸介绍

遥感卫星影像拉伸是一种图像处理技术,主要用于调整或增强图像的亮度和对比度,以更清晰地显示图像中的特征和细节,从而改善图像质量并帮助更准确地进行地理空间分析和解译,本质上是对像素值进行重新映射:具体技术见参考资料(1)。
2%的线性拉伸:选用像素值中2%的值都在百分比累计值阈值内的值为上述百分比累计值1,同理选用像素值中98%的值都在百分比累计值阈值内的值为上述百分比累计值2,以此两个值来计算重新映射后的像素值。

2-代码实现

2.1 数据介绍

(1)原始数据信息:选用了4个波段的WordView3影像,影像分辨率为1.24米,理论上有八个波段,但选取的实验数据为4个波段,影像尺寸为:影像元数据如下图:
在这里插入图片描述
(2)原始影像在QGIS显示效果:
在这里插入图片描述

2.2 代码实现

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
from osgeo import gdal
import numpy as np
import matplotlib.pyplot as plt
"""1.归一化值显示函数"""
def scaleMinMax(x):
    return((x - np.nanmin(x))/(np.nanmax(x) - np.nanmin(x)))
"""2.2%线性拉伸显示函数"""
def scaleCCC(x):
    return((x - np.nanpercentile(x, 2))/(np.nanpercentile(x, 98) - np.nanpercentile(x,2)))
"""3.标准差值显示函数"""
def scaleStd(x):
    return((x - (np.nanmean(x)-np.nanstd(x)*2))/((np.nanmean(x)+np.nanstd(x)*2) - (np.nanmean(x)-np.nanstd(x)*2)))
#==========================(1)读取多光谱影像========================
ds = gdal.Open(r"GDAL_testing_data\JAX_IMG1_MSI.TIF")
#==========================(2)读取出对应rgb的对应波段================
r = ds.GetRasterBand(1).ReadAsArray()
g = ds.GetRasterBand(2).ReadAsArray()
b = ds.GetRasterBand(3).ReadAsArray()

ds = None
#==========================(3)归一化值处理并显示=====================
rMinMax = scaleMinMax(r)
gMinMax = scaleMinMax(g)
bMinMax = scaleMinMax(b)

rgbMinMax = np.dstack((rMinMax,gMinMax,bMinMax))
plt.figure()
plt.imshow(rgbMinMax)
plt.show()
#==========================(4)2%线性拉伸处理并显示===================
rCCC = scaleCCC(r)
gCCC = scaleCCC(g)
bCCC = scaleCCC(b)

rgbCCC = np.dstack((rCCC,gCCC,bCCC))
plt.figure()
plt.imshow(rgbCCC)
plt.show()

rStd = scaleStd(r)
gStd = scaleStd(g)
bStd = scaleStd(b)
#==========================(5)标准差值处理并显示=====================
rgbStd = np.dstack((rStd,gStd,bStd))
plt.figure()
plt.imshow(rgbStd)
plt.show()

2.3 效果显示

运行效果与QGIS打开显示效果一致。
在这里插入图片描述

4-参考资料

(1)遥感图像显示拉伸

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

新能源锂电池起火自燃怎么办?全氟己酮自动灭火装置可以提前预防!

3月28日晚,广州市天河区某小区一居民楼突发火灾。据消防部门通报,此次火灾因室外电动自行车(未充电状态)发生自燃引起,烧毁一辆电动自行车,无人员伤亡。无独有偶,新能源汽车和自行车起火自燃的事…

1.2MHz,固定频率白光LED驱动器

一、产品概述 TX6216是一款升压转换器,设计用于通过单节锂离子电池驱动多达7个串联的白光LED。 TX6216采用电流模式,固定频率架构来调节LED电流,LED电流通过外部电流检测电阻测量。其低104mV反馈电压可降低功率损耗并提高效率。 TX6216具有…

5种方法,教你如何清理接口测试后的测试数据

在接口测试之后,清理测试数据是一个很重要的步骤,以确保下一次测试的准确性和一致性。以下是一些常见的测试数据清理方法: 1. 手动清理: 这是最基本的方法,即手动删除或重置测试数据。您可以通过访问数据库、控制台或…

数据结构学习之路--实现带头双向循环链表的详解(附C源码)

嗨嗨大家~本期带来的内容是:带头双向循环链表的实现。在上期文章中我们提到过带头双向循环链表,那么它的实现又是怎样的呢?今天我们来一探究竟! 目录 前言 一、认识带头双向循环链表 1 认识双向链表 2 带头双向循环链表的定…

【精读文献】Scientific data|2017-2021年中国10米玉米农田变化制图

论文名称:Mapping annual 10-m maize cropland changes in China during 2017–2021 第一作者及通讯作者:Xingang Li, Ying Qu 第一作者单位及通讯作者单位:北京师范大学地理学部 文章发表期刊:《Scientific data》&#xff08…

如何在 VM 虚拟机中安装 OpenEuler 操作系统保姆级教程(附链接)

一、VMware Workstation 虚拟机 若没有安装虚拟机的可以参考下篇文章进行安装: 博客链接https://eclecticism.blog.csdn.net/article/details/135713915 二、OpenEuler 镜像 点击链接前往官网 官网 选择第一个即可 三、安装 OpenEuler 打开虚拟机安装 Ctrl …

【C++】哈希一

这篇博客要说的是哈希算法,哈希又称为散列,它是将存储的值和存储的位置建立起关联关系的一种算法,或者说是一种将任意长度的数据映射为固定长度的输出的算法。 什么意思呢?我们来看一个例子:比如说我们要存储1&#xf…

控制某个对象缩放

效果如下: 您只需要控制此对象进行激活,将对象设置为:gameObject.SetActive(true);即可实现此次效果 代码如下: public class StartShowRun : MonoBehaviour {Transform _localTransfrom;Vector3 _localScale;public AnimationC…

高效可扩展,使用Dask进行大数据分析

大家好,Dask技术作为并行计算领域的创新力量,正在重塑大数据的处理模式。这项开源项目为Python语言带来了强大的并行计算能力,突破了传统数据处理在扩展性和性能上的瓶颈。 本文将介绍Dask的发展历程、架构设计,并分析其在大数据…

Qt中连接mysql

1、安装mysql,workbench,为mysql添加环境变量 2、安装Qt带src,然后到如下目录,找到mysql.pro(建议做个副本先) http://D:\Qt\Qt5.13.2\5.13.2\Src\qtbase\src\plugins\sqldrivers\mysql mysql.pro 注意路径的 \ / 和双引号的使…

算法练习第15天|226.翻转二叉树

226.翻转二叉树 力扣链接https://leetcode.cn/problems/invert-binary-tree/description/ 题目描述: 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例 1: 输入:root [4,2,7,1,3,6,9] 输出&am…

高分二号卫星(GF-2):中国遥感科技的新高度

​高分二号卫星(GF-2)是中国在高分辨率地球观测领域的重要成就,其引入了先进的成像技术和灵活的数据获取模式,为地球资源监测、环境保护、城市规划等领域提供了强大的数据支持。本文将深入介绍高分二号卫星的技术特点、成像能力以…

软件测试---性能测试

1.常见的性能问题有哪些 如图所示 系统内部以及软件的代码实现 1,资源泄漏,包括内存泄漏。 2,CPU使用率达到100%,系统被锁定等。 3,线程死锁,阻塞等造成系统越来越慢。 4,查询速度慢&#xff0c…

Console口和Telnet功能配置实验

一、基础配置 <Huawei>system-view //进入系统视图 Enter system view, return user view with CtrlZ. [Huawei]undo info-center enable //关闭接口提示 Info: Information center is disabled. [Huawei]sysname AR1 //配置设备名为 R1 [AR1]interface GigabitEthern…

pta L1-027 出租

L1-027 出租 分数 20 全屏浏览 切换布局 作者 陈越 单位 浙江大学 下面是新浪微博上曾经很火的一张图&#xff1a; 一时间网上一片求救声&#xff0c;急问这个怎么破。其实这段代码很简单&#xff0c;index数组就是arr数组的下标&#xff0c;index[0]2 对应 arr[2]1&#x…

steam怎么退款?steam退款教程?简单几步即可轻松实现退款

steam怎么退款&#xff1f;steam退款教程&#xff1f;简单几步即可轻松实现退款 说到steam平台大家肯定不会陌生&#xff0c;随着现代的发展&#xff0c;在steam上进行购买游戏已经成了很普遍的东西&#xff0c;但是许多玩家在购买游戏试完之后发现游戏并不符合自己的胃口&…

transformer上手(9)—— 翻译任务

运用 Transformers 库来完成翻译任务。翻译是典型的序列到序列 (sequence-to-sequence, Seq2Seq) 任务&#xff0c;即对于每一个输入序列都会输出一个对应的序列。翻译在任务形式上与许多其他任务很接近&#xff0c;例如&#xff1a; 文本摘要 (Summarization)&#xff1a;将长…

地质灾害监测预警系统:科技守护,构筑智能预警屏障

随着全球气候变化和人为活动的加剧&#xff0c;地质灾害频繁发生&#xff0c;给人们的生命财产安全带来了严重威胁。为了降低地质灾害带来的损失&#xff0c;地质灾害监测预警系统应运而生。本文将为您详细介绍地质灾害监测预警系统的原理、功能以及在实际应用中的效果。 一、地…

【考研数学】全年各阶段用书汇总+资料分享

我一战备考很迷茫&#xff0c;身边室友也都是&#xff0c;和室友一起去买资料&#xff0c;网上推荐的看到了就都买了 大家都不知道怎么样才能选对数学参考书然后快速进入备考状态&#xff0c;最后犹犹豫豫买了一堆资料都没有正式开始备考... 从小都算是身边人口中“偏科&…

L2-3 完全二叉树的层序遍历

完全二叉树的层序遍历 一个二叉树&#xff0c;如果每一个层的结点数都达到最大值&#xff0c;则这个二叉树就是完美二叉树。对于深度为 D 的&#xff0c;有 N 个结点的二叉树&#xff0c;若其结点对应于相同深度完美二叉树的层序遍历的前 N 个结点&#xff0c;这样的树就是完全…