21 enero 2007

Que no, que no trabaje con imágenes JPEG

Es sabido que la compresión de imágenes tiene las ventajas de reducir el tamaño de almacenamiento y, consecuentemente, las necesidades a la hora de trasmitir los datos: menos ancho de banda o, lo que es equivalente, más imágenes por unidad de tiempo.
Es menos conocido que los satélites de observación terrestre no toman todas las imágenes que podrían porque no hay tiempo para transmitirlas a las estaciones terrestres. El cuello de botella es, en este caso, el ancho de banda. Por este motivo y otros similares, los algoritmos de compresión se aplican desde las pequeñas imágenes que usamos en las páginas web (mejor 40 kb que 400 a la hora de visitar una página) hasta los Gb de las imágenes hiperespectrales. Por poner un ejemplo, una imagen tomada con una cámara digital de 5 megapíxeles se codifica en tres canales de 8 bits, uno por cada color primario en el modelo RGB. Eso hace un total de 24 bits/pixel lo que supone 15 Mbytes si guardamos la imagen sin comprimir. Como ninguna imagen contiene los más de 16 millones de colores que pueden codificarse con los 24 bits/píxel (y en cualquier caso no podríamos distinguirlos) una de las opciones más utilizadas para reducir el tamaño es usar un solo byte por pixel, cuyo valor representa un color determinado. La paleta de 256 colores se construye en función de las caracteristicas de cada imagen y el resultado suele ser visualmente indistinguible del original aunque realmente suponga una fuerte pérdida cromática. En las imágenes GIF se utiliza esta técnica y cada imagen se acompaña del diccionario de colores “a medida” para permitir la decodificación.
Pero la clave del proceso está en la palabra visualmente. En realidad la pérdida es importante y este procedimiento no es aceptable para todas las aplicaciones. Por ejemplo, en las imágenes destinadas a proceso numérico jamás debe perderse resolución radiométrica. El motivo es que los algoritmos que extraen información de estas imágenes sí “ven” las variaciones y los resultados se verán a su vez afectados.
Los algoritmos de compresión se suelen dividir en dos clases: sin pérdida y con pérdida. Los primeros garantizan que la imagen decodificada es idéntica a la inicial; en los segundos, en cambio, se acepta una distorsión en los valores originales para aumentar la tasa de compresión. Entre los primeros están las compresiones LZW, usadas en los formatos TIFF y GIF habitualmente. Entre los segundos el más conocido es el formato JPEG, que se basa en un sofisticado proceso de codificación que permite una compresión a demanda: más compresión con más pérdida o menos compresión con menor modificación de los valores originales.
Realmente, el algoritmo JPEG puede comprimir algunas imágenes con una eficacia aplastante sin que visualmente se note la diferencia. Pero todo tiene su precio y hay un efecto menos evidente que puede convencerles de no usar el formato JPEG ni siquiera para sus fotos de vacaciones. El problema es que si vamos a regrabar la misma imagen varias veces, por ejemplo, para varias sesiones de retoque, la distorsión se acumula en cada ciclo de descompresión-compresión sin que sea posible recuperar la calidad original. El número de ciclos necesarios para que la distorsión sea aparente dependerá de los parámetros que controla la calidad de la compresión: abajo les pongo un ejemplo para que vean el efecto.

Fragmento ampliado de la imagen original en formato TIFF

El mismo fragmento tras 20 ciclos de grabación con compresión JPEG con calidad 40 (en una escala 0-100).

En la imagen superior verán fuertes distorsiones cromáticas y de luminosidad, así como un efecto de bloques. Este se debe a que JPEG trabaja sobre bloques de 8x8 píxeles cuyos parámetros de compresión no tienen continuidad con los vecinos.
¿La solución? Huir de la compresión JPEG y usar el formato TIFF con 24 bits por píxel para guardar las imágenes. Ya estarán a tiempo de reducirlas para su blog o destrozarlas para otros objetivos pero al menos mantendrán un original en buen estado. Para más detalles pueden seguir el protocolo aconsejado por Paulo Porta que pueden encontrar aquí junto con otros artículos que desvelan aspectos básicos de la fotografía digital. Muy recomendable invertir un rato en leerlos todos.

Nota: dos programas para trabajar con imágenes. Para verlas y alguna manipulación simple, lo mejor que en encontrado es Irfanview, muy ligero y con operaciones útiles como, por ejemplo, la transformación masiva en "batch". Para edición en serio, el GIMP que además se distribuye con licencia GNU. Ambos gratuitos, claro.

3 comentarios:

Ranganok Schahzaman dijo...

Hola,

Un par de cosillas sobre JPEG.

La primera es que en esta codificación se puede elegir la tasa de compresión con lo cual se puede comprimir la imagen sin perdida de información.

La segunda es la foma de comprimir que tiene el JPEG: elige bloques de 8x8 contiguos y le aplica una transformada (coseno) para pasar al plano de frecuencia (como un histograma), luego dependiendo de la tasa de compresión elimina las variables de más alta fecuencia suavizando la imagen y por último comprime con un algoritmo tipo ZIP.

Por lo tanto si hemos elegido comprimir la imagen pero sin pérdida de información podremos recuperar la imagen original tal cual.

No se que tipo de gestor de fotos utilizaréis pero la mayoría tienen la opción de elegir la tasa de compresión de JPEG (recomiendo el GIMP).

Por otro lado, las imágenes de satélites hasta hace poco se enviaban en "bruto"(sin comprimir) y lo que más se tardaba era en adquirir la foto (el Meteosat tarda 25 minutos en hacer la foto y 5 en enviarla y reposicionarse).

S2

Ranganok Schahzaman

Angel dijo...

Gracias por el comentario Ranganok. En efecto, la tasa de compresión es función de los coeficientes de "cuantización". Yo he probado comprimir sin pérdida y aún así había diferencias pixel a pixel.
Ahora se ha propuesto el JPEG2000 que en vez de la DCT utiliza wavelets con un gran beneficio general.
Lógicamente, en el ejemplo que puse la tasa de compresión es fuerte para llegar antes al efecto.
Y, en efecto, uso GIMP como he recomendado en la nota final.
Saludos.

Evil Preacher dijo...

Hace mucho que necesitaba que alguien me explicara esto :) muchas gracias Angel (y también Ranganok)

Grab this Widget ~ Blogger Accessories
 
º