ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python矩阵堆叠-实现遥感影像波段叠加

2021-05-22 14:33:56  阅读:323  来源: 互联网

标签:python 矩阵 堆叠 shape B1 B2 B3 np gdal


前文读取landsat8数据,计算NDVI并保存成tiff文件python批量读取landsat8的波段分别介绍了对landsat8数据的不同读取方式,以及对利用波段数据进行简单的指数计算。本文在此基础上实现波段的叠加。

准备工作

这一部分参考python批量读取landsat8的波段,利用文中的函数,我们对landsat8的波段路径进行了一个整理,存放到了bands列表中并返回。
看一下格式:第一张影像的前5个波段

from read_landsat8 import read_landsat8_bands
import numpy as np
from osgeo import gdal_array

base_path = 'data'
bands = read_landsat8_bands(base_path)

bands[0][:5]

[‘data\LC08_L1TP_121034_20130402_20200912_02_T1\LC08_L1TP_121034_20130402_20200912_02_T1_B1.TIF’, ‘data\LC08_L1TP_121034_20130402_20200912_02_T1\LC08_L1TP_121034_20130402_20200912_02_T1_B2.TIF’, ‘data\LC08_L1TP_121034_20130402_20200912_02_T1\LC08_L1TP_121034_20130402_20200912_02_T1_B3.TIF’, ‘data\LC08_L1TP_121034_20130402_20200912_02_T1\LC08_L1TP_121034_20130402_20200912_02_T1_B4.TIF’, ‘data\LC08_L1TP_121034_20130402_20200912_02_T1\LC08_L1TP_121034_20130402_20200912_02_T1_B5.TIF’]

读取波段1、2、3:

# 读取波段
B1 = bands[0][0]
B2 = bands[0][1]
B3 = bands[0][2]
B1_gdal = gdal_array.LoadFile(B1)
B2_gdal = gdal_array.LoadFile(B2)
B3_gdal = gdal_array.LoadFile(B3)

print(B1_gdal.shape)
print(B2_gdal.shape)
print(B3_gdal.shape)  # 维度相等

(7301, 7341)
(7301, 7341)
(7301, 7341)

波段叠加:

本文只是简单演示,这里我们只对前面读取的123波段进行叠加
先用numpy转化成ndarray形式

# 转化成ndarray形式
B1_np = np.array(B1_gdal)
B2_np = np.array(B2_gdal)
B3_np = np.array(B3_gdal)
print(B1_np.shape)
print(B2_np.shape)
print(B3_np.shape)

维度仍保持

(7301, 7341)
(7301, 7341)
(7301, 7341)

用构建数组的方式叠加

B123 = np.array([B1_np, B2_np, B3_np])
print(B123.shape)

输出可以看成是channel_first形式

(3, 7301, 7341)

用stack方式叠加

B123 = np.stack([B1_np, B2_np, B3_np])
print(B123.shape)

输出维度与上面相同

(3, 7301, 7341)

stack叠加可以按照不同的轴实现不同的维度叠加,默认axis=0

B123 = np.stack([B1_np, B2_np, B3_np], axis = 0)
print(B123.shape)

(3, 7301, 7341)

B123 = np.stack([B1_np, B2_np, B3_np], axis = 1)
print(B123.shape)

(7301, 3, 7341)

B123 = np.stack([B1_np, B2_np, B3_np], axis = 2)
print(B123.shape)

(7301, 7341,3)

用concatenate方式叠加

B123 = np.concatenate([B1_np, B2_np, B3_np])
print(B123.shape)

可以看到,它是按照行叠加了,这种叠加方式也有一些用处,不过在这里不满足我们的要求。

(21903, 7341)

标签:python,矩阵,堆叠,shape,B1,B2,B3,np,gdal
来源: https://blog.csdn.net/m0_50294896/article/details/117158741

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有