【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)遥感图像显示拉伸

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python也可以合并和拆分PDF,批量高效!

PDF是最方便的文档格式,可以在任何设备原样且无损的打开,但因为PDF不可编辑,所以很难去拆分合并。 知乎上也有人问,如何对PDF进行合并和拆分? 看很多回答推荐了各种PDF编辑器或者网站,确实方法比较多。 …

DRF APIView源码分析

【三】APIView源码分析 【1】Response和JsonResponse的区别 (1)Django REST framework的Response DRF的Response类是专门为构建RESTful API设计的。 它不仅仅是一个简单的JSON响应,而是包含了一系列与RESTful API交互有关的功能。 内容类型…

RK3568 学习笔记 : 更改 u-boot spl 中的 emmc 的启动次序

环境 开发板: 【正点原子】 的 RK3568 开发板 ATK-DLRK3568 u-boot 版本:来自 【正点原子】 的 RK3568 开发板 Linux SDK,单独复制出来一份,手动编译 编译环境:VMware 虚拟机 ubuntu 20.04 问题描述 RK3568 默认 …

C++笔记:类和对象

类和对象 认识类和对象 先来回忆一下C语言中的类型和变量,类型就像是定义了数据的规则,而变量则是根据这些规则来实际存储数据的容器。类是我们自己定义的一种数据类型,而对象则是这种数据类型的一个具体实例。类就可以理解为类型&#xff0c…

【数据结构与算法】用两个栈实现一个队列

题目 用两个栈,实现一个队列功能 add delete length 队列 用数组可以实现队列,数组和队列的区别是:队列是逻辑结构是一个抽象模型,简单地可以用数组、链表实现,所以数组和链表是一个物理结构,队列是一个逻…

Servlet-Filter实现反爬虫

以前用DotNetCore实现过反爬虫功能。在tomcat里面可以利用Servlet的Filter类实现请求的控制来达到反爬虫功能,进而增强JRT的web安全。 实现黑名单过滤器,对在黑名单列表的IP的所有请求都跳转到警告页面,业务各种请求自行定义加入黑名单 /* …

爆肝3k字!掌握Spring与Redis的高效交互:从Jedis到Spring Data Redis

🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…

数字孪生技术的应用场景

数字孪生技术是一种新兴技术,具有广阔的应用前景。目前,数字孪生技术已经在以下几个领域得到了广泛应用。数字孪生技术是一种具有革命性的技术,它将深刻改变我们的生活和工作方式。随着数字孪生技术的不断发展,我们可以期待在未来…

Javascript中的this关键字指向,2024年最新阿里前端开发面试解答

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7 深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞…

【C++】适配器· 优先级队列 仿函数 反向迭代器

目录 适配器:适配器的应用:1. 优先级队列:仿函数:更深入的了解仿函数:一个关于不容易被注意的知识点: 2. 反向迭代器:(list为例) 适配器: 我们先来谈来一下容…

设计模式——2_9 模版方法(Template Method)

人们往往把任性也叫做自由,但是任性只是非理性的自由,人性的选择和自决都不是出于意志的理性,而是出于偶然的动机以及这种动机对感性外在世界的依赖 ——黑格尔 文章目录 定义图纸一个例子:从文件中获取信息分几步?Rea…

Adobe AE(After Effects)2017下载地址及安装教程

Adobe After Effects是一款专业级别的视觉效果和动态图形处理软件,由Adobe Systems开发。它被广泛用于电影、电视节目、广告和其他多媒体项目的制作。 After Effects提供了强大的合成和特效功能,可以让用户创建出令人惊艳的动态图形和视觉效果。用户可以…