基于Python 中创建 Sentinel-2 RGB 合成图像
一、前言
下面的python代码将带您了解如何从原始 Sentinel-2 图像创建 RGB 合成图像的过程。
免费注册后,可以从 Open Access Hub 下载原始图像。 请注意,激活您的帐户可能需要 24 小时!
二、准备工作
(1)导入必要的库
import matplotlib.pyplot as plt
import numpy as np
import rasterio
import os
from osgeo import gdal 加载库后,我们必须定义输入和输出文件夹。 输入文件夹是您必须放置下载的 Sentinel-2 图像的地方。 输出文件夹是我们的脚本将保存 RGB 合成图像的地方。
(2)还必须为每个波段指定输入文件名。
fp_in='input/'
fp_out='output/'fn_blue='Tihany_T33TYN_A021798_20210509T094028_B02'
fn_green='Tihany_T33TYN_A021798_20210509T094028_B03'
fn_red='Tihany_T33TYN_A021798_20210509T094028_B04' 要使用 Sentinel-2 图像,首先我们必须将它们从 '.jp2' 文件格式转换为 '.tif' 文件格式,因为 Rasterio 库只能处理后者。
bandList = [band for band in os.listdir(fp_in) if band[-4:]=='.jp2']
for band in bandList:in_image = gdal.Open(fp_in+band)driver = gdal.GetDriverByName("GTiff")fp_tif = fp_in+band[:-4]+'.tif'out_image = driver.CreateCopy(fp_tif, in_image, 0)in_image = Noneout_image = None 三、创建原始 RGB 合成
让我们为每个转换后的 Sentinel-2 图像定义文件路径,并使用 Rasterio 打开它们。
band_02=rasterio.open(fp_in+fn_blue+'.tif')
band_03=rasterio.open(fp_in+fn_green+'.tif')
band_04=rasterio.open(fp_in+fn_red+'.tif') 现在我们必须读入打开的文件。
red = band_04.read(1)
green = band_03.read(1)
blue = band_02.read(1) (1) 如果我们查看红色波段栅格,我们将看到以下内容:
plt.imshow(red)
蓝色图像基本上是一个强度图,其中每个像素代表 Sentinel-2 传感器在红色波段中捕获的反射光量。 较亮的像素(较高的值)代表更多的红色内容,而较暗的像素(较低的值)代表较少的红色内容。
我们可以使用“cmap”命令更改蓝色表示。 在下面的示例中,我选择了“Reds”表示。
(请注意,还有许多其他选项。有关更多详细信息,请查看 Matplotlib 文档)。
plt.imshow(red, cmap='Reds')
现在让我们看看红色、绿色和蓝色通道图像是什么样子的。
fig = plt.figure(figsize=(20,6))
ax1 = fig.add_subplot(1,3,1)
ax1.imshow(red, cmap='Reds')
ax1 = fig.add_subplot(1,3,2)
ax1.imshow(green, cmap='Greens')
ax1 = fig.add_subplot(1,3,3)
ax1.imshow(blue, cmap='Blues')
您可以使用 shape 命令获取红色带图像的大小,如下所示。
如您所见,此图像是一个具有 582 行和 981 列的二维数组。
要制作 RGB 合成图,我们必须使用 np.dstack 命令将红色、绿色和蓝色波段图像堆叠在一起成为一个图像。
如果我们在新创建的 RGB 合成上再次调用形状命令,我们将看到,现在我们得到了一个包含红色、绿色和蓝色通道的 3D 数组。
rgb_composite_raw= np.dstack((red, green, blue))
rgb_composite_raw.shape
现在让我们看一下 RGB 图像...
plt.imshow(rgb_composite_raw)
这不是我们要找的,对吧? 问题的根源在于大多数图像的像素值范围为 0-255 或 0-1。 如果我们查看红色带的最大像素值,我们会得到超过 255。
(2) 我们现在能做什么? 此问题的解决方案是对 0..1 之间的所有像素值进行归一化。
def normalize(band):band_min, band_max = (band.min(), band.max())return ((band-band_min)/((band_max - band_min)))red_n = normalize(red)
green_n = normalize(green)
blue_n = normalize(blue) 在对我们的图像进行归一化处理后,一个波段的最大值和最小值应为 0 和 1。
现在让我们再次进行 RGB 堆栈,看看我们得到了什么结果。
rgb_composite_n= np.dstack((red_n, green_n, blue_n))
plt.imshow(rgb_composite_n)
最后我们可以看到我们感兴趣的区域,但是颜色似乎不太真实,整个图像有点暗。
四、基本图像处理技术
(1)波段运算
为了解决这个问题,我们必须先使每个波段变亮,然后将它们归一化并进行叠加。从数学的角度来看,增亮函数将每个像素值与“alpha”相乘,并在必要时添加“beta”值。如果完成此操作,我们必须将结果像素值裁剪在 0..255 之间。
def brighten(band):alpha=0.13beta=0return np.clip(alpha*band+beta, 0,255)red_b=brighten(red)
blue_b=brighten(blue)
green_b=brighten(green)red_bn = normalize(red_b)
green_bn = normalize(green_b)
blue_bn = normalize(blue_b) 现在让我们看一下对波段进行增亮和标准化后的新 RGB 合成图。
rgb_composite_bn= np.dstack((red_bn, green_bn, blue_bn))
plt.imshow(rgb_composite_bn)
现在我们的图像看起来非常逼真。 请注意,此图像并不代表真实的反射率值。
另一种图像处理技术是伽马校正。 它背后的数学原理是我们采用每个像素的强度值并将其提高到 (1/gamma) 的幂,其中 gamma 值由我们指定。
让我们使用我们的原始图像,进行伽马校正和归一化。
def gammacorr(band):gamma=2return np.power(band, 1/gamma)red_g=gammacorr(red)
blue_g=gammacorr(blue)
green_g=gammacorr(green)red_gn = normalize(red_g)
green_gn = normalize(green_g)
blue_gn = normalize(blue_g) 现在让我们看看结果。
rgb_composite_gn= np.dstack((red_gn, green_gn, blue_gn))
plt.imshow(rgb_composite_gn)
(2)将图像保存为PNG
此时大多数人想做的是将图像保存到文件中。这可以通过以下代码行来完成,将亮化和规范化的图像保存到 PNG 文件中。
请注意,给出了一种插值方法来平滑图像,并且还可以控制 dpi 值。有关详细信息,请访问 Pyplot 文档。
rgb_plot=plt.imshow(rgb_composite_bn, interpolation='lanczos')
plt.axis('off')
plt.savefig(fp_out+'tihany_rgb_composite.png',dpi=200,bbox_inches='tight')
plt.close('all')
相关文章:
基于Python 中创建 Sentinel-2 RGB 合成图像
一、前言 下面的python代码将带您了解如何从原始 Sentinel-2 图像创建 RGB 合成图像的过程。 免费注册后,可以从 Open Access Hub 下载原始图像。 请注意,激活您的帐户可能需要 24 小时! 二、准备工作 (1)导入必要的库…...
保姆级连接FusionInsight MRS kerberos Hive
数新网络,让每个人享受数据的价值https://xie.infoq.cn/link?targethttps%3A%2F%2Fwww.datacyber.com%2F 概述 本文将介绍在华为云 FusionInsight MRS(Managed Relational Service)的Kerberos环境中,如何使用Java和DBeaver实现远…...
electerm 跨平台的终端 /ssh/sftp 客户端
文章目录 electerm功能特性主题配色 electerm 每个程序员基本都离开SSH链接工具,目前市场上好用的基本都是收费的 给大家推荐一款国人开发的开源链接工具https://github.com/electerm/electerm 到目前为止star已经9.5K了,非常受欢迎 功能特性 支持ssh,telnet,serialport,本地和…...
Anthropic LLM论文阅读笔记
研究时间:与Instrcut GPT同期的工作,虽然其比ChatGPT发布更晚,但是其实完成的时间比ChatGPT更早。与ChatGPT的应用区别:该模型比ChatGPT回答我不知道的概率更高。将强化学习用于大语言模型(RLHF)࿱…...
docker启动容器失败,然后查看日志,docker logs查看容器出现报错:
docker 启动容器失败,然后docker logs 查看容器出现报错: error from daemon in stream: Error grabbing logs: invalid character l after object key:value pair在网上看到的 解决方案: 找到你日志文件目录: docker inspect …...
【开源】基于Vue.js的网上药店系统
项目编号: S 062 ,文末获取源码。 \color{red}{项目编号:S062,文末获取源码。} 项目编号:S062,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 药品类型模块2.3 药…...
App 设计工具
目录 说明 打开 App 设计工具 示例 创建 App 创建自定义 UI 组件 打开现有 App 文件 打包和共享 App 本文主要讲述以交互方式创建 App。 说明 App 设计工具是一个交互式开发环境,用于设计 App 布局并对其行为进行编程。 可以使用 App 设计工具:…...
毅速:3D打印随形透气钢为解决模具困气提供了新助力
在模具行业中,困气是一个较常见的问题。解决困气问题的方法有很多,透气钢就是其一。传统的制造的透气钢往往存在一些不足,如加工难度大、无法满足复杂形状的需求等。随着3D打印技术的发展,一种新型的随形透气钢技术逐渐崭露头角&a…...
某软件商店app抓包分析与sign加密算法实现
文章目录 1. 写在前面2. 抓包配置3. 抓包分析4. 接口测试5. sign加密算法6. 数据效果展示 【作者主页】:吴秋霖 【作者介绍】:Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作! 【作者推荐】…...
万界星空科技QMS质量管理系统功能
QMS质量管理系统结合质量决策、综合质量管理、过程质量控制三个层次要素,帮助企业实现产品全寿命周期质量数据的及时、灵活、准确和全面采集。 通过质量管理软件能够实现质量数据科学处理和应用,包括数据的系统化组织、结构化存贮、便捷式查询、定制化统…...
杨传辉:从一体化架构,到一体化产品,为关键业务负载打造一体化数据库
在刚刚结束的年度发布会上,OceanBase正式推出一体化数据库的首个长期支持版本 4.2.1 LTS,这是面向 OLTP 核心场景的全功能里程碑版本,相比上一个 3.2.4 LTS 版本,新版本能力全面提升,适应场景更加丰富,有更…...
oracle “ORA-25153:临时表空间为空”
从生产上面备份出来了一个数据库,应用在使用时显示ORA-25153临时表空间为空的报错,原因一般是数据库迁移时,没有迁移完整造成的 解决方法 1.创建新的临时表空间temp2 create temporary tablespace temp2 tempfile DATA size 100M autoexten…...
游览器缓存讲解
浏览器缓存是指浏览器在本地存储已经请求过的资源的一种机制,以便在将来的请求中能够更快地获取这些资源,减少对服务器的请求,提高页面加载速度。浏览器缓存主要涉及到两个方面:缓存控制和缓存位置。 缓存控制 Expires 头&#…...
中国天然径流量格点数据集CNRD v1.0(1961-2018)
简介 中国天然径流量是指在中国境内自然形成的各种河流、湖泊、水库等水体中自然产生的流量。根据中国水利部的数据,中国天然径流量在年际变化和地区分布上都非常不均衡。北方地区径流量较小,南方地区则较大;而东部沿海地区的水资源较为丰富,而西北干旱地区的水资源则非常…...
JoyT的科研之旅第一周——科研工具学习及论文阅读收获
CiteSpace概述 CiteSpace 是一个用于可视化和分析科学文献的工具,它专门针对研究者进行文献回顾和趋势分析。CiteSpace 的核心功能是创建文献引用网络,这些网络揭示了研究领域内各个文献之间的相互关系。使用 CiteSpace 可以为论文研究做出贡献的几种方…...
expo 初始化指定SDK版本项目
expo init my-project --template expo-template-blanksdk-44...
js进阶笔记之作用域
目录 全局作用域 局部作用域 函数作用域 块作用域 作用域链 闭包 垃圾回收机制 作用域(scope)规定了变量能够被访问的“范围”,离开了这个“范围”变量便不能被访问,作用域分为全局作用域和局部作用域。 全局作用域 <…...
【汉诺塔 —— (经典分治递归)】
汉诺塔 —— (经典分治递归) 一.汉诺塔介绍二.分治算法解决汉诺塔问题三.汉诺塔问题的代码实现四.主函数测试展示 一.汉诺塔介绍 汉诺塔问题源自印度一个古老的传说,印度教的“创造之神”梵天创造世界时做了 3 根金刚石柱,其中的一…...
APP运营常用的ChatGPT通用提示词模板
用户获取:请帮助我制定一个用户获取计划,包括目标用户群体、获取渠道、营销策略等方面的内容。 用户留存:我们希望提高用户的留存率,请帮助我分析用户流失的原因,并提供一些留存策略和措施。 用户活跃度:…...
医学检验(LIS)管理系统源码,LIS源码,云LIS系统源码
医学检验(LIS)管理系统源码,云LIS系统全套商业源码 随着全自动生化分析仪、全自动免疫分析仪和全自动血球计数器等仪器的使用,检验科的大多数项目实现了全自动化分析。全自动化分析引入后,组合化验增多,更好的满足了临床需要&…...
Clippy:3个功能让macOS剪贴板管理变得高效智能
Clippy:3个功能让macOS剪贴板管理变得高效智能 【免费下载链接】Clipy Clipboard extension app for macOS. 项目地址: https://gitcode.com/gh_mirrors/cl/Clipy 对于macOS用户来说,剪贴板管理是一个常被忽视却极其影响工作效率的环节。你是否经…...
【独家首发】Spring Boot 4.0 Agent-Ready 架构压力测试报告:17个Agent并发加载Case中,仅2个通过JFR+AsyncProfiler双重验证
第一章:Spring Boot 4.0 Agent-Ready 架构避坑指南Spring Boot 4.0 引入了原生支持 Java Agent 的运行时契约(Agent-Ready),旨在为可观测性、AOP 增强、字节码热替换等场景提供标准化接入点。但该能力并非开箱即用,若未…...
别再手动导数据了!用Kettle 9.2零代码搞定MySQL表同步(附JDBC驱动避坑指南)
零代码数据同步革命:Kettle 9.2全流程实战与深度优化指南 每次手动编写SQL脚本同步数据时,你是否经历过字段映射错位、数据类型不匹配的噩梦?当凌晨三点被报警短信惊醒,发现数据同步任务因驱动版本问题而卡死,这种崩溃…...
别再被SystemExit: 2搞懵了!Python argparse在Jupyter Notebook里的正确打开方式
别再被SystemExit: 2搞懵了!Python argparse在Jupyter Notebook里的正确打开方式 如果你曾在Jupyter Notebook中尝试运行一个包含argparse模块的Python脚本,大概率会遇到那个令人困惑的SystemExit: 2错误。这个看似简单的报错背后,隐藏着命令…...
LinkSwift:开源网盘直链下载解决方案的技术架构解析
LinkSwift:开源网盘直链下载解决方案的技术架构解析 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云…...
用51单片机+DAC0832做个简易信号发生器:手把手教你生成方波、三角波和锯齿波(附完整汇编代码)
51单片机与DAC0832实战:三波形信号发生器的设计与实现 在电子工程和嵌入式系统开发中,信号发生器是一个基础但极其重要的工具。无论是用于电路测试、教学演示还是原型验证,一个可靠的信号源都能大大提升工作效率。本文将带你从零开始…...
从Chirp信号到多正弦波:手把手教你用MATLAB玩转瞬时频率分析(附避坑指南)
从Chirp信号到多正弦波:手把手教你用MATLAB玩转瞬时频率分析(附避坑指南) 在信号处理领域,瞬时频率分析是理解非平稳信号动态特性的关键工具。无论是雷达系统中的线性调频信号,还是机械振动监测中的复合频率成分&…...
从游戏像素风到高清UI:点阵与矢量字库在Unity/Unreal引擎中的使用全攻略
从游戏像素风到高清UI:点阵与矢量字库在Unity/Unreal引擎中的使用全攻略 复古像素风游戏里那些充满怀旧感的8-bit文字,现代3A大作中丝滑流畅的4K分辨率UI,还有手机H5游戏里既要精美又要控制包体大小的字体——这些截然不同的视觉体验背后&…...
MBD_工具箱实战指南_02_从Simulink到AUTOSAR的嵌入式开发工具箱链
1. 从Simulink到AUTOSAR的工具箱链全景图 第一次接触MBD开发时,我被各种工具箱搞得晕头转向——Simulink画模型、Embedded Coder生成代码、AUTOSAR Components配置接口,每个工具单独用都能跑通,但连起来就各种报错。后来在量产项目中踩了无数…...
深度解析VMware Unlocker:突破macOS虚拟化限制的完整技术指南
深度解析VMware Unlocker:突破macOS虚拟化限制的完整技术指南 【免费下载链接】unlocker VMware Workstation macOS 项目地址: https://gitcode.com/gh_mirrors/unloc/unlocker 在跨平台开发与测试日益重要的今天,许多开发者面临着一个共同的挑战…...
