miércoles, 21 de diciembre de 2016

Compresion RLE


Cómo se realiza el proceso de compresión de imágenes RLE.


La compresión de una imagen mediante RLE, se basa en la observación de que, al seleccionar un píxel de la imagen al azar, existe una probabilidad muy alta de encontrar otros adyacentes a él —sus vecinos— con el mismo color (véanse también, las Secciones 4.30 y 4.32). El compresor, por lo tanto, explora el mapa de bits fila por fila, en busca de secuencias de píxeles con el mismo color. Si el bitmap comienza, e.g., con 17 píxeles blancos, seguidos de 1 píxel negro, 55 blancos, etc, entonces sólo es necesario escribir, como datos de salida, los números: 17, 1, 55,. . . . El compresor asume que el bitmap comienza con píxeles blancos. Si esto no es cierto, se considera entonces que el mapa de bits empieza con cero píxeles blancos, y se indica en la secuencia de salida, escribiendo un 0 como primer run length. La resolución del bitmap también debería guardarse al principio de dicha secuencia.


Cómo se ejemplifica el proceso para la compresión de imágenes en escala de gris.

RLE también puede utilizarse para comprimir imágenes en escala de grises. Cada bloque (run) de píxeles con la misma intensidad (nivel de gris) se codifica como un par (run length, valor del píxel). El run length, ocupa normalmente un byte, lo que permite secuencias de hasta 255 píxeles. El valor del píxel ocupa varios bits, dependiendo del número de niveles de gris (típicamente, entre 4 y 8 bits).


Ejercicio 1.3

6, 8, 0, 1, 3, 1, 4, 1, 3, 1, 4, 1, 3, 1, 4, 1, 3, 1, 2, 2, 2, 2, 6, 1, 1. Los dos primeros, son la resolución del bitmap (6 × 8). El siguiente, indica que el primer píxel es negro. Si se almacenan usando un byte por número, el tamaño es de 25 bytes —en comparación con el del mapa de bits de tan sólo 6 × 8 bits = 6 bytes—. El método no funciona con imágenes pequeñas.


Cómo son las formas de muestreo en RLE.










Ejercicio 1.4


El método RLE para imágenes se basa en la idea de que los píxeles adyacentes tienden a ser idénticos. No es común que el último píxel de una fila sea idéntico al primer píxel de la fila siguiente


Explique el algoritmo RLE como trabaja para su funcionamiento.


El código es muy sencillo. Comienza por la conversión de la matriz —M— en un vector unidimensional —x—; para ello, guarda en f y c el número de filas y de columnas, respectivamente —[f, c] = size (M)—, y con el bucle for van introduciendo en x las filas de la matriz —M (k, :)—, una tras otra. Cada run length, continúa de una línea a la siguiente y se calculan todos a partir de x, mediante las siguientes operaciones: N = f ∗ c, calcula el número de elementos de la matriz, N. La suma de los elementos —de 2 a N— de x (x (2 : N)), con los elementos —de 1 a N − 1— de x (x (1 : N − 1)), proporciona el vector z, que contendrá unos en los lugares clave14 . Con la búsqueda de los unos en z, obtenemos una matriz unidimensional z1 (z1 = find(z == 1)), con la que se construyen dos vectores: el primero —i1—, formado por todos los elementos de z1 con N al final (i1 = [z1 N]); el segundo —i2—, formado por todos los elementos de z1 precedidos por 0 (i2 = [0 z1]). La resta i1 − i2 genera todos los run lengths de la matriz M. La desventaja del algoritmo RLE para imágenes consiste en que cuando se modifica la imagen, normalmente los run lengths tienen que ser reconstruidos por completo.






Codificar el algoritmo de compresión RLE











Código Java











Código en Visual












No hay comentarios:

Publicar un comentario