Está en la página 1de 23

Capı́tulo 5

Métodos de compresión
irreversible

Hasta aquı́, los métodos de compresión considerados han sido reversibles,


es decir, sin pérdida de información. Por lo general, la aplicación de estos
métodos a la compresión de imágenes no permite obtener una razón de com-
presión suficientemente alta y, por ello, se hace necesario aceptar pérdida
de información para conseguir mejor compresión. En este capı́tulo vamos a
considerar métodos de compresión con pérdida de información 0 irreversibles
que estarán fundamentalmente enfocados a la compresión de imágenes. Ob-
viamente, cuando necesitamos comprimir texto o música, lo más apropiado
es usar métodos reversibles como los estudiados en los capı́tulos anteriores.
Iniciamos el tema con algunas consideraciones básicas sobre el tratamiento
de imágenes digitales monocromáticas con Matlab.

5.1. Nociones básicas sobre imágenes digitales


en Matlab
Una imagen monocromática puede identificarse con una función I(x, y),
donde (x, y) representan las coordenadas de un punto de la imagen e I(x, y)

77
CAPÍTULO 5. MÉTODOS DE COMPRESIÓN IRREVERSIBLE 78

es el nivel de gris de dicho punto. El tratamiento digital de una imagen supone


discretizar los valores posibles de x e y, ası́ como los niveles de gris y el resul-
tado de esto es lo que se denomina una imagen digital. Puede representarse
una imagen digital mediante una matriz (I(i, j))m×n . (i, j) recibe el nombre
de pixel y I(i, j) es el nivel de gris correspondiente al pixel (i, j) en la imagen
en cuestión.
Si la imagen está en nuestro directorio, para leerla en Matlab se usa la
función imread:
>> imread(’nombre’)
Algunos formatos de imágenes que pueden usarse son: tif, tiff, jpg, jpeg,
gif, bmp, png, xwd... Naturalmente, nombre se refiere al nombre del archivo
imagen con su extensión correspondiente. Si éste no se encuentra en el direc-
torio de trabajo, se indicará también el camino que lleva hasta el directorio
donde se encuentra:
>>f=imread(’C: Documents and Settings candido Mis documentos Mis
imágenes nombre.jpg’);
Nótese el punto y coma al final de la lı́nea anterior. Si se omite, se despliega
en pantalla la matriz con los niveles de gris que corresponden a f .
Si deseamos obtener la imagen que corresponde a una matriz f , usaremos
la función imshow:
>> imshow(f)
Despliega la imagen usando 256 niveles de intensidad. Si usamos imshow(f,[a
b]), todos los valores menores que a se toman como negro, mientras que los
mayores que b son tomados como blancos. Finalmente, si ponemos imshow(f,[
]), Matlab toma como a el mı́nimo valor de f y como b el mayor.
La función pixval despliega un cursor sobre la imagen que puede moverse
sobre ella con el ratón. A medida que vamos moviendo el cursor aparecen en
la parte inferior de la ventana gráfica las coordenadas de la posición del cursor
y la correspondiente intensidad.
CAPÍTULO 5. MÉTODOS DE COMPRESIÓN IRREVERSIBLE 79

5.2. Discretización
Discretizar los datos producidos por una fuente no es otra cosa que rep-
resentar estos datos mediante un conjunto de valores más pequeño. Se trata
de una idea simple pero fundamental para diseñar un método de compresión
de datos con pérdida de información.

Ejemplo 5.2.1. Consideremos una fuente que genera números comprendidos


entre -10 y 10. Un sencillo esquema de discretización para esta situación conc-
reta consiste en representar cada dato producido por la fuente por el número
entero más cercano (si hay dos igual de próximos, se escoge uno de ellos al
azar). Ası́, si la fuente produce el número 3.4, lo representarı́amos por 3. El
esquema elegido reduce el tamaño del alfabeto necesario para representar los
posibles datos: un conjunto infinito de números puede ser representado por
un conjunto que tan sólo contiene 21 elementos (los enteros desde -10 has-
ta 10). Como se pierden los valores originales, el proceso de discretización
supone la pérdida de una parte de la información contenida en los datos.

Por ello, el diseño de un método adecuado de discretización es de suma im-


portancia a la hora de elaborar un sistema de compresión de datos con pérdida
de información. Aunque existen diversos métodos de discretización, nosotros
sólo vamos a considerar el tipo más simple, denominado discretización uni-
forme, que necesitamos en el desarrollo de los apartados siguientes.
Discretización uniforme. El rango de variación de los valores producidos
por la fuente se divide en intervalos de igual longitud, exceptuando los inter-
valos exteriores. El tamaño de los interiores se denomina paso y lo denotamos
por ∆. Los valores representativos suelen ser los puntos medios de los inter-
valos interiores. Si la fuente produce el valor x, se denota por D(x) el valor
que el sistema de discretización asigna a x; en nuestro caso D(x) es el punto
medio del intervalo al que pertenece x (para un intervalo exterior no acotado,
puede escogerse como valor representativo el número de dicho intervalo que
dista del extremo ∆/2). Los extremos de los intervalos se llaman fronteras
CAPÍTULO 5. MÉTODOS DE COMPRESIÓN IRREVERSIBLE 80

de decisión y los valores representativos niveles de reconstrucción.

Ejemplo 5.2.2. Supongamos que una fuente produce cualesquiera valores


reales y adoptamos un sistema de discretización con 8 niveles. Los intervalos
interiores son de longitud 1 y los externos no acotados

-3 -2 -1 0 1 2 3
Con este esqema D(4) = 3.5, D(−4) = −3.5 y D(2.1) = 2.5. La discretización
sólo produce 8 valores diferentes y estos pueden ser codificados con palabras-
código de longitud 3.

La diferencia x − D(x) se denomina error (o distorsión) de discretización.


El error de discretización medio-cuadrático viene dado por
Z +∞
2
σd = (x − D(x))2 f (x) dx,
−∞

donde f (x) es la función de densidad que modela los datos. Si la distribución


de los datos es uniforme sobre el intervalo simétrico [−a, a], σd2 adopta la
forma Z a
2
σd = (1/2a) (x − D(x))2 dx.
−a

Si deseamos diseñar un sistema de discretización uniforme con N niveles (N


par), el paso ∆ viene dado por ∆ = 2a/N . Podemos expresar σd2 en función
de ∆
N/2 Z k∆
X 2k − 1 2 ∆2
2
σd = (1/a) (x − ∆) dx = .
k=1 (k−1)∆
2 12
CAPÍTULO 5. MÉTODOS DE COMPRESIÓN IRREVERSIBLE 81

La varianza de la distribución de los datos es igual a σ 2 = 2a2 /12, por tanto,


la razón entre las varianzas es
σ 2 ¡ 2a ¢2
= = N 2.
σd2 ∆

La medida SNR en este caso es igual a

σ2
10 log10 = 10 log10 N 2 = 20 log10 N.
σd2

Si usamos un código de longitud fija n para codificar los niveles, entonces


N = 2n y SNR = 20n log10 2 = 6.02n dB. Por tanto, el aumento en un bit en
el proceso de discretización supone un aumento de 6.02 dB en SNR.
En este tema estamos especialmente interesados en la compresión de imá-
genes. La gran variedad de éstas hace imposible obtener un modelo proba-
bilı́stico para la variación de los pixels. Vamos a ver cómo afecta a la imagen
el usar un método de discretización uniforme, según sea el número de niveles
considerados. Consideraremos imágenes monocromáticas de la clase uint8 en
las que el valor de cada pixel se determina con 8 bits. El rango de variación
de estos valores es [0,255]. En primer lugar, discretizamos con sólo dos nive-
les. Por tanto, dividiremos el intervalo [0,255] en dos subintervalos: [0,127] y
[128,255]. El valor representativo para el primero es 64 y 196 para el segundo
y este par de valores puede codificarse con 1 bit cada uno. Repetimos ahora
el proceso usando un sistema de discretización de 4 niveles: [0,63], [64,127],
[128,191] y [192,255]. Ahora los valores representativos son {32, 96, 160, 224},
que pueden codificarse con 2 bits.

Ejemplo 5.2.3. Si discretizamos la imagen


CAPÍTULO 5. MÉTODOS DE COMPRESIÓN IRREVERSIBLE 82

usando 16 niveles, se obtiene esta otra


CAPÍTULO 5. MÉTODOS DE COMPRESIÓN IRREVERSIBLE 83

Debido a su gran simplicidad, a menudo se prefiere un sistema de dis-


cretización uniforme aunque la fuente en cuestión no tenga una distribución
uniforme. En estos casos, se procede a fijar el número N de niveles y se
trata de determinar el valor del paso ∆ que minimiza la distorsión media
cuadrática Z +∞
σd2 = (x − D(x))2 f (x) dx.
−∞

Vemos en la figura que las fronteras de decisión son múltiplos enteros de ∆

-3 D -2 D -1 D 0 1D 2 D 3D
y el nivel de representación para el intervalo [(k−1)∆, k∆) es (2k−1)∆/2.
Por tanto, la distorsión medio-cuadrática puede escribirse en la forma
N/2−1 Z k∆
X ¡ 2k − 1 ¢2
σd2 = 2 x− ∆ f (x) dx+
(k−1)∆ 2 (5.1)
Z ∞
k=1
¡ N − 1 ¢2
+2 x− ∆ f (x) dx.
(N/2−1)∆ 2

Para calcular el valor óptimo de ∆, debemos derivar respecto de ∆ e igualar


a 0. Resulta una ecuación que puede ser resuelta numéricamente, una vez
establecida la función de densidad f (x) que modela la fuente. Pero no vamos
a ahondar en estas cuestiones que se alejan bastante de nuestro objetivo.

5.3. Compresión diferencial


Una imagen digital es un ejemplo tı́pico de un conjunto de datos con
una fuerte correlación entre cada uno y el siguiente. Este hecho puede ex-
plotarse codificando las diferencias en lugar de los propios datos, pues éstas,
en general, requieren un número menor de bits. Los métodos de compresión
CAPÍTULO 5. MÉTODOS DE COMPRESIÓN IRREVERSIBLE 84

basados en esta idea se denominan diferenciales y, naturalmente, pueden ser


irreversibles o no, dependiendo de que las diferencias se discreticen o no.
Supongamos que se desea comprimir la sucesión de datos (xn ). La sucesión
de diferencias se genera poniendo dn = xn − xn−1 (suponemos x0 = 0).
Antes de proceder a codificar las diferencias, discretizamos la sucesión (dn )
mediante alguno de los métodos estudiados. Denotamos por (dn ) la sucesión
obtenida al discretizar las diferencias (dn ). El paso final en la compresión
diferencial consiste en codificar de la forma más adecuada esta sucesión. La
forma de decodificar la sucesión (dn ) es bien simple: si (xn ) denota la sucsión
reconstruida, determinamos xn mediante la relación de recurrencia xn+1 =
xn + dn+1 (nótese que x1 = d1 ). Veamos un ejemplo concreto.

Ejemplo 5.3.1. Consideremos la sucesión de datos

6.6, 13, 6, 8, 7.2, 9.5.

Para realizar una compresión diferencial, comenzamos formando la sucesión


de diferencias (dn ):
6.6, 6.4, −7, 2, −0.8, 2.3.
El paso siguiente consiste en escoger un sistema de discretización. Podemos
elegir el sistema siguiente con 7 niveles y paso ∆ = 2:
Los valores representativos son los puntos medios de los intervalos: −6, −4, −2, 0, 2, 4, 6..
Al discretizar la sucesión de diferencias, obtenemos

dn : 6, 6, −6, 2, 0, 2.

Finalmente, se procederı́a a codificar esta sucesión antes de transmitirla o


almacenarla. Para la reconstrucción de los datos, hay que empezar decodi-
ficando para obtener la sucesión (dn ). A continuación determinarı́amos los
datos reconstruidos (xn ) usando la relación de recurrencia xn = xn−1 + dn
(x0 = x0 = 0). En nuestro caso

xn : 6, 12, 6, 8, 8, 10.
CAPÍTULO 5. MÉTODOS DE COMPRESIÓN IRREVERSIBLE 85

Si calculamos las diferencias entre la sucesión original y la reconstruida, re-


sulta
xn − xn : 0.6, 1, 0, 0, −0.8, −0.5.

Con la simple observación de los errores no se puede saber lo que realmente


ocurre. Para encontrar la ley que siguen los errores, denotaremos por en los
errores de discretización, es decir, en = dn − dn . Veamos ahora la relación
existente entre xn y xn :

x1 = x0 + d1 = 0 + d1 + e1 . (5.2)

Procediendo de igual forma con x2

x2 = x1 + d2 = d1 + e1 + d2 + e2 .

Teniendo en cuenta que x2 = x1 + d2 , obtenemos

x2 = x2 + e 1 + e 2 .

Continuando de esta forma puede obtenerse la igualdad


n
X
xn = xn + ek ,
k=1

lo que nos advierte de que los errores de discretización se van acumulando a


medida que el proceso continúa.
Este problema puede resolverse del siguiente modo. La sucesión recon-
struida (xn ) es accesible tanto al codificador como al decodificador, lo que
permite modificar el proceso de diferenciación usando el valor reconstrui-
do xn−1 en lugar del dato previo xn−1 ; es decir, definimos dn = xn − xn−1 .
Habrı́a que proceder por recurrencia de la siguiente forma (teniendo presente
que x1 = d1 ): una vez encontrado xn , se obtiene dn+1 mediante la igualdad
dn+1 = xn+1 − xn y, discretizando, se determina dn+1 . Finalmente, se calcula
xn+1 = dn+1 + xn .
Con esta nueva forma de determinar la sucesión de diferencias (dn ) puede
comprobarse, procediendo de forma similar, que ahora la relación entre los
CAPÍTULO 5. MÉTODOS DE COMPRESIÓN IRREVERSIBLE 86

valores originales y los reconstruidos viene dada por xn = xn + en . En efecto,


la relación existente entre x1 y x1 se obtiene como en el caso anterior :

x1 = x0 + d1 = 0 + d1 + e1 . (5.3)

Veamos, a tı́tulo de ejemplo, el siguiente paso:

x2 = x1 + d2 = x1 + d2 + e2 =

= x1 + x2 − x1 + e2 = x2 + e2 .
Este hecho no sólo nos dice que esta nueva forma de determinar la sucesión
de diferencias es más aconsejable sino que también nos sugiere la posibilidad
de dar un paso más. En lugar de usar xn−1 como predictor, podrı́amos tomar
pn = f (xn−1 , .., x1 ), donde f (xn−1 , .., x1 ) es una función a determinar de
forma que proporcionara una mejor predicción de xn . Una vez determinada
la función f , las diferencias se calculan poniendo dn = xn −pn . Para encontrar
¡
la función f más adecuada, se debe hacer mı́nima la varianza σd2 = E (xn −
¢
pn )2 , pero esto conduce a un problema demasiado complejo. En lugar de
ello, se suele buscar una función lineal del tipo

f (xn−1 , .., x1 ) = a1 xn−1 + · · · + aN xn−N

y N se denomina el orden del predictor.

5.4. Compresión diferencial de imágenes


En los orı́genes de la compresión de imágenes con pérdida de información,
la compresión diferencial era muy utilizada. Más recientemente, su uso ha
quedado reducido a formar parte de otros métodos como, por ejemplo, los
basados en transformadas o wavelets. Por el contrario, su uso es muy común
en las comunicaciones telefónicas, mensajes de voz y aplicaciones multimedia.
En este apartado veremos el sistema diferencial de compresión más simple.
Usa un predictor de primer orden y un discretizador uniforme. Se trata de
CAPÍTULO 5. MÉTODOS DE COMPRESIÓN IRREVERSIBLE 87

un sistema extremadamente simple, especialmente si lo comparamos con el


sistema JEPG que utiliza la transformada coseno discreta.
El método diferencial que vamos a desarrollar toma el predictor p(i, j) del
pixel (i, j) de la forma siguiente


 x(1, j − i) si j > 1
p(i, j) = x(i − 1, j) si j > 1, i > 1


128 si i = j = 1,
donde x(i, j) denota el valor reconstruido del pixel (i, j). Para el proceso
de discretización usa un discretizador uniforme con un número fijo de niveles
N . En las figuras siguientes se muestran las imágenes original y reconstruida
(a la derecha) para N = 16. Por tanto, el valor de cada pixel en esta última
puede ser descrito con 4 bits. Como la imagen original es de la clase uint8,
se ha conseguido una compresión del 50 %, lo que aún puede mejorarse, si se
codifican estos valores con algún código de longitud variable.
CAPÍTULO 5. MÉTODOS DE COMPRESIÓN IRREVERSIBLE 88

5.5. El sistema JEPG reversible


JEPG tiene un sistema de compresión sin pérdida de información (losless
compression). En primer lugar, se determinan las diferencias de los valores
de los pixels con un predictor. Supongamos que se desea codificar el valor del
pixel marcado con X en la figura siguiente.

a b
c X

Para predecir el valor de X, existen varias opciones, por ejemplo, las que
se relacionan a continuación:
a) p = a.
b) p = b.
c) p = c.
CAPÍTULO 5. MÉTODOS DE COMPRESIÓN IRREVERSIBLE 89

d) p = (b + c)/2.
e) p = b + (c − a)/2.
Nosotros sólo vamos a considerar el predictor p = (b + c)/2 (que es cono-
cido por el codificador y decodificador). Fijado el predictor, se calcula la
diferencia d = p − X, pero éstas no se codifican directamente. Obtenida d, se
procede a determinar la categorı́a que le coresponde, según la tabla siguiente
categorı́a magnitud
0 0
1 -1,1
2 -3,-2,2,3
3 -7,..-4,4,..,7
4 -15,...,-8,8,...,15
5 -31,.., -16,16,..,31
6 -63,..,-32,32,..,63
7 -127,..,-64,64,..,127
8 -255,..,-128,128,..,255
A cada diferencia se le asocia un par de sı́mbolos (categorı́a, magnitud).
El primer sı́mbolo indica la categorı́a a la que pertenece d, mientras que el
segundo representa a la propia diferencia d. Una vez que se han encontrado
los pares (categorı́a, magnitud), las categorı́as se codifican con un código
de Huffman y las magnitudes con su desarrollo binario (con tantos dı́gitos
como indique su categorı́a). Si la magnitud es negativa, se codifica con la
cadena binaria complementaria del desarrollo binario de su valor absoluto
(la cadena complementaria de una palabra binaria se obtiene cambiando, en
cada componente, 0 por 1 y viceversa).
El hecho de considerar una tabla de categorı́as permite simplificar el códi-
go de Huffman para las diferencias, pues reduce considerablemente el tamaño
del alfabeto. Sin la tabla de categorı́as, el alfabeto está formado por todas
las diferencias posibles.

Ejemplo 5.5.1. Supongamos que a = c = 100, b = 190 y X = 180. Como


CAPÍTULO 5. MÉTODOS DE COMPRESIÓN IRREVERSIBLE 90

p = (b + c)/2 = 145, entonces d = p − X = −35. Por tanto, la categorı́a es 6 y


la magnitud −35. Por tanto, el par correspondiente es (6, −35). 6 se codifica
con la palabra del código de Huffman que corresponda y, como el desarrollo
binario de 35 con 6 dı́gitos es 1 0 0 0 1 1, -35 con 0 1 1 1 0 0.

5.6. La transformada coseno discreta


Recordemos que una matriz cuadrada, A, se llama ortogonal cuando su
inversa coincide con su traspuesta o, lo que es lo mismo, cuando A · At es la
matriz unidad. Dada una matriz ortogonal A de orden N , puede definirse una
transformación lineal que actúa sobre cualquier matriz numérica X = (Xij ),
cuadrada y de orden N , de la siguiente forma

Y = A · X · At .

Estas transformaciones suelen denominarse ortonormales, mientras que la


matriz Y recibe el nombre de matriz de frecuencias. Obviamente, la trans-
formación inversa existe y actúa de la forma siguiente: X = At · Y · A.
Si x es una matriz N × 1, y = A · x se dirá que es una transformada
unidimensional. Su inversa viene dada por x = At · y.
Una propiedad fundamental de las transformadas ortonormales es la sigu-
iente:
La suma de los cuadrados de todos los elementos se conserva, es decir,
P 2
P 2
i,j Xij = i,j Yij .
En teorı́a de señales este hecho se suele interpretar diciendo que las trans-
P
formadas ortonormales conservan la energia ( i,j Xij2 es la energı́a de la señal
representada por X). Vamos a hacer la prueba de la propiedad anterior en
dos pasos:
(1) Caso unidimensional. Si y = A · x, tenemos
X
yi2 = y t · y = (A · x)t · A · x = xt · At · A · x =
i
CAPÍTULO 5. MÉTODOS DE COMPRESIÓN IRREVERSIBLE 91

X
= xt · x = x2i .
i

Nótese que, si x es una matriz fila e y = x · A, de forma completamente


análoga puede probarse la propiedad.
(2) Caso bidimensional. Sea Y = A · X · At y denotemos por Z la matriz
X · At . Por el paso (1), las filas de X y Z verifican que la suma de los
cuadrados de sus componentes son idénticas. Obviamente, esto implica que
P 2
P 2
i,j Xij = i,j Zij .
Por otra parte, nuevamente en virtud de (1), las columnas de Z e Y = A·Z
verifican que la suma de los cuadrados de sus componentes coinciden. Por
tanto,
X X
Yij2 = Zij2 ,
i,j i,j

lo que prueba el resultado deseado.


Hay varias transformadas de interés en el procesado de imágenes, por
ejemplo, las transformadas de Fourier y de Hadamard. Nosotros estamos
interesados en la transformada coseno discreta (DCT) debido a que se usa en
uno de los métodos irreversibles de compresión de imágenes más ampliamente
usados: el sistema JEPG. La matriz A de la transformada coseno está dada
por
 p ³ ´
 1/N cos (2j−1)(i−1)π i = 1, j ≥ 1
2N
aij = p ³ ´
 2/N cos (2j−1)(i−1)π
i ≥ 2, j ≥ 1
2N

En relación con la compresión de imágenes, la principal ventaja de la DCT


radica en su tendencia a concentrar la mayor parte de la energı́a de Y en
los elementos próximos a la esquina superior izquierda. Como veremos en el
siguiente apartado, el sistema JEPG explota esta caracterı́stica de la DCT
para conseguir la compresión de una imagen con una razón de compresión
bastante buena con una alteración de ésta casi imperceptible.
CAPÍTULO 5. MÉTODOS DE COMPRESIÓN IRREVERSIBLE 92

5.7. El sistema JEPG irreversible


Es uno de los sistemas de compresión irreversible de imágenes fotográficas
más conocidos. Puede conseguir una razón de compresión del orden de 10:1
con una pérdida de calidad de imagen casi imperceptible. En general, sus
prestaciones son buenas para imágenes con una variación suave de color y
tono. En su implementación podemos distinguir tres etapas fundamentales:
- aplicación de la transformada coseno discreta
- discretización
- codificación
Sólo en la etapa de discretización hay pérdida de información.
Vamos a desarrollar los pasos de que consta considerando el ejemplo con-
creto siguiente (suponemos que es una imagen de 8 bits):
76 78 72 79 79 73 72 78
76 78 72 80 80 72 72 78
74 77 74 74 74 75 76 74
74 77 74 73 74 75 75 74
74 76 74 73 73 74 75 74
73 75 74 73 72 73 74 73
72 74 75 73 72 72 73 72
71 74 75 73 71 71 72 72
1. Se resta al valor de cada pixel la cantidad 128 = 27 . De sta forma, los
nuevos valores pertenecen al intervalo [−128, 127].
-52 -50 -56 -49 -49 -55 -56 -50
-52 -50 -56 -48 -48 -56 -56 -50
-54 -51 -54 -54 -54 -53 -52 -54
-54 -51 -54 -55 -54 -53 -53 -54
-54 -52 -54 -55 -55 -54 -53 -54
-55 -53 -54 -55 -56 -55 -54 -55
-56 -54 -53 -55 -56 -56 -55 -56
-57 -54 -53 -55 -57 -57 -56 -56
CAPÍTULO 5. MÉTODOS DE COMPRESIÓN IRREVERSIBLE 93

2. La aplicación de la transformada a la imagen completa supone un


tiempo de computación enorme. Por ello, se divide la imagen en bloques de
tamaño 8 × 8. Por otra parte, la mayorı́a de las imágenes tienen la particu-
laridad de que los valores de los pixels varı́an relativamente poco en un área
pequeña de la imagen, como puede ser la que corresponde a un bloque 8 × 8.
3. Se aplica la transformada coseno discreta a los valores anteriores de
cada bloque 8 × 8. En el caso de nuestro ejemplo, se obtiene

-430.1 2.6 0.2 -2.5 0.6 -3.3 -4.2 -1.9


9.7 -0.3 -0.7 1.6 7.3 -3.5 -3.2 -2.2
-0.1 1.3 -2.5 -2.6 5.5 -1.3 -0.8 -0.7
1.1 0.1 0.1 0.1 2.6 -0.5 -0.2 -0.5
-0.1 0 0.6 0 -0.3 -0.6 0.4 -0.2
-0.7 -0.2 0.2 0.8 -2.3 0.3 0.8 0.4
-1.2 -0.5 1 0.4 -2.7 0.9 0.5 -0.1
-0.4 -0.4 0.5 0.3 -1.6 0.9 0.4 0.4
4. Discretización. La idea clave radica en el hecho de que los cambios en
los valores de las frecuencias más altas (las más alejadas de la esquina superior
izquierda en un recorrido en zig-zag a lo largo de la matriz de frecuencias)
se traducen en cambios en la imagen que resultan imperceptibles para el ojo
humano. Para explotar esta circunstancia, JEPG proporciona matrices de
discretización como la que se muestra a continuación:

 
16 11 10 16 24 40 51 61
 
 12 12 14 19 26 58 60 55 
 
 14 13 16 24 40 57 69 56 
 
 14 17 22 29 51 87 80 62 
 
D= 
 18 22 37 56 68 109 103 77 
 
 24 35 55 64 81 104 113 92 
 
 
 49 64 78 87 103 121 120 101 
72 92 95 98 112 100 103 99
CAPÍTULO 5. MÉTODOS DE COMPRESIÓN IRREVERSIBLE 94

Los elementos de la matriz de discretización son los pasos de discretización.


Nótese que, por lo general, son más grandes a medida que avanzamos en zig-
zag por dicha matriz, desde la esquina superior izquierda.
JEPG ofrece al usuario una gran flexibilidad. En función de sus necesi-
dades concretas, éste puede seleccionar un factor de calidad que varı́a desde
1 hasta 25.
Factores de calidad mayores también son posibles, pero entonces la ima-
gen se degrada bastante. Para un factor de calidad de nivel 2, la matriz de
discretización es la siguiente

 
3 5 7 9 11 13 15 17
 
 5 7 9 11 13 15 17 19 
 
 7 9 11 13 15 17 19 21 
 
 9 11 13 15 17 19 21 23 
 
D2 =  
 11 13 15 17 19 21 23 25 
 
 13 15 17 19 21 23 25 27 
 
 
 15 17 19 21 23 25 27 29 
17 19 21 23 25 27 29 31

Si denotamos por Dij y θij los elementos de la matris de discretización


y de frecuencias, respectivamente, se determinan los valores discretizados de
los coeficientes como sigue
θij
θij = b + 0.5c.
Dij

Usando la matriz D, calculemos el valor θ11 que corresponde a nuestro ejem-


plo:
−430.12
θ11 = b + 0.5c = b−26.38c = −27.
16
Haciendo esto con todos los elementos, se obtiene la matriz de coeficientes
discretizados
CAPÍTULO 5. MÉTODOS DE COMPRESIÓN IRREVERSIBLE 95

 
−27 0 0 0 0 0 0 0
 
 1 0 0 0 0 0 0 0 
 
 0 0 0 0 0 0 0 0 
 
 
 0 0 0 0 0 0 0 0 
 
 0 0 0 0 0 0 0 0 
 
 0 0 0 0 0 0 0 0 
 
0 0 0 0 0 0 0 0

Al ser los elementos de la matriz de discretización más grandes, a medida


que la recorremos en zig-zag, es alta la probabilidad de tener en la matriz
formada por los coeficientes discretizados tramos (runs) largos de ceros ha-
cia el final de la cola (supuesto que esta se recorre en zig-zag). Este hecho
es crucial, pues se han de codificar los coeficientes discretizdos y se puede
conseguir un grado de compresión importante si la mayorı́a son nulos salvo
en un tramo inicial.
Si hubiéramos usado la matriz D2 , la matriz de coeficientes discretizados
tendrı́a la forma

 
−143 1 0 0 0 0 0 0
 
 2 0 0 0 1 0 0 0 
 
 0 0 0 0 0 0 0 0 
 
 
 0 0 0 0 0 0 0 0 
 
 0 0 0 0 0 0 0 0 
 
 0 0 0 0 0 0 0 0 
 
0 0 0 0 0 0 0 0

Como los pasos de discretización son menores, la discretización no es tan


drástica.
Sobre el modo de codificar los coeficientes discretizados hablaremos más
adelante, ahora vamos a ver cómo se obtiene el bloque reconstruido a partir
CAPÍTULO 5. MÉTODOS DE COMPRESIÓN IRREVERSIBLE 96

de aquéllos. En primer lugar, se procede a realizar lo que podrı́amos llamar la


desdiscretización, que consiste en multiplicar, elemento a elemento, la matriz
de discretización por la de los coeficientes discretizados. En nuestro caso,
resulta

 
−432 0 0 0 0 0 0 0
 
 12 0 0 0 0 0 0 0 
 
 0 0 0 0 0 0 0 0 
 
 0 0 0 0 0 0 0 0 
 
 
 0 0 0 0 0 0 0 0 
 
 0 0 0 0 0 0 0 0 
 
 
 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0

Ahora se aplica la transformada inversa a esta matriz y, tras sumar 128 a


cada elemento, se obtiene

 
76.1 76.1 76.1 76.1 76.1 76.1 76.1 76.1
 
 75.7 75.7 75.7 75.7 75.7 75.7 75.7 75.7 
 
 75.2 75.2 75.2 75.2 75.2 75.2 75.2 75.2 
 
 74.4 74.4 74.4 74.4 74.4 74.4 74.4 74.4 
 
 
 73.6 73.6 73.6 73.6 73.6 73.6 73.6 73.6 
 
 72.8 72.8 72.8 72.8 72.8 72.8 72.8 72.8 
 
 
 72.2 72.2 72.2 72.2 72.2 72.2 72.2 72.2 
71.9 71.9 71.9 71.9 71.9 71.9 71.9 71.9

Finalmente, se redondea cada elemento al entero más cercano y se obtiene


CAPÍTULO 5. MÉTODOS DE COMPRESIÓN IRREVERSIBLE 97

76 76 76 76 76 76 76 76
76 76 76 76 76 76 76 76
75 75 75 75 75 75 75 75
74 74 74 74 74 74 74 74
74 74 74 74 74 74 74 74
73 73 73 73 73 73 73 73
72 72 72 72 72 72 72 72
72 72 72 72 72 72 72 72

A continuación mostramos la diferencia entre el bloque original y el recon-


struido.

0 2 -4 3 3 -3 -4 2
0 2 -4 4 4 -4 -4 2
-1 2 -1 -1 -1 0 1 -1
0 3 0 -1 0 1 1 0
0 2 0 -1 -1 0 1 0
0 2 1 0 -1 0 1 0
0 2 3 1 0 0 1 0
-1 2 3 1 -1 -1 0 0

5.Codificación. Por razones históricas, el elemento θ11 de la matriz de


frecuencias recibe el nombre de coeficiente DC, mientras que los otros se
llaman coeficientes AC. El sistema de codificación es diferente según se trate
de un tipo u otro de coeficiente.
(A) Coeficientes DC. Por las propiedades de estos coeficientes (discretiza-
dos), es razonable esperar que los coeficientes DC de bloques adyacentes ten-
gan valores relativamente próximos. Por ello, se codifican las diferencias con el
del bloque anterior, en lugar de los propios coeficientes. Una vez obtenidas es-
tas diferencias, el sistema de codificación es igual al considerado en el método
JEPG reversible, que asocia a cada diferencia un par (categorı́a, magnitud).
(B) Coeficientes AC. A cada coeficiente discretizado no nulo se asocia,
como en (A),un par (categorı́a magnitud), donde categorı́a puede tomar uno
CAPÍTULO 5. MÉTODOS DE COMPRESIÓN IRREVERSIBLE 98

de los valores 1, 2, ..., 10. Si es nulo, la codificación consiste en dos ceros


seguidos por el código que corresponde al número de coeficientes discretizados
nulos consecutivos que siguen al que estamos considerando.
Este número se codifica en binario con 4 bits, por lo que el run de ceros
máximo que se considera tiene longitud 16. Si encontramos un run de coefi-
cientes nulos de longitud mayor, deberemos dividirlo en tramos de longitud
no mayor que 16. Para la codificación de las categorı́as, JEPG permite al
usuario escoger entre varias opciones: código de Huffman, aritmético, etc.
La posibilidad más simple consiste en usar para las categorı́as el siguiente
código:

Categorı́a palabra-código
0 00
1 010
2 011
3 1000
4 1001
5 1010
6 1011
7 1100
8 1101
9 1110
10 1111

Por último, destacar que JEPG usa un sı́mbolo especial para marcar el
final de cada bloque. De hecho, este sı́mbolo va a continuación de la cod-
ificación del último coeficiente AC no nulo, por lo que, a su vez, también
advierte de que los restantes coeficientes AC del bloque son todos nulos.
Nótese que la decodificación de la cadena binaria obtenida en esta última
etapa no presenta ningún problema. Los primeros bits corresponden a la cat-
egorı́a y magnitud del coeficiente DC. Una vez decodificado este coeficiente,
pueden darse dos posibilidades:
CAPÍTULO 5. MÉTODOS DE COMPRESIÓN IRREVERSIBLE 99

a) encontramos dos ceros consecutivos, lo que nos advierte de que se trata


del código de un run de etiquetas nulas; si este es el caso, los bits que siguen
a 0 0 son el código de la longitud de dicho run (3 0 4 bits, según que dicha
longitud sea menor o mayor que 3) y
b) no encontramos los dos ceros consecutivos, por lo que se trata de la
codificación del par (categorı́a, magnitud) correspondiente a un coeficiente
AC no nulo.

5.8. Prácticas de Programación


1. Elaborar un programa de Matlab para comprimir una imagen por el
método:
a) JEPG reversible
b) JEPG irreversible
c) de compresión diferencial

También podría gustarte