Run-length encoding

De Wikipedia, la enciclopedia libre
Saltar a: navegación, búsqueda

La compresión RLE o Run-length encoding es una forma muy simple de compresión de datos en la que secuencias de datos con el mismo valor consecutivas son almacenadas como un único valor más su recuento. Esto es más útil en datos que contienen muchas de estas "secuencias"; por ejemplo, gráficos sencillos con áreas de color plano, como iconos y logotipos.

Por ejemplo, considera una pantalla que contiene texto en negro sobre un fondo blanco. Habría muchas secuencias de este tipo con píxeles blancos en los márgenes vacíos, y otras secuencias de píxeles negros en la zona del texto. Supongamos una única línea (o scanline), con N representando las zonas en negro y B las de blanco:

BBBBBBBBBBBBNBBBBBBBBBBBBNNNBBBBBBBBBBBBBBBBBBBBBBBBNBBBBBBBBBBBBBB

Si aplicamos la codificación run-length a esta línea, obtendríamos lo siguiente:

12B1N12B3N24B1N14B

Interpretado esto como 12 letras B, 1 letra N , 12 letras B, 3 letras N, etc. El código run-length representa el original de 67 caracteres en tan sólo 16. Esto quiere decir que la línea original pesa 67 bytes y la cadena codificada pesa sólo 16 bytes. Esta codificación traducida a binario, cuyo principio es el mismo, se utiliza para el almacenamiento de imágenes. Incluso ficheros de datos binarios pueden ser comprimidos utilizando este método. El primer byte contiene un número que representa el número de veces que el carácter está repetido. El segundo byte contiene al propio carácter. En otros casos se codifican en un solo byte: 1 bit (0 o 1) y 7 bits para especificar el número de caracteres consecutivos.

Sin embargo, sistemas de compresión más modernos a menudo usan el algoritmo de deflación u otros algoritmos basados en el LZ77, el cual tiene la ventaja de utilizar secuencias de cadenas de caracteres.

Algunos formatos que utilizan esta codificación incluyen Packbits, PCX e ILBM.

La codificación run-length realiza una compresión de datos sin pérdidas y es muy utilizado en imágenes de 8 bits indexadas (en un principio fue utilizado para imágenes en blanco y negro). No funciona tan bien en imágenes donde varía constantemente el color de los pixels como fotografías, aunque JPEG lo utiliza de forma efectiva en los coeficientes que quedan después de transformar y cuantificar bloques de imágenes. Posteriormente ha formado la base de otros sistemas de compresión como por ejemplo el CCITT grupo 3 – 1D