8 votos

¿Cómo obtener los valores de longitud de onda de las bandas a partir de una imagen hiperespectral?

Estoy intentando abrir y leer una imagen hiperespectral utilizando GDAL como se muestra a continuación.

Así que después de leer los datos así :

data = gdal.Open( filename )

entonces puedo ver la información x, y, dim del conjunto de datos :

x = data.RasterXSize
y = data.RasterYSize
dim = data.RasterCount

Ahora la pregunta es que si hay alguna manera de averiguar que cada banda de longitud de onda de la imagen.? Tengo la siguiente imagen de datos: sub_66 Tipo:Archivo sub_66 Tipo:hdr sub_66 Tipo:aux(xml) Este archivo de datos es de AVIRIS (Datos hiperespectrales).

1 votos

Esto no es un duplicado; creo que la pregunta es cómo recuperar la longitud de onda de cada banda en una imagen hiperespectral. No sé la respuesta, pero esta información no forma parte del modelo de datos estándar de gdal. Así que si está presente se accede a través de los metadatos, creo que para las imágenes hiperespectrales envi esta información (si está presente) se encuentra en el archivo hdr.

0 votos

Por favor, actualice su mensaje para incluir el sensor con el que está trabajando (por ejemplo, AVIRIS, Landsat8 OLI, Worldview-3, etc.).

1voto

Lo que tiene que hacer es analizar el archivo 'fmmyyddtnnpnnrnnrdn_v_.spc' asociado a su conjunto de datos. Cada línea de ese archivo corresponde a una banda de la imagen.
La primera columna del archivo es la "Posición central de la longitud de onda" y la segunda es la "Anchura completa a la mitad del máximo", es decir, el ancho de banda. Cabe señalar que puede haber más de dos columnas, dependiendo de la escena.
Con esos dos datos, deberías tener lo que necesitas.

La misma información puede encontrarse también en el archivo hdr asociado, del que puede extraerse tratando el archivo como un archivo de texto estándar. A partir de ahí, puedes combinar la información utilizando funciones estándar de Python.
La forma en que la información adicional se presenta en el archivo hdr no es compatible con gdal y, como tal, tendrá que crear su propio enfoque para esto.

0 votos

Pero, no tengo un archivo de este tipo ( 'fmmyyddtnnpnnrnnrdn_v_.spc')

0 votos

@PruthviPatel - ¿tiene algún archivo aparte de la imagen?

0 votos

Sí, tengo un archivo de extensión hdr.

1voto

P a u l Puntos 2877

Como otros han mencionado, las longitudes de onda no forman parte del modelo de datos estándar, por lo que para los datos en formato ENVI es mejor extraerlos del archivo '.hdr' asociado por separado, que es sólo un archivo de texto y a menudo contiene más información de la que lee GDAL.

Escribí una biblioteca para leer archivos de cabecera ENVI en Python que está disponible en https://github.com/pmlrsg/arsf_tools . La biblioteca analiza el archivo .hdr y guarda todos los campos en un diccionario. Usando esta librería (o algo similar) podrías extraer las longitudes de onda del fichero de cabecera usando:

import numpy
from arsf_envi_reader import envi_header

in_header = envi_header.find_hdr_file("Input_envi_file")
header_data = envi_header.read_hdr_file(in_header)

# Get wavelengths and convert to NumPy array
wavelengths = header_data['wavelength'].split(',')[0:-1]
wavelengths = [float(w) for w in wavelengths]
wavelengths = numpy.array(wavelengths)

Para algunos sensores FWHM también se almacena en el archivo de cabecera y se puede extraer de una manera similar.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X