¿Debería configurarse GDAL para producir archivos GeoTIFF con compresión? ¿Qué algoritmo se debe utilizar?

48

Tengo una carpeta de datos GIS que consta principalmente de archivos GeoTIFF. Todo el conjunto pesa alrededor de 1.2 GB . Noté que si empaco el contenido en un archivo comprimido, se rompe hasta aproximadamente 82 MB . Me gustaría registrar el conjunto en un sistema de control de revisión para que otras personas puedan trabajar en él y parece que hay un poco de espacio que se puede exprimir.

La página de controladores de GDAL GeoTIFF lista muchas opciones que pueden usarse para crear archivos GeoTIFF comprimidos. También hay muchas opciones que afectan la forma en que funciona cada algoritmo.

La página de ayuda hace un buen trabajo al describir las opciones, pero no explica cómo seleccionar un algoritmo o las ventajas y desventajas asociadas con el nivel variable de compresión. Esto lleva a las siguientes preguntas:

  • Las ventajas de usar la compresión son un ahorro dramático en el espacio. ¿Cuáles son los contras? ¿Se pierde información cuando se comprime la imagen?

  • ¿Cómo se debe elegir un algoritmo y un nivel de compresión? ¿Algunos tipos de imágenes se prestan a un determinado algoritmo?

pregunta Sharpie 12.08.2010 - 10:21

7 respuestas

77

Para seleccionar el método de compresión necesitas usar un comando como:

gdal_translate -co "COMPRESS=method" src_dataset dst_dataset

Cuando utiliza la compensación, la compensación más grande es el tiempo de procesamiento adicional que se requiere para descomprimir la imagen, y luego de descomprimirla, la misma cantidad de memoria consumirá la misma cantidad de memoria. Sobre la pérdida de información, hay dos tipos básicos de compresión :

  • sin pérdida, que conserva los valores de datos originales
  • con pérdidas, que degradan los datos para ahorrar aún más espacio

Usted tendría algoritmos sin pérdida cuando los valores de los datos originales deben conservarse, como los DEM o las características de ráster. Algoritmos como PACKBITS , DEFLATE y LZW no tienen pérdidas y se pueden ordenar de acuerdo a la relación de compresión:

  1. LZW: mayor relación de compresión, mayor potencia de procesamiento
  2. DEFLATE
  3. PACKBITS: la relación de compresión más baja, la potencia de procesamiento más baja

La relación de compresión aún depende de los datos, si los datos tienen muchos valores similares, PACKBITS dará buenos resultados.

Contrariamente a la pérdida, se usarían algoritmos con pérdida como JPEG para comprimir rásteres que no tienen que devolver valores exactos. Por ejemplo, las ortofotos o imágenes satelitales se pueden comprimir usando algoritmos con pérdida.

    
respondido por el dodobas 12.08.2010 - 10:48
27

Con lzw y deflate , la compresión con -co predictor=2 puede ayudar con imágenes que varían sin problemas a medida que comprime las diferencias de píxel a píxel en lugar de los valores absolutos, que tienden a ser pequeños y tienen más patrones ( ref ). Predictor solo es útil con la compresión lzw y deflate , la opción no tiene efecto con otros métodos.

gdal_translate -co compress=lzw -co predictor=2 ...

El ahorro del predictor puede ser dramático. Acabo de volver a comprimir un directorio de modelos de elevación de geotiff de 16 bits con 17GB con la configuración predeterminada de LZW en solo 5GB con predictor = 2.

Hay información contradictoria sobre las diferencias entre los predictores 2 y amp; 3 y cuando cada uno se aplique mejor ( ref1 , ref2 ). Tal vez combustible para otra pregunta.

Otra opción fácil para ahorrar es -co tiled=yes . Hay algunos programas que no pueden leer imágenes en mosaico, pero se están volviendo más raros y en su mayoría fuera de GIS (no conozco ningún software de GIS de primera línea que no los lea).

Para aprovechar la respuesta de @ alfonx de uso de vistas generales comprimidas : Esto permite que la imagen base se almacene sin pérdidas, para la integridad de los datos, y que las pirámides tengan pérdidas, para la velocidad y algunos ahorros de espacio. Es casi lo mejor de ambos mundos. Para las vistas generales más pequeñas posibles con gdaladdo en imágenes RGB: use compresión jpeg, remuestreo promediado o gaussiano en lugar del vecino más cercano predeterminado (hace que las vistas generales sea más suave) y el resumen fotométrico de YCBCR. Consulte la página de referencia de gdaladdo para obtener más información sobre estas opciones (aunque no dice mucho sobre de qué se trata la fotometría) .

Esto es parte de un archivo por lotes de Windows que utilizo para aplicar vistas generales de archivos JPEG externos a todos los tiffs en un directorio:

set _opts= -r gauss --config PHOTOMETRIC_OVERVIEW YCBCR ^
--config COMPRESS_OVERVIEW JPEG --config JPEG_QUALITY_OVERVIEW 85

for %%a in (*.tif) do gdaladdo -ro %_opts% %%a 2 4 8 16 32 64

Notas

GDAL 1.6.0 introdujo el remuestreo de gauss , lo que puede llevar a mejores resultados average en el caso de bordes afilados con alto contraste o patrones ruidosos. Se deben usar potencias de 2 niveles (2 4 8 ...) para que se seleccione un kernel gaussiano de 3x3 de remuestreo.

JPEG_QUALITY_OVERVIEW 85 : si no se especifica, se utiliza el valor predeterminado del 75%, lo que produce un archivo más pequeño, pero creo que un 85% es un mejor compromiso en el intercambio de tamaño frente a calidad.

Actualización, 2015: GDAL 1.8 y 2.0 han introducido muchas opciones nuevas que no están cubiertas aquí y que no he tenido tiempo de resumir. Lea la página oficial de gtiff format , estoy seguro de que hay configuraciones adicionales útiles detalladas.

    
respondido por el matt wilkie 01.09.2011 - 02:07
10

Para grandes rasters, GeoTiff ofrece la posibilidad de almacenar vistas generales (pre) en escala reducida como imágenes adicionales en el archivo GeoTiff. Esto se puede hacer con gdaladdo (= GDAL ADD Overview). Al crear estas vistas generales, también puede indicar a gdal que las comprima también:

gdaladdo --config COMPRESS_OVERVIEW JPEG 

Acelera la visualización de tus datos sin agregar demasiado tamaño. Nota: las aplicaciones Geotools como Geoserver, uDig, AtlasStyler, Geopublisher pueden usar esta función y beneficiarse de las vistas generales.

    
respondido por el alfonx 15.11.2010 - 11:37
6

Para habilitar la descompresión parcial de la imagen, simplemente use TILED = YES.

Peter

    
respondido por el Peter Hopfgartner 02.02.2012 - 09:28
4

En última instancia, probablemente deba experimentar con las diferentes opciones y ver qué satisface sus necesidades.

He estado haciendo un mayor uso de GeoTIFFs comprimidos JPEG en formatos basados en wavelet. Mis resultados han sido bastante buenos. El uso de GDAL para hacer esto ha dado relaciones de compresión comparables a los formatos basados en wavelet sin demasiada pérdida de datos. El golpe de rendimiento que viene con la descompresión ha sido aceptable.

Lo que más me gusta de este enfoque es que el soporte de GeoTIFF es casi universal, mientras que el soporte para formatos basados en wavelet no siempre está asegurado y, a veces, está sujeto a problemas espinosos de licencia.

    
respondido por el Roger D. 12.08.2010 - 16:02
3

Mi experiencia comparando el ECW de GeoTIFF contra Earth Resource Mapping ( Wavelet comprimido mejorado ) es que ECW Es órdenes de magnitud mejor cuando se comprimen fotos aéreas de alta resolución. Otra ventaja importante de la compresión basada en wavelets es que, a diferencia de los formatos anteriores como GeoTIFF, JPEG, no JPEG 2000 -, solo una parte De la imagen se puede descomprimir [ref. 1]. La importancia de esta ventaja no debe subestimarse, especialmente cuando se trabaja con "más de la mitad de la memoria de la computadora".

Parece, nunca he tenido la oportunidad de probarlo, que MrSID , otro formato de archivo propietario basado en wavelet , también exhibe relaciones de compresión más altas que los formatos "más antiguos" y la descompresión selectiva.

ref. 1: enlace

    
respondido por el dariapra 16.11.2010 - 01:30
3

Las respuestas de @dodobas y @ matt-wilkie cubre casi todo lo relacionado con los actos de compresión y desenfoque con GDAL para reducir el tamaño de la imagen.

Me gustaría agregar dos cosas:

  • la documentación en formato de archivo de GDAL: enlace ;
    • Ver las opciones de creación ( -co ), específicamente:
      • COMPRESS
      • NUM_THREADS
      • PREDICTOR
      • ZLEVEL
  • y que es esencial verificar que el software que consumirá las GeoTIFFs:
    • admite el método de compresión deseado;
    • recomienda usar compresión.

Por ejemplo, GeoServer hace no recomienda comprimir GeoTIFFs :

  

Como nota final, Geotiff admite varios tipos de compresión, pero lo hacemos   Sugiera no usarlo. Si bien permite archivos mucho más pequeños, el   El proceso de descompresión es costoso y se realizará en cada acceso a los datos,   ralentizando significativamente la representación. En nuestra experiencia, la descompresión.   el tiempo es más alto que la lectura de datos de disco puro.

Esto es especialmente cierto si ya usa vistas generales, mosaico y medios de almacenamiento de alto rendimiento (disco de grado empresarial o SSD).

    
respondido por el Kevin 17.03.2016 - 21:10

Lea otras preguntas en las etiquetas