乐队顺序
波段的顺序很重要,它们可以根据 TIFF 进行不同的排序。数据的文档应该概述波段顺序是什么,并希望它可以从数据本身中读取(我的经验是通常不是这种情况)。
您可以先尝试检查乐队标签(不过,您仍然想参考文档)。
>>>src.descriptions
(None, None, None, None)
如果那里没有任何标签,您应该参考数据文档。
假设有 4 个波段按 BGRN 排序(如 NIR——近红外);然后你会想要前三个波段,但顺序相反。
data = src.read([3,2,1])
规范化和数据类型
如果您的波段不是 RGB 顺序,它很可能是 16 位整数数据类型,并且您需要 8 位用于绘图imshow
(或写入另一种图像编码,例如 PNG 和 JPEG)。首先将数据归一化为 0-255,然后从uint16
转换为uint8
。请注意,这样做会失去精度,因此您希望对原始数据进行分析。
import numpy
def normalize(x, lower, upper):
"""Normalize an array to a given bound interval"""
x_max = numpy.max(x)
x_min = numpy.min(x)
m = (upper - lower) / (x_max - x_min)
x_norm = (m * (x - x_min)) + lower
return x_norm
# Normalize each band separately
data_norm = numpy.array([normalize(data[i,:,:], 0, 255) for i in range(data.shape[0])])
data_rgb = data_norm.astype("uint8")
图像库和数据维度
如果您使用除或以外的库rasterio
,则从 RGB(A) 图像中读取波段的顺序以及维度的顺序可能会有所不同。如果您需要更改绘图方法的尺寸顺序,您可以执行以下操作cv2
PIL
# Make the first (band) dimension the last
plt.imshow(numpy.moveaxis(data, 0, -1))