Preface
从我目前了解,Indian Pines高光谱图像数据集国内外最流行三个数据集之一{Pavia University(PU)、Salinas(S)、Indian Pines(IP)},当然了国内外还有很多其他的HSI数据集,都是可以从各种途径获取到,这里附加一个链接HSI Dataset。
Code
直接上代码。
首先,需要导入的包,主要是python的Spectral,这里当时使用pycharm系统直接下载失败了,当时使用pip install 命令直接下的。
import os
import scipy.io as sio
from spectral import *
这里使用的jupyter notebook的IP文件格式,还是在pycharm中编辑代码,最近也在熟悉这种coding方式。
定义全局变量
##Global Variables
dataset1 = 'IP'
dataset2 = 'SA'
dataset3 = 'PU'
data_path = os.path.join(os.getcwd(),'data')
save_path=os.path.join(os.getcwd(),'DataSetVisual')
定义数据读取函数。
def loadData(name):
if name == 'IP':
data = sio.loadmat(os.path.join(data_path, 'Indian_pines_corrected.mat'))['indian_pines_corrected']
labels = sio.loadmat(os.path.join(data_path, 'Indian_pines_gt.mat'))['indian_pines_gt']
elif name == 'SA':
data = sio.loadmat(os.path.join(data_path, 'Salinas_corrected.mat'))['salinas_corrected']
labels = sio.loadmat(os.path.join(data_path, 'Salinas_gt.mat'))['salinas_gt']
elif name == 'PU':
data = sio.loadmat(os.path.join(data_path, 'PaviaU.mat'))['paviaU']
labels = sio.loadmat(os.path.join(data_path, 'PaviaU_gt.mat'))['paviaU_gt']
return data, labels
HSI图像读取,本来想每次输出图片之前输出string缓冲以下,没想到在jupyter格式输出没有用,但是也确实,应该直接使用markdown语句。但是要是普通py文件是不影响的应该。
imshow函数产生与np.ndarray或SpyFile对象相关联的数据的一个光栅显示。 今天第一次接触的 .GIS,.lan,.spc应该都属于SpyFile对象,通过测试,函数不能直接读取.mat格式,我们这里传进去的参数data和label是np.ndarray。
def DataSetImgShow(name,data,labels):
print("A raster display for DataSet:{}".format(name))
img_C=imshow(data,(30,20,10))
print("The ground truth image for DataSet:{}".format(name))
img_Gt=imshow(labels)
结果:
![]() |
![]() |
尝试图像模式显示 ,这里mode有三种参数{data、classes、overlay}
def DataSetImgModeShow(name,data,labels):
print("A raster data display for DataSet:{}".format(name))
img_C=imshow(data,(30,20,10),classes=labels)
img_C.set_display_mode('data')
img_C.class_alpha=0.5
print("A raster classes display for DataSet:{}".format(name))
img_C=imshow(data,(30,20,10),classes=labels)
img_C.set_display_mode('classes')
img_C.class_alpha=0.5
print("A raster data display for DataSet:{} with overlayed class masks".format(name))
img_C=imshow(data,(30,20,10),classes=labels)
img_C.set_display_mode('overlay')
img_C.class_alpha=0.5
结果:
![]() |
![]() |
![]() |
图片保存。
def SaveImg(name,data,labels):
print("Save img for DataSet:{}".format(name))
print("Data RGB img:")
save_rgb(os.path.join(save_path,str(name)+"_rgb.jpg"),data,[30,20,10])
print("Save img for Labels:{}".format(name))
print("Data RGB img:")
save_rgb(os.path.join(save_path,str(name)+"_gt.jpg"),labels,colors=spy_colors)
Summary
初步学习Spectral,ipython动态展示的方式目前可能没有很强的需求,以后有时间再探索。
Reference
https://blog.csdn.net/gwj992/article/details/79274511
https://blog.csdn.net/gwj992/article/details/79274511