If you're seeing this message, it means we're having trouble loading external resources on our website.

Si estás detrás de un filtro de páginas web, por favor asegúrate de que los dominios *.kastatic.org y *.kasandbox.org estén desbloqueados.

Contenido principal

Compresión de imágenes sin pérdida

Hay imágenes a todo nuestro alrededor, desde iconos de aplicaciones hasta GIFs animados y fotos. Los archivos de imágenes pueden ocupar mucho espacio, y las computadoras emplean un repertorio de algoritmos para comprimir archivos de imágenes.
Para las imágenes más simples, las computadoras pueden usar un algoritmo de compresión llamado codificación por longitud de secuencias (RLE o run-length encoding).

Bitmaps

Antes de explorar la compresión de imágenes, veamos cómo podemos representar una imagen en binario sin ninguna compresión.
Aquí hay una imagen simple, un icono de corazón de 16x16:
Un icono de corazón rojo con fondo blanco
Hagamos un acercamiento y superponemos una cuadrícula encima, de manera que sea fácil ver exactamente cuáles píxeles son rojos y cuáles son blancos:
Una cuadrícula de 16x16 píxeles con el icono del corazón. El corazón está hecho de píxeles rojos y el fondo píxeles blancos.
El icono de corazón consta de solo dos colores, rojo y blanco, así que una computadora puede representarlo en binario con un mapeo de píxeles rojos a 1, y píxeles blancos a 0. Esto se llama un bitmap (mapa de bits), pues mapea píxeles a bits.
Con este método, el icono del corazón se representa así:
0001100000110000
0011110001111000
0111111011111100
1111111111111110
1111111111111110
1111111111111110
1111111111111110
1111111111111110
0111111111111100
0011111111111000
0001111111110000
0000111111100000
0000011111000000
0000001110000000
0000000100000000
Imagina que debes leer esos bits para que alguien los copie. Después de un rato, podrías decir cosas como "cinco ceros" en lugar de "cero cero cero cero cero". Pues bien, la computadora también puede hacer eso...

Algoritmo de compresión RLE

En la codificación por longitud de secuencias, la computadora reemplaza cada renglón con números que dicen cuántos píxeles consecutivos son del mismo color, siempre empezando por el número de píxeles blancos.
Por ejemplo, el primer renglón tiene 3 píxeles blancos, 2 píxeles rojos, 5 píxeles blancos, 2 píxeles rojos, luego 4 píxeles blancos:
1,100,000,110,000
Esto se representa así:
3,2,5,2,4
La cuarta fila es interesante porque empieza con un pixel rojo . En la codificación por longitud de secuencias se inicia con el número de píxeles blancos, así que se representa de esta manera:
0,15,1
Comprueba tu comprensión
Aquí está el segundo renglón del mapa de bits para el icono de corazón:
11,110,001,111,000
¿Cómo se representa esa fila en RLE?
Escoge 1 respuesta:

Descompresión RLE

Cuando una computadora utiliza codificación por longitud de secuencias, debe poder recrear perfectamente la imagen de la representación comprimida, y también podemos, si seguimos la estrategia de la computadora.
Intentemos. Aquí hay una representación con RLE de un icono en blanco y negro:
4, 9, 3
4, 7, 2, 1, 2
4, 7, 2, 1, 2
4, 9, 3
4, 7, 5
4, 7, 5
5, 5, 6
0, 15, 1
1, 13, 2
El primer renglón tiene 4 píxeles blancos, luego 9 píxeles negros, luego 3 blancos. Eso se ve así:
Un renglón de 16 píxeles, iniciando con 4 blancos, luego 9 negros y 3 blancos.
El siguiente renglón tiene 4 píxeles blancos, luego 7 negros, 2 blancos, 1 negro y 2 blancos. Así:
Un renglón de 16 píxeles, iniciando con 4 blancos, luego 7 negros, 2 blancos, luego 1 negro y finalmente 2 blancos.
Si proseguimos, el icono final es una taza y un plato:
Una cuadrícula de 16 píxeles de ancho por 19 píxeles de altura, donde los píxeles se llenan en negro en forma de taza y plato.
Comprueba tu comprensión
Lo siguiente es una compresión con RLE de un icono de 6x6 en blanco y negro:
2,2,2
2,2,2
0,6
0,6
2,2,2
2,2,2
¿A qué símbolo matemático se parece ese icono?
Escoge 1 respuesta:

Razón de compresión

Hemos afirmado que la codificación RLE puede ahorrarnos espacio al almacenar imágenes simples, pero ¿cuánto espacio?
Para averiguarlo, escribí un programa para codificar con RLE mapas de bits en blanco y negro. Esta tabla resume los resultados en tres iconos de corazón de tamaño creciente:
ImagenDimensionesSin compresiónCon RLEAhorro de espacio
Icono pequeño de corazón en blanco y negro
16x1625622810.9%
Icono mediano de corazón en blanco y negro
32x32102453248.0%
Icono grande de corazón en blanco y negro
128x12816384289882.3%
Dale un vistazo a la columna final, los ahorros de espacio. ¿Observas un patrón? Ahorramos mucho más espacio a medida que el tamaño aumenta ya que las secuencias son mucho más largas.
¿Qué pasa con imágenes del mismo tamaño? Esta tabla resume los resultados de comprimir tres iconos grandes con RLE:
ImagenDimensionesSin compresiónCon RLEAhorro de espacio
Icono grande de corazón en blanco y negro
128x12816384289882.3%
Icono grande en blanco y negro de caduceo (serpientes en un poste con alas)
128x12816384829849.4%
Icono grande de corona en blanco y negro
128x12816384873046.7%
Ahora puedes ver por qué elegimos un icono de corazón como ejemplo: comprime muy bien, debido a sus múltiples secuencias de blanco o negro. La compresión RLE todavía reduce a la mitad el tamaño de los otros iconos, pero no ahorra tanto espacio.
De hecho, a veces RLE no puede ahorrar nada de espacio...

Límites de RLE

¿Qué pasa con este icono de 16x16?
Un icono compuesto de colores aleatorios para cada píxel.
Hagamos un acercamiento para poder visualizar cada píxel:
Una cuadrícula de 16x16 píxeles. Cada píxel es de un color aleatorio.
Cada píxel en ese icono es de un color diferente, y hay no hay secuencias.
La codificación por longitud de secuencias no puede comprimir en absoluto una imagen como esa. Es un ejemplo que hicimos solo para este artículo (generado con este programa), y puede que no sea muy común.
Resulta que las imágenes fotográficas son similares a ese icono: el mundo real está lleno con detalles que interrumpen las secuencias.
La página del personal de Khan Academy incluye esta linda foto de un perro que mira una pantalla de computadora:
Foto de un perro que mira atentamente a una pantalla de computadora.
En resolución normal, parece que hay bloques de color similar, como en el pelambre del perro o el gris en la pantalla de la computadora.
Hagamos un acercarniento a los píxeles:
Una cuadrícula de píxeles acercada al hocico de un perro que mira una pantalla de computadora. Los píxeles son azulados y anaranjados, pero tienen un gran número de tonos de azul y naranja.
Ahora puedes ver que incluso la aparentemente simple pantalla de computadora es un gran arreglo con una variedad de colores similares pero no iguales. Una codificación por longitud de secuencias de píxeles no hará mucho para reducir el tamaño del archivo.

Usos de RLE

La compresión RLE fue una técnica muy popular cuando la mayoría de las imágenes de la computadora eran iconos con paletas limitadas de color.
En estos días, nuestras imágenes son más complejas y no contienen tantas secuencias del mismo color.
¿Dónde se utiliza RLE actualmente? Las máquinas de fax todavía usan RLE para comprimir los documentos enviados, ya que solo necesitan representar letras en blanco y negro. Las imágenes JPEG utilizan RLE en la fase final de compresión, pero primero utilizan un algoritmo más complejo para comprimir los detalles fotográficos. Eso lo exploraremos pronto.

🙋🏽🙋🏻‍♀️🙋🏿‍♂️¿Tienes alguna pregunta sobre este tópico? Nos encantaría contestarte; ¡simplemente pregunta en el area de preguntas abajo!

¿Quieres unirte a la conversación?

¿Sabes inglés? Haz clic aquí para ver más discusiones en el sitio en inglés de Khan Academy.