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)