python读取高光谱数据为数组
Posted 空中旋转篮球
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python读取高光谱数据为数组相关的知识,希望对你有一定的参考价值。
1.读取存储格式为.mat的高光谱数据
使用数据:indians_pines 大小:145145像素 波段数:200
将数据读取为shape=(145,145,200)的三维数组
使用的库:
from scipy.io import loadmat
.mat是matlab格式,使用较为方便,可以直接实现。
读取代码:
path_image='Indian-pines/Indian_pines_corrected.mat'
path_label='Indian-pines/Indian_pines_gt.mat'
key_image='indian_pines_corrected'
key_label='indian_pines_gt'
mat = loadmat(path_image)
features = mat[key_image]
features_shape = features.shape
mat_labels = loadmat(path_label)
labels = mat_labels[key_label]
2.读取存储格式为.tif(geotiff)的高光谱数据
使用数据同上
使用的库:
from osgeo import gdal
.tif是是遥感图像中使用较为广泛的格式,我们可以使用gdal库来实现数据读取。
GDAL读取基本思路,顺序读取每一个波段,然后依次添加到指定大小(145,145,200)的三维数组之中。
具体读取代码如下:
#使用GDAL读取tif文件
gdal.UseExceptions()
ds_features=gdal.Open(path_image)
band1 = ds_features.GetRasterBand(1)
band1 = band1.ReadAsArray()
print(band1.shape)
nrows, ncols = band1.shape
bandnum=ds_features.RasterCount
features=np.zeros((nrows,ncols,bandnum),dtype='float32')
features_shape = features.shape
for i in range(1,bandnum+1):
band=ds_features.GetRasterBand(i)
band=band.ReadAsArray()
features[:, :, i-1] = band #将二维数组写入三维数组中
ds_labels=gdal.Open(path_label)
band1=ds_labels.GetRasterBand(1)
labels=np.array(band1.ReadAsArray())
通过以上方法读取到数据之后,可以对数据继续进行相应的变形处理,用于各种不同分类方法的分析应用了。
以上是关于python读取高光谱数据为数组的主要内容,如果未能解决你的问题,请参考以下文章