高光谱图像处理的spectral模块一些用法

目录

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')

猜你喜欢

转载自blog.csdn.net/qq_45100200/article/details/130761143