目录
1、安装
2、读取高光谱图像
3、显示高光谱图像
4、spectral的特点
5、标签图显示
6、标签、地物融合显示
8、显示三维立方体
9、保存图像
1、安装
pip install spectral -i https://pypi.tuna.tsinghua.edu.cn/simple
2、读取高光谱图像
# -*- coding:utf-8 _*-
import spectral
import os
path = r"E:\Users\zt\Desktop\数据\Indian_pines.dat"
img = spectral.envi.open(os.path.splitext(path)[0]+'.hdr', path) # ENVI格式
print(img.shape)
3、显示高光谱图像
# -*- coding:utf-8 _*-
import spectral
import matplotlib.pyplot as plt
import scipy.io as scio
path = r"E:\Users\zt\Desktop\数据\Indian_pines.mat"
img = scio.loadmat(path)
view = spectral.imshow(img["indian_pines"],bands=(29,19,9)) # 显示图像
plt.pause(60)
4、spectral的特点
以下特点是基于在第3部分显示的基础上。
- 图像放大镜
按下z
键盘键,将打开变焦窗口,显示图像的放大视图。通过按住ctrl
键并在原始窗口中用鼠标左键单击,缩放窗口将显示原始窗口中选中的像素
- 显示像素光谱信息
双击原始图或者缩放窗口中的点,将会显示该点的全波段信息。点可以叠加。
-
显示RGB 数据
view = imshow(img, (29, 19, 9))
print(view)
# 输出
# ImageView object:
# Display bands : (29, 19, 9)
# Interpolation : <default>
# RGB data limits :
# R: [2054.0, 6317.0]
# G: [2775.0, 7307.0]
# B: [3560.0, 7928.0]
imshow(img, (29, 19, 9))
中的(29,19,9)
就是从光谱中分别抽取的第29,19,9个波段来当替代RGB三个波段。形成伪RGB图像。(原因是谱相机可能避开了可见光部分波段,无法形成真RGB图)
5、标签图显示
# -*- coding:utf-8 _*-
import spectral
import matplotlib.pyplot as plt
import scipy.io as scio
path = r"E:\Users\zt\Desktop\数据\Indian_pines_gt.mat"
gt = scio.loadmat(path)
view = spectral.imshow(classes=gt["indian_pines_gt"]) # 显示标签图像
plt.pause(60)
6、标签、地物融合显示
# -*- coding:utf-8 _*-
import spectral
import matplotlib.pyplot as plt
import scipy.io as scio
path1 = r"E:\Users\zt\Desktop\数据\Indian_pines_gt.mat"
path2 = r"E:\Users\zt\Desktop\数据\Indian_pines.mat"
gt = scio.loadmat(path1)
img = scio.loadmat(path2)
view = spectral.imshow(img["indian_pines"], (30, 20, 10), classes=gt["indian_pines_gt"])
view.set_display_mode('overlay') #显示模式为覆盖
view.class_alpha = 0.5 #透明度
plt.pause(60)
8、显示三维立方体
这部分需要安装wx包,openGL包,wx基于 wxPython 模块实现
pip install wxPython -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install PyOpenGL -i https://pypi.tuna.tsinghua.edu.cn/simple
安装好了就可以显示了,输入以下代码
# -*- coding:utf-8 _*-
import spectral
import matplotlib.pyplot as plt
import scipy.io as scio
path = r"E:\Users\zt\Desktop\数据\Indian_pines.mat"
img = scio.loadmat(path)
view = spectral.view_cube(img["indian_pines"], (30, 20, 10)) # 这里也可以不选波段,但是打开会慢很多
img_1 = img["indian_pines"][:,:,19].reshape(145,145)
plt.imshow(img_1)
plt.pause(60)
这里注意,打开的窗口产生空白画布(未显示立方体),如果是显示器不支持32位深度缓冲区,可以使用如下命令改变缓冲器大小位16位等
spectral.settings.WX_GL_DEPTH_SIZE = 16
9、保存图像
保存索引彩色图像类似于保存 RGB 图像
# -*- coding:utf-8 _*-
import spectral
import matplotlib.pyplot as plt
import scipy.io as scio
path = r"E:\Users\zt\Desktop\数据\Indian_pines.mat"
img = scio.loadmat(path)
view = spectral.imshow(img["indian_pines"],bands=(29,19,9)) # 显示图像
spectral.save_rgb('rgb.png', img["indian_pines"], [29, 19, 9])
# plt.savefig('rgb.png')