[Hiperespectral] Adquisición y visualización de datos hiperespectrales

1. Preparación ambiental

        Es necesario instalar el paquete espectral, que se utiliza especialmente para la visualización de datos hiperespectrales.

pip install spectral

2. Carga de datos

        Para preparar previamente datos .mat hiperespectrales sin procesar y datos de clasificación gt.mat (ground-turth), luego use loadmat(.) en scipy.io para leerlos en el programa.

from scipy.io import loadmat

org_img = loadmat('HDate/PaviaU/paviaU.mat')

        Cabe señalar que el uso directo de loadmat(.) generará un diccionario de dictado , que se compone de la siguiente manera:

        Para obtener la matriz de datos hiperespectral real, debe agregar un índice después de loadmat (.), por lo que la declaración de lectura completa debería ser:

from scipy.io import loadmat

input_image = loadmat('HDate/PaviaU/paviaU.mat')['paviaU']
gt = loadmat("HDate/PaviaU/paviaU_gt.mat")['paviaU_gt']

        Al generar el tipo y el tamaño de dos variables:

         Se puede ver que la imagen hiperespectral es una matriz de 610*340*103, similar a la imagen RGB tradicional, las dos primeras dimensiones son el largo y el ancho, y la última dimensión es el número de canales, pero el número de canales es en comparación con la imagen RGB con solo 3 canales, mucho mayor.

        Y gt es una matriz de tierra-vuelta premarcada, que es equivalente a una imagen en escala de grises, y el valor de cada píxel es de 0 a 255, lo que representa diferentes tipos .

3. Visualización de datos

        La visualización de datos se realiza principalmente usando imshow(.) en spectral, el uso es el mismo que imshow(.) en opencv

        1. Visualización de imágenes hiperespectrales

import spectral as spy

view1 = spy.imshow(data=input_image, bands=[69, 27, 11], title="img")

                Sugerencias. El parámetro de bandas en la función se usa para corregir el color. Si no se agrega el parámetro de bandas, el color representado será incorrecto (como se muestra en la figura a continuación).

         2. Pantalla de clasificación hiperespectral

view2 = spy.imshow(classes=gt, title="gt")

        3. Visualización superpuesta de clasificación e imagen hiperespectral

view3 = spy.imshow(data=input_image, bands=[69, 27, 11], classes=gt)

         4. Pantalla de canal de color hiperespectral

                No sé para qué es, es simplemente genial.

spy.view_cube(input_image, bands=[69, 27, 11])

         5. Visualización de características hiperespectrales de alta dimensión

pc = spy.principal_components(input_image)
xdata = pc.transform(input_image)
spy.view_nd(xdata[:, :, :15], classes=gt)

        6. Almacenamiento de datos

                 Utilice la función save_rgb(.) para guardar las imágenes anteriores en la ubicación especificada en forma de imágenes RGB. La función es la siguiente:

spy.save_rgb(data=input_image,bands=[69, 27, 11],filename='hello.jpg')

 4. Pequeño experimento

        Si se usa opencv para mostrar imágenes hiperespectrales, se informará un error debido a demasiados canales tridimensionales. Pero gt es equivalente a una imagen en escala de grises y este problema no ocurrirá.

        Pero debido a que la brecha entre categorías es demasiado pequeña (el número de categoría generalmente no es superior a 10), la pantalla real es negra. Entonces, cada elemento se amplía 10 veces y luego se muestra usando opencv:

gtx = gt*10
cv2.imshow('Test',gtx)

Supongo que te gusta

Origin blog.csdn.net/weixin_37878740/article/details/130740764
Recomendado
Clasificación