遥感图像拉伸显示
# 因为遥感图像数据位数是16位(uint16),需要使用5%的线性拉伸,不然显示起来不正常
def stretch_n(bands, lower_percent=5, higher_percent=95):
# print(bands.dtype)
# 一定要使用float32类型,原因有两个:1、Keras不支持float64运算;2、float32运算要好于uint16
out = np.zeros_like(bands).astype(np.float32)
# print(out.dtype)
for i in range(bands.shape[2]):
# 这里直接拉伸到[0,1]之间,不需要先拉伸到[0,255]后面再转
a = 0 # np.min(band)
b = 1 # np.max(band)
# 计算百分位数(从小到大排序之后第 percent% 的数)
c = np.percentile(bands[:, :, i], lower_percent)
d = np.percentile(bands[:, :, i], higher_percent)
t = a + (bands[:, :, i] - c) * (b - a) / (d - c)
t[t < a] = a
t[t > b] = b
out[:, :, i] = t
# print(out.dtype)
return out
维度及类型转换示例
img=img.astype(np.float32)
img=img/255
img=np.swapaxes(img,0,2)
img=np.swapaxex(img,1,2)
img=img.rollaxis(img,0,3)
x, y = 2 * np.transpose(x, (0, 3, 1, 2)) - 1, np.transpose(y, (0, 3, 1, 2))