Demostración DCT

Guía para la compresión JPEG-89 usando la DCT

Imágenes JPEG y la DCT

Esta página contiene una aplicación que muestra la compresión JPEG-89 usando la DCT, incluye la variante 'jerarquica' que se usa muy poco. Para más información sobre la compresión JPEG-89 se puede visitar el siguiente artículo sobre JPEG en la Wikipedia, mucho más detallado.

El autor de esta aplicación es Christopher G. Jennings, Doctor en Física que imparte clases en la Universidad 'Simon Fraser' de Canada, puede visitar su página Web en este enlace.

Requiere soportar Java 2 Applet

la aplicación precisa que su navegador soporte al menos la versión 2 de Java (runtime).  Si la aplicación no se ejecuta correctamente, será el problema más común. Se puede descargar el último 'runtime' de Java de Sun para corregir el problema.

Anotaciones sobre JPEG y ayuda sobre la aplicación

La compresión JPEG-89 implica pérdidas de calidad, esto es debido a que la imagen reconstruida tiene menos información que la original — pero, por fortuna, esa información perdida no se echará de menos. Dos aspectos de la visión humana se aprovechan en este proceso: el hecho de que la información de color es menos importante que la cantidad de luminancia (brillo) y el hecho de que no solemos apreciar los detalles de una imagen que están más 'sobrecargados'.

Para aprovecharnos de la primera circunstacia, el compresor, primero descompone la imagen en tres 'canales'. El primer canal (Y) contiene la información del brillo (luminancia - es como la versión en blanco y negro de la imagen original). Los otros dos canales (Cb y Cr) contienen la información del color. Cuando alcanzamos la etapa de compresión, se aplicará con más 'fuerza' a los canales de color (perderán más información). Cuando la imagen se comprime, los planos Cb y Cr reconstruidos serán una pobre imitación de lo que eran originalmente pero no lo apreciaremos en gran medida porque el canal Y (luminancia) se parece más a la imagen real, que es a lo que presta más atención nuestro cerebro.

El segundo aspecto de esta compresión es más complicado y requiere más trabajo y cálculos, a veces parece algo mágico. Primero, definiremos a lo que le vamos a llamar una imagen 'cargada' o 'compleja', este tipo de imagen tiene componentes de 'alta frecuencia' o lo que es lo mismo, la imagen tiene muchos detalles en su composición a corta distancia. Por ejemplo, una tela escocesa forma una imagen de 'alta frecuencia', ya que tiene muchos cambios y detalles, en cambio la tela de una bata de hospital sería un ejemplo de imagen de 'baja frecuencia', ya que es un color liso. A pesar de esto, a cierta distancia, incluso una imagen compleja se 'fusiona' y pierde detalles. Para identificar las zonas de 'alta frecuencia' en nuestras imágenes, se divide la imagen en pequeños cuadrados ( cada cuadrado medirá de forma arbitraria 8x8 pixels). Después se harán algunos 'juegos de manos' usando un proceso llamado Transformada Discreta del Coseno para 2D (Discrete Cosine Transform - DCT) para transformar la información de cada cuadrado de 8x8 del 'dominio espacial' al 'dominio de la frecuencia'. El dominio espacial es el que conocemos y tratamos (la imagen en el espacio). En este dominio, la información de la esquina superior izquierda del cuadrado es el color o brillo de la esquina superior izquierda del cuadrado que tratamos y en lo respectivo a la esquina inferior derecha, ocurre lo mismo.  En el 'dominio de la frecuencia', la información de la esquina superior izquierda del cuadrado es la componente de baja frecuencia de la imagen del cuadrado y conforme nos desplazamos a la esquina inferior derecha, la información representa las componentes de mayor frecuencia de la totalidad del cuadrado. Si no se está familiarizado con este concepto de transformación, todo esto sonará muy extraño. No hay que preocuparse, la aplicación hace un poco más fácil mostrar este concepto de forma gráfica. La conclusión es que podemos despreciar una gran cantidad de información en la zona de la esquina inferior derecha del cuadrado del 'dominio de frecuencia' sin que suponga una gran pérdida en la imagen resultante. Cuando descomprimimos la imagen, reconstruiremos de una forma 'imperfecta' la imagen aplicando la DCT inversa para volver a transformar del dominio en frecuencia al dominio en el espacio, con lo que volveremos a tener la imagen original con la 'alta frecuencia' filtrada en el grado que apliquemos.

Con esta pequeña información acerca del proceso, podemos ver en acción la aplicación y entender mejor los procedimientos. Estos serían los pasos a seguir en la aplicación:

  1. Elegir una imagen.
  2. No solo comprimiremos la información de color de una forma más agresiva, si deseamos, podemos escalar los planos de color despreciando el 75% de la información que contienen, lo que hará más difícil descomprimir la imagen.  Puede hacer estos después de haber probado los siguientes pasos.
  3. Eche un vistazo a esta tabla. Tiene 8 filas y ocho columnas, tal y como los cuadrados en los que dijimos que ibamos a descomponer la imagen.  El número es la inversa de la cantidad de información del cuadrado que vamos a conservar.  De tal forma que, 1 significa que mantendremos toda ella, mientras que 8 significa que mantendremos 1/8 de ella y así sucesivamente.  Vean que los números de la esquina superior izquierda (la información de 'baja frecuencia') son notoriamente pequeños, mientras que los números de la esquina inferior derecha son mayores (la información de 'alta frecuencia'). También son importantes las dos 'pestañas'.  La pestaña de luminancia ("Luminance") muestra la numeración que será usada para el canal de brillo.  La pestaña de crominancia ("Chrominance") muestra la numeración que será usada para los canales de color. Las cifras de Crominancia son más altas porque se está efectuando una compresión mayor sobre esta información que sobre la de brillo o 'Luminancia'. Hay un deslizador, si se mueve el deslizador hacia la derecha, todos los números (en ambas tablas) pasarán a '1' (calidad perfecta, sin pérdidas de información y sin compresión); si se mueve hacia la izquierda, todos los números se harán más grandes (peor calidad pero mayor compresión ya que queda menos información). Puedes experimentar cambiando estos parámetros a discrección.  Se pueden poner mayores números en el área de 'baja frecuencia' y unos '1' en el resto.
  4. Seleccionar una imagen y situar el deslizador de calidad en la mitad. Ahora fíjese en la derecha de la aplicación. La fila de arriba muestra la imagen original y los tres canales en los que se ha descompuesto. En la fila de abajo tenemos la versión descomprimidad del proceso aplicado en los canales. ¡ Pero aún hay más !
  5. Pulse sobre el control de persiana que hay debajo de la segunda fila de imágenes y elija la primera opción (DCTs). Esto mostrará la DCT (Discrete Cosine Transform) de cada canal. Vea que podrá observar las plantillas de los grupos de 8x8 píxeles o puntos de imagen. Recuerde que la esquina superior izquierda de estos grupos es la parte de 'baja frecuencia',el otro extremo corresponde a la parte de 'alta frecuencia'. Los puntos más brillantes indican más información, p.ej. la mayoría de la imagen estaba compuesta por este tipo de información.
  6. Ahora prueba con la siguiente opción (Quantized DCTs). ¡Increible! Las esquinas inferiores de cada grupo se vuelven oscuras. Los valores de cada grupo se dividen por los correspondientes de cada celda (eliminando los restos) de las tablas de cuantificación (paso 3), de forma que ahora tenemos menos información.  La siguiente opción muestra los valores DCT reconstruidos (Reconstructed DCTs), p.ej. lo que volveremos a tener cuando descomprimamos la imagen para mostrarla al multiplicar por los valores de las tablas. Compare la DCT original de los planos de color con las versiones reconstruidas. Una gran cantidad de información de color se ha perdido, pero no parece afectar tanto en la imagen final descomprimida.