Compresión de Imagenes
En esta entrada aplicaremos Wavelets para la compresión de imágenes.
Primero que nada debemos de tener en cuenta del porque debemos comprimir imagenes ya que al hacer esto reducimos la redundancia de los datos de imagen con el fin de poder almacenar o transmitir datos en una forma eficiente.
Los métodos de compresión de datos se clasifican en:
- Lossless: que es la compresión sin pérdida de información
- Lossy: que es la compresión con pérdida de información.
Lossless
Los
métodos sin compresión sin pérdida de información se caracterizan
porque la tasa de compresión que proporciona está limitada por la
magnitud de información de la señal original.
Lossy
Los
métodos de compresión con pérdida de información logran alcanzar unas
tasas de compresión más elevadas a cambio de sufrir una pérdida de
información sobre la imagen original.
Transformada de Wavelets
La transformada wavelet consiste en comparar la señal con ciertas funciones wavelet, las cuales se obtienen a partir de las wavelet madre. La comparación permite obtener unos coeficientes que son susceptibles de interpretación y posterior manipulación. En cualquier caso, un requisito básico es la posibilidad de invertir la transformada, recuperando la señal a partir de esos coeficientes wavelet calculados.
En este caso trabajaremos con la Transformada de Wavelets Discreta (DWT). Se utilizará esta transformada para obtener una nueva representación de la imagen, más apropiada para el proceso de compresión.
El análisis wavelet permite descomponer la señal en aproximaciones y detalles. La DWT aplicada a imágenes proporciona una matriz de coeficientes, conocidos como coeficientes wavelet que son cuatro:
El análisis wavelet permite descomponer la señal en aproximaciones y detalles. La DWT aplicada a imágenes proporciona una matriz de coeficientes, conocidos como coeficientes wavelet que son cuatro:
- aproximaciones
- detalles horizontales
- detalles verticales
- detalles diagonales
Utilizaremos la transformada Haar en un análisis de 2 dimensiones, el diagrama siguiente son los pasos para obtener los 4 coeficientes.
1.- Convertir la imagen de entrada en escala de grises (es un método ya utilizado anteriormente donde se suma el valor del r,g y b de cada pixel y se saca su promedio y se asigna el mismo valor a cada r,g,b):
2.- El tercer paso es generar un array de la imagen a escala de grises (la nueva imagen la que se hizo más pequeña, el array es creado del mismo tamaño de la imagen ancho por alto):
3.- Después llamamos a la función coeficientes, que es la función que aplica la DWT (Transformada Discreta de Wavelet) .
4.- Ahora lo que haremos es de cada coeficiente crear su imagen para ver los resultados:
La función set_pixel lo que hace es crear la imagen, pero como cuando se hizo la prueba de imprimir los array que devolvieron los coeficientes se vio que regresaban números negativos y mayores a 255:
Lo que se optó fue que los valores menores a 0 darles un valor de 0 y mayor a 255 dejarles el valor de 255:
5.- Las imagenes se crean:
Coeficiente de aproximación:
Coeficiente detalles horizontales:
Coeficiente detalles verticales:
Coeficiente detalles diagonales:
6.- Después para obtener la imagen comprimir la imagen, solo utilizamos la Transformada Inversa Discreta de Wavelet, pasandole los coeficientes tal cual se obtuvieron y obtenemos la imagen antes de comprimir:
Recuerden que esto solo es la primera compresión pero se pueden realizar mas basandose en el coeficiente de aproximación.
Pruebas:
Aplicando Nivel de Compresión 1:
Imagen de entrada:
Imagen a escala de grises:
Coeficiente detalles horizontal:
Coeficiente detalles verticales:
Coeficiente detalles diagonales:
Imagen comprimida:
Diferencias entre la imagen comprimida y la original(imagen en escala de grises):
También vemos los tiempos que se tardó en realizar el primer nivel de la compresión:
Otra prueba:
Aplicando Nivel de Compresión 1:
Imagen de entrada:
Coeficiente de aproximación:
Coeficiente detalles horizontal:
Coeficiente detalles verticales:
Coeficiente detalles diagonales:
Diferencias entre la imagen comprimida y la original(imagen en escala de grises):
Referencias:
Aplicando Nivel de Compresión 1:
Imagen de entrada:
Imagen a escala de grises:
Coeficiente detalles horizontal:
Coeficiente detalles verticales:
Coeficiente detalles diagonales:
Imagen comprimida:
Diferencias entre la imagen comprimida y la original(imagen en escala de grises):
También vemos los tiempos que se tardó en realizar el primer nivel de la compresión:
Referencias:
nigma (2012) pywt. [online] Available at: https://github.com/nigma/pywt/tree/master/demo [Accessed: 24 May 2013].
Wasilewski, F. (2006) DWT and IDWT — PyWavelets Documentation. [online] Available at: http://www.pybytes.com/pywavelets/regression/dwt-idwt.html [Accessed: 24 May 2013].
Wasilewski, F. (2006) DWT and IDWT — PyWavelets Documentation. [online] Available at: http://www.pybytes.com/pywavelets/regression/dwt-idwt.html [Accessed: 24 May 2013].
Pues, el reporte no está muy claro. En particular en el último ejemplo casi no se logra compresión... Van 5 pts por el reporte.
ResponderEliminarNo encontré el código completo; revisé la entrada varias veces buscando por una liga. El método es uno que ya existe y no veo que le hayas modificado algo notable. Van 4 pts por el código.