¿Comprimir muchas imágenes grandes similares?

16

Estoy tratando con un gran archivo de imágenes satelitales de la Tierra, cada una con 15 minutos de diferencia en la misma área, por lo tanto, son bastante similares entre sí. Dos contiguos se ven así: ingrese la descripción de la imagen aquí

Los algoritmos de video funcionan muy bien al comprimir múltiples imágenes similares. Sin embargo, estas imágenes son demasiado grandes para video (10848x10848) y el uso de codificadores de video eliminaría los metadatos de las imágenes, por lo que extraerlas y restaurar los metadatos sería engorroso incluso si obtengo un codificador de video para trabajar con imágenes tan grandes.

Para hacer algunas pruebas, reduje las 96 imágenes de un día a 1080x1080 píxeles, con un total de 40.1MB y probé una compresión diferente con los siguientes resultados:

  1. código postal: 39.8 MB
  2. rar: 39.8 MB
  3. 7z: 39,6 MB
  4. tar.bz2: 39.7 MB
  5. zpaq v7.14: 38.3 MB
  6. fp8 v2: 32.5 MB
  7. paq8pxd v45: 30.9 MB

Se supone que los tres últimos aprovechan mucho mejor el contexto y, de hecho, funcionan mejor que la compresión tradicional, pero la relación de compresión sigue siendo bastante pobre en comparación con el video mp4 que puede llevarlo a 15 MB o incluso menos, preservando la calidad de la imagen.

Sin embargo, ninguno de los algoritmos utilizados por esas utilidades de compresión parece aprovechar la similitud de las imágenes como lo hace la compresión de video. De hecho, usando packJPG , que comprime cada imagen por separado, todo el conjunto se reduce a 32.9 MB, bastante cerca de fp8 y paq8pxd, pero sin aprovechar en absoluto las similitudes entre las imágenes (porque cada imagen se comprime individualmente).

En otro experimento, calculé en Matlab la diferencia de las dos imágenes anteriores, y se ve así:

ingrese la descripción de la imagen aquí

La compresión de ambas imágenes originales (219.5 + 217.0 = 436.5 kB en total) con fp8 las reduce a 350.0 kB (80%), pero al comprimir una de ellas y la imagen de diferencia (como un jpg de la misma calidad y usar 122.5 kB), el resultado en un archivo de 270.8 kB (62%), de nuevo (como lo revela la comparación mp4 y packJPG), fp8 no parece aprovechar mucho las similitudes. Incluso comprimido con rar, una imagen más la diferencia funciona mejor que fp8 en las imágenes originales. En ese caso, rar desciende a 333,6 kB (76%).

Supongo que debe haber una buena solución de compresión para este problema, ya que puedo imaginar muchas aplicaciones. Además de mi caso particular, supongo que muchos fotógrafos profesionales tienen muchas tomas similares debido a disparos secuenciales o imágenes de lapso de tiempo, etc. Todos los casos que se beneficiarían de dicha compresión.

Además, no necesito compresión sin pérdidas, al menos no para los datos de la imagen (se deben preservar los metadatos).

Entonces ... ¿Existe algún método de compresión que explote las similitudes entre las imágenes comprimidas?

Las dos imágenes de la prueba anterior se pueden descargar aquí , y las 96 imágenes de la primera prueba aquí .

Camilo Rada
fuente
1
Se agradecería recibir más comentarios de las personas que pusieron la pregunta en espera. Creo que la pregunta es lo suficientemente general y puede responderse sin señalar un producto específico, sino un método, algoritmo o técnica.
Camilo Rada
1
Gallinero (No voté a cerca), pero Is there a compression utility that take advantage of the similarities between images better than zpaq and fp8?, y Is there a updated/maintained version of the fp8 utility?es probable que las líneas ofensivos. Contraste eso con, por ejemplo, Is there a compression *method, algorithm or technique* that take advantage of the similarities between images better than zpaq and fp8?el enfoque podría decirse que es muy diferente. Solicitar software es probablemente redundante de todos modos, ya que el software específico (si corresponde) seguramente se mencionará en cualquier respuesta dada.
Anaksunaman
1
Estoy de acuerdo. Y hecho. Buena suerte. =)
Anaksunaman
2
"¿Demasiado grande para el video"? No estoy seguro de estar de acuerdo con esto. Algunos códecs tienen resoluciones máximas muy altas o ilimitadas. No estás tratando de crear un video que se pueda ver, solo comprime algunas imágenes estáticas. ¿Podría codificar los metadatos como subtítulos u otros datos?
benshepherd
1
Para agregar a la lista de aplicaciones, necesitaría esto para almacenar marcos originales de un proyecto de lapso de tiempo que obtendrá piezas adicionales en el futuro. Las imágenes actuales de 10 000 x 4K JPG ocupan 25 GB de espacio, donde un MP4 compuesto por ellas ocupa solo 85 MB.
Akseli Palén

Respuestas:

5

No conozco un software específico que haga esto, pero hay algunas investigaciones sobre el tema. Por ejemplo, vea los artículos Conjuntos de compresión de imágenes similares de Samy Ait-Aoudia, Abdelhalim Gabis, Amina Naimi, y Conjuntos de compresión de imágenes similares utilizando modelos de compresión híbrida de Jiann-Der Lee, Shu-Yen Wan, Chemg-Min Ma, Rui -Feng Wu.

En un nivel más práctico, podría extender su técnica de resta, por ejemplo, escribiendo un script que use ImageMagick para calcular la diferencia entre imágenes consecutivas, guardando el resultado como un jpeg (o un png comprimido si lo desea sin pérdidas). Obtendrá una imagen base y un conjunto de imágenes "delta" comprimidas que deberían ser mucho más pequeñas. Para calcular la diferencia usando ImageMagick:

convert image2.png image1.png -compose MinusSrc -composite -depth 24 -define png:compression-filter=2 -define png:compression-level=9 -define png:compression-strategy=1 difference-2-1.png

Para volver a calcular agregando de nuevo:

convert image1.png difference-2-1.png -compose Plus -composite image2-reconstructed.png

(Puede hacer lo mismo usando jpg en su lugar y ahorrar mucho espacio).

Marco Pantaleoni
fuente
Parece que esto no gestiona los desbordamientos. Tengo algunas imágenes similares con colores muy diferentes y, por lo tanto, tengo algunos artefactos en las imágenes recalculadas, ya sea usando Minus / Plus o Subtract / Add.
Adrien Clerc