Cómo se realiza el proceso de compresión de imágenes RLE.
Se basa en la repetición de
elementos consecutivos. El principio fundamental consiste en codificar un
primer elemento al dar el número de repeticiones de un valor y después el valor
que va a repetirse. Por lo tanto, según este principio, la cadena
“AAAAAHHHHHHHHHHHHHH” cuando está comprimida da como resultado
"5A14H". La ganancia de compresión es (19-5) / 19, es decir,
aproximadamente 73,7%. Por otro lado, para la cadena "CORRECTLY",
donde hay poca repetición de caracteres, el resultado de la compresión es
“1C1O2R1E1C1T1L1Y”. Por lo tanto, la compresión genera un costo muy elevado y
una ganancia de compresión negativa de (9-16) / 9, es decir, ¡-78%!
Ejercicio 1.3
¿Cuál sería el archivo comprimido para el siguiente bitmap de 6 × 8?
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 pixel
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
solo 6 × 8 bits = 6 bytes—. El método
no funciona con imágenes pequeñas.
Cómo
se ejemplifica el proceso para la compresión de imágenes en escala de gris
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). Ejemplo: Un mapa de bits, en escala de grises de 8 bit de profundidad,
que comienza con 12, 12, 12, 12, 12, 12, 12, 12, 12, 35, 76, 112, 67, 87, 87,
87, 5, 5, 5, 5, 5, 5, 1, . . . se comprime como 9 ,12, 35, 76, 112,
67, 3 ,87, 6 ,5, 1,. . . , donde los números en las cajas son contadores que
indican la cantidad de veces que se repite el siguiente elemento.
Cómo
son las formas de muestreo en RLE.
Ejercicio
1.4
Hay
otra razón obvia, por la que cada fila de un bitmap debería ser codificada
individualmente. ¿Cuál es?
El método RLE para imágenes se basa en la
idea de que los pixeles adyacentes tienden a ser Idénticos. No es común que el último
pixel de una fila sea idéntico al primer pixel 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 clave .
·
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. La salida proporcionada por
el método RLE en imágenes complejas, a veces puede ser más grande que el
almacenamiento de la imagen sin comprimir (i.e., una imagen sin comprimir —un
volcado píxel a píxel del bitmap original—).
Codificar
el algoritmo de compresión RLE
No hay comentarios:
Publicar un comentario