Algunos usos del módulo espectral para el procesamiento de imágenes hiperespectrales

Tabla de contenido

1. Instalación

2. Leer imágenes hiperespectrales

3. Mostrar imágenes hiperespectrales

4. Las características de espectral

5. Visualización de la imagen de la etiqueta

6. Visualización de fusión de etiquetas y características

8. Mostrar cubo 3D

9. Guarda la imagen


1. Instalación

pip install spectral -i https://pypi.tuna.tsinghua.edu.cn/simple

2. Leer imágenes hiperespectrales

# -*- 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. Mostrar imágenes hiperespectrales

# -*- 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. Las características de espectral

Las siguientes características se basan en las que se muestran en la Sección 3. 

  • lupa de imagen

Presionar zuna tecla del teclado abrirá la ventana de zoom, mostrando una vista ampliada de la imagen. Al mantener presionada la tecla ‎‎ ‎‎ y hacer clic con el botón izquierdo en la ventana original , la ventana de zoom mostrará los píxeles seleccionados en la ventana originalctrl

  • Mostrar información espectral de píxeles

Haga doble clic en un punto en la imagen original o en la ventana de zoom y se mostrará la información de la banda completa del punto. Los puntos se pueden superponer.

  • Mostrar datos 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))Entre ellos (29,19,9)se encuentran las bandas 29, 19 y 9 extraídas del espectro para reemplazar las tres bandas de RGB. Forma una imagen pseudo RGB. (La razón es que la cámara de espectro puede evitar algunas bandas de luz visible y no puede formar una imagen RGB verdadera)

5. Visualización de la imagen de la etiqueta

# -*- 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. Visualización de fusión de etiquetas y características

# -*- 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. Mostrar cubo 3D

Esta parte necesita instalar el paquete wx, el paquete openGL, wx se implementa en función del módulo wxPython

pip install wxPython -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install PyOpenGL -i https://pypi.tuna.tsinghua.edu.cn/simple

Después de la instalación, se puede mostrar, ingrese el siguiente código

# -*- 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)

Tenga en cuenta aquí que la ventana abierta produce un lienzo en blanco (el cubo no se muestra).Si la pantalla no admite un búfer de profundidad de 32 bits, puede usar el siguiente comando para cambiar el tamaño del búfer a 16 bits, etc.

spectral.settings.WX_GL_DEPTH_SIZE = 16

9. Guarda la imagen

‎Guardar una imagen en color indexada es similar a guardar una imagen 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')

Supongo que te gusta

Origin blog.csdn.net/qq_45100200/article/details/130761143
Recomendado
Clasificación