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读取高光谱数据为数组的主要内容,如果未能解决你的问题,请参考以下文章

python读取高光谱数据为数组

python读取高光谱数据为数组

matlab高光谱影像读取保存分块

利用gdal读高光谱图像数据问题(按像素读)?

VS2013+OPENCV+GDAL处理多光谱数据

基于飞桨实现高光谱影像和全色影像融合