5 votos

Eliminar algunas bandas o capas de un tiff usando gdal

He estado trabajando en una imagen de ráster multibanda. Es una imagen pix. Necesito trabajar solo en las 26 bandas que son archivos ráster y no en los 4 mapas de bits que también están incluidos en la imagen pix. Podría forzar el bucle que va a través de él para que vaya solo 25 veces, pero eso no funcionará cuando cambien las imágenes pix y el número de bandas cambie. En este momento estoy usando gdal y lo tengo todo en un array 3D. Estoy bastante seguro de que los mapas de bits serían las últimas cinco capas del array. No tengo nada para abordar este problema, así que no tengo código.

Básicamente solo necesito eliminar 4 capas de la imagen pix y trabajar con 26 capas. Cuando llamo a raster_image.rastercount, en lugar de imprimir 30, quiero que imprima 26. He revisado la biblioteca gdal, puede que me haya perdido algo pero no pude encontrar nada. ¿Hay alguna forma de eliminar bandas enteras usando gdal?

He adjuntado una captura de pantalla de cómo se ven las bandas y cómo se ve uno de los mapas de bits cuando se muestra. ¿Hay alguien que pueda ayudar? ¿O solo decirme que es imposible?

Estoy tratando de usar GetGeomType solo para ver cómo funciona y si funcionará para mí. Pero parece que no funciona:

    raster_image = gdal.Open(in_raster)
    band3 = raster_image.GetGeomType(3)
    print  band3

Así es como lo estoy llamando pero me da el error:

AttributeError: 'Dataset' object has no attribute 'GetGeomType'

Luego, al intentarlo primero obteniendo la banda ráster y luego comprobando el tipo geométrico, obtengo:

    band3 = raster_image.GetRasterBand(3).GetGeomType()
    print band3

AttributeError: 'Band' object has no attribute 'GetGeomType'

bandas y mapas de bits

0 votos

¿Podrías mostrar la sección de bandas del informe gdalinfo de tu imagen? ¿Acaso te refieres a que hay 5 bandas con una profundidad de bit de 1 bit incluidas en la imagen?

0 votos

Entonces, la imagen "pix" tiene 25 bandas raster. Cuando uso rasterCount, me da 30 bandas. Por lo tanto, estoy asumiendo que está incluyendo los 5 mapas de bits extra que están en la imagen "pix". Por lo tanto, la está leyendo como 30 capas (25 bandas + 5 mapas de bits). También, ¿cómo uso gdalinfo? Intenté raster_image.gdalinfo pero eso no funcionó.

0 votos

Utilice la utilidad gdalinfo gdal.org/gdalinfo.html: gdalinfo imagen.tif

1voto

khafen Puntos 116

Puede crear un GDALDataset con tantas bandas como tenga bandas de ráster, luego copiar los datos de cada una de sus bandas en la banda correspondiente en el GDALDataset. Aquí hay un ejemplo de código en C++ (ya que es donde estoy más familiarizado con GDAL).

//create the dataset
const char *filename = "ejemplo.tif";
GDALDriver *pDriverTiff = GetGDALDriverManager->getDriverByName("GTiff");
GDALDataset *pRasterDS = pDriverTiff->create(filename, 300, 300, 25, GDT_Float32, NULL);//for create(filename, x size, ysize, number of bands, data type, options)

//fill each raster band
int bands = 25; //este sería el número de bandas que desea copiar, es decir, total de bandas-bitmaps
int rows = 300; //filas en el ráster o matriz 3D
int cols = 300; //columnas en el ráster o matriz 3D

for (int i=0; i

`

Puede haber una manera más eficiente de hacer esto de la que no soy consciente, pero he usado este método muchas veces para agregar y eliminar bandas de conjuntos de datos raster.

`

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