Algoritmo de compresión multimedia con perdida de información

Algunos de mis proyectos me han requerido el diseño de algoritmos de compresión, tanto en mi trabajo en la Universidad como en la empresa privada. He recopilado algunos de los pasos necesarios para realizar un algoritmo de compresión con perdida en un documento que se muestra a continuación (y que se puede ver y descargar también en: http://angelluispg.es/compression/dct.pdf)

He decidido publicar el documento como parte de mi trabajo en la Universidad (de ahí que se nombre al departamento donde trabajo y la Facultad), porque es en la Universidad donde he trabajado algoritmos de compresión con perdida, en la empresa privada he trabajado sobre algoritmos de compresión sin perdida, que podría dar para otro documento en el futuro.

La mayoría de algoritmos de compresión con perdida se basan en el uso de herramientas matemáticas que nos permiten transformar al dominio de la frecuencia y que son transformadas derivadas de la transformada de Fourier. Para compresión de imagenes y video se suele usar la Transformada Discreta del Coseno (y no la Transformada Discreta de Fourier), dicha transformada se usa por una serie de propiedades que posee, pero las más importantes son.

  • La Transformada del Coseno devuelve números reales y no complejos
  • La Transformada del Coseno acumula la mayor parte de la energía de la señal en los primeros coeficientes, esta es la propiedad más importante puesto que con menos coeficientes la Transformada del Coseno es capaz de reconstruir la señal original de una forma mas precisa que la Transformada de Fourier o la Transformada del Seno.

DCT bidimensional para compresión de imágenes

Cuando estuve implementando la Transformada Discreta del Coseno (DCT) me encontré que por internet no había ningún implementación que funcionase de la misma. Así que, aunque el paso de la formulación matematica a la implementación es trivial, aquí comparto la mia.

Es una implementación para bloques de 8x8 el parámetro N debe ser 8, se muestra tanto la DCT como la inversa, esta última está basada en el tipo III para 2D