Tengo una carpeta de datos SIG que consta principalmente de archivos GeoTIFF. Todo el conjunto pesa aproximadamente 1.2 GB
. Me di cuenta de que si empaco el contenido en un tarball, se rompe a aproximadamente 82 MB
. Me gustaría verificar el conjunto en un sistema de control de revisión para que otras personas puedan trabajarlo y parece que hay algo de espacio que se puede exprimir.
La página del controlador GDAL GeoTIFF enumera 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 detalla cómo seleccionar un algoritmo o las compensaciones asociadas con el nivel variable de compresión. Esto lleva a las siguientes preguntas:
Las ventajas de usar la compresión son un ahorro espectacular 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? ¿Se prestan algunos tipos de imágenes a un cierto algoritmo?
fuente
Con
lzw
ydeflate
compresión utilizando-co predictor=2
ayuda lata con imágenes que está variando sin problemas, ya que comprime las diferencias de píxel a píxel en lugar de los valores absolutos, y éstos tienden a ser pequeñas y tienen más patrones ( ref ). Predictor sólo es útil conlzw
ydeflate
compresión, la opción no tiene efecto con otros métodos.El ahorro predictivo puede ser dramático. Acabo de volver a comprimir un directorio de modelos de elevación geotiff de 16 bits usando hasta 17 GB con la configuración predeterminada de LZW en solo 5 GB con predictor = 2.
Hay información contradictoria sobre las diferencias entre los predictores 2 y 3 y cuándo cada uno se aplica mejor ( ref1 , ref2 ). Quizás 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 cada vez más raros y en su mayoría fuera de SIG (ahora no conozco ningún software GIS de transmisión principal que no los lea).Para aprovechar la respuesta de @ alfonx de usar vistas generales comprimidas : esto permite que la imagen base se almacene sin pérdidas, para la integridad de los datos, y las pirámides con 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
imágenes RGB: use compresión jpeg, remuestreo promediado o gaussiano en lugar del vecino más cercano predeterminado (hace que las vistas generales sean más suaves) y una vista general fotométrica 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 uso para aplicar vistas generales externas de JPEG a todos los tiffs en un directorio:
Notas
GDAL 1.6.0 introdujo el
gauss
remuestreo que puede conducir a mejores resultadosaverage
en caso de bordes afilados con alto contraste o patrones ruidosos. Deben usarse potencias de 2 niveles (2 4 8 ...) para seleccionar un núcleo gaussiano de remuestreo 3x3.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 encuentro que el 85% es un compromiso mejor en el intercambio de tamaño frente a calidadActualización, 2015: GDAL 1.8 y 2.0 han introducido muchas opciones nuevas no cubiertas aquí y que no he tenido tiempo de digerir. Lea la página oficial de formato gtiff , estoy seguro de que hay configuraciones adicionales útiles detalladas.
fuente
Para grandes rásteres, GeoTiff ofrece la posibilidad de almacenar vistas previas (pre) reducidas como imágenes adicionales en el archivo GeoTiff. Esto se puede hacer con gdaladdo (= Descripción general de GDAL ADD). Al crear estas vistas generales, puede decirle manualmente a gdal que las comprima también:
Acelera la visualización de sus datos sin agregar demasiado tamaño. Nota: las aplicaciones de Geotools como Geoserver, uDig, AtlasStyler, Geopublisher pueden usar esta función y beneficiarse de las vistas generales.
fuente
Para habilitar la descompresión parcial de la imagen, simplemente use TILED = YES.
Peter
fuente
En última instancia, probablemente necesite experimentar con las diferentes opciones y ver qué satisface sus necesidades.
He estado haciendo un uso cada vez mayor de GeoTIFF comprimido JPEG en formatos basados en wavelet. Mis resultados han sido bastante buenos. El uso de GDAL para hacer esto ha arrojado relaciones de compresión comparables a los formatos basados en wavelets sin demasiada pérdida de datos. El éxito en el rendimiento que viene con la descompresión ha sido aceptable.
Lo que más me gusta de este enfoque es que el soporte 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.
fuente
Mi experiencia al comparar la compresión ECW ( Wavelet comprimida mejorada ) de GeoTIFF frente a Earth Resource Mapping es que ECW es mucho 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 más antiguos como GeoTIFF, JPEG, no JPEG 2000 , solo una parte de la imagen puede descomprimirse [ref. 1] No se debe subestimar la importancia de esta ventaja, especialmente cuando se trabaja con "más de la mitad del tamaño de la memoria de la computadora".
Parece, nunca tuve 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.
árbitro. 1: http://www.ifp.uni-stuttgart.de/publications/phowo01/Ueffing.pdf
fuente
Las respuestas de @dodobas y @ matt-wilkie cubren 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:
-co
), específicamente:COMPRESS
NUM_THREADS
PREDICTOR
ZLEVEL
Por ejemplo, GeoServer no recomienda comprimir GeoTIFF :
Esto es especialmente cierto si ya utiliza vistas generales, mosaico y medios de almacenamiento de alto rendimiento (disco de grado empresarial o SSD).
fuente
Para aquellos que usan versiones más nuevas de GDAL, también están disponibles las opciones de compresión ZStandard ( ZSTD ) sin pérdidas (GDAL> = 2.3) y compresión con compresión de trama de error limitado ( LERC ) con pérdidas (GDAL> = 2.4).
En términos generales, sin embargo,
ZSTD
ofrece velocidades de lectura de datos más rápidas que ambasLZW
yDEFLATE
con relaciones de compresión similares, aunque puede ser algo más lento al escribir el archivo (dependiendo de la configuración que use).Si no está tan preocupado por la precisión de los datos (por ejemplo, solo haciendo visualización en lugar de análisis), entonces
LERC
podría ser una buena opción. Hay unaMAX_Z_ERROR
configuración que le permite ajustar la precisión que está dispuesto a sacrificar. Por ejemplo, aMAX_Z_ERROR=0.001
o 1 mm dio un ahorro de espacio del 50% en un punto de referencia (ver ref .).¡La mejor parte es que también puedes combinarlo
LERC
con elZSTD
usoCOMPRESS=LERC_ZSTD
! O si prefieres usarDEFLATE
, puedes hacerloCOMPRESS=LERC_DEFLATE
. Consulte también la lista completa de combinaciones / configuraciones en los documentos oficiales de GDAL GeoTIFF https://gdal.org/drivers/raster/gtiff.html#creation-optionsSe pueden encontrar más detalles y comparaciones completas de referencia en esta valiosa referencia:
fuente