Proyecto final compresión de imágenes y video

82
PROYECTO FINAL DE CARRERA COMPRESIÓN DE IMÁGENES Y VIDEO (formato MPEG2) Fernando Martín Pap Director: Mg. Silvia Mabel Castro UNIVERSIDAD NACIONAL DEL SUR – BAHIA BLANCA – ARGENTINA Departamento de Ciencias e Ingeniería de la Computación Ingeniería en Sistemas de Computación x de abril de 2005

description

Proyecto final de carrera - Compresión de imágenes y video (JPG/MPG)

Transcript of Proyecto final compresión de imágenes y video

Page 1: Proyecto final   compresión de imágenes y video

PROYECTO FINAL DE CARRERA

COMPRESIÓN DE IMÁGENES Y VIDEO

(formato MPEG2)

Fernando Martín PapDirector: Mg. Silvia Mabel Castro

UNIVERSIDAD NACIONAL DEL SUR – BAHIA BLANCA –ARGENTINA

Departamento de Ciencias e Ingeniería de la ComputaciónIngeniería en Sistemas de Computación

x de abril de 2005

Page 2: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

AGRADECIMIENTOS

A mis padres y hermanos, que siempre confiaron en mi, me han apoyado entodo momento y me dieron fuerzas para poder cumplir mi meta.

A mi directora, por todo el tiempo que me dedicó, por sus recomendaciones ypor haber confiado en mi.

A todos aquellos que hicieron que mis años de estudio hayan sido realmentemaravillosos.

2 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 3: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

ÍNDICE

Introducción 6Percepción 6

El sistema visual 7El ojo 7

La retina 7Los conos 8Los bastones 9

Psicofísica visual 9El sistema auditivo 11

El oído 12La membrana basilar 12

Psicofísica auditiva 13Bandas críticas 13Enmascaramiento frecuencial 14Enmascaramiento temporal 15

Compresión 16Codificación de Huffman 16Codificación aritmética 19

Compresión de imágenes 20Compresión de imágenes con pérdida 21

Submuestreo (subsampling) 21Formatos de muestreo de YCbCr 23

Transformada discreta del coseno (DCT) 24Wavelet 28

Formato de imagen JPEG 30Esquema secuencial (baseline) 32

Cuantificación 33Recorrido en zigzag 35Codificación RLC 35

3 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 4: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

Codificación DPCM 36Codificación entrópica 37

Codificación de los coeficientes DC Diferenciales 37Codificación de los coeficientes AC 38

Caso de estudio: COMPRESSLIB 40Librería de compresión de imágenes 41

Muestreo 43Discretización en bloques 45Transformación DCT 45Cuantificación 48Codificación DPCM 49Recorrido en zigzag y codificación RLC 50Codificación de Huffman 54

Compress demo 56Image viewer 57

Compresión de video 59Codificación temporal 60

Compensación de movimiento 60Compresión de audio 61

Replicación de banda espectral (SBR) 61Formato de video MPEG2 62

Perfiles y niveles 63Capas 63

Codificación de video 64Cuadros I, P, B, D 64Compensación de movimiento 65

Codificación de audio 66Modelo psicoacústico 67

Multiplexado y sincronización de audio y video 69

4 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 5: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

Trenes de programa y de transporte 69Tren de programa 69Tren de transporte 70

Unidades de presentación y de acceso 70Trenes elementales empaquetados (PES) 71Multiplexado del tren de programa 72Multiplexado del tren de transporte 72

Encabezado del paquete de transporte 73Información específica de programa (PSI) 73

Buffers del codificador y del decodificador 74Estampillas de tiempo y referencias de reloj 75

Estampilla de tiempo de presentación (PTS) 77Estampilla de tiempo de decodificación (DTS) 77Asignación de estampillas de tiempo 78

Librerías de reproducción de video MPEG 78Librería SMPEG 79

Bibliografía 82

5 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 6: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

INTRODUCCIÓNHistóricamente la representación de la información ha sido una de las áreas

que ha generado mucho interés. En los comienzos de la computación, laslimitaciones en los medios de almacenamiento convirtieron en una tarea crucial larepresentación óptima de la información. Técnicas de compresión como lacodificación de Lempel-Ziv, de Huffman, o la aritmética, permitieron representar lainformación con mucho menor cantidad de datos.

En las tres técnicas anteriormente mencionadas se procesan los datos demodo tal de evitar almacenar información redundante. Si la informaciónrecuperada luego del proceso de descompresión es exactamente igual a laoriginal, decimos que es un proceso de compresión sin pérdida, en caso contrariose dice que es un proceso de compresión con pérdida.

La primera de las alternativas se basa en la redundancia estadística (entropía)de los datos y es de un uso muy general, ya que no pierde información. Lasegunda puede lograr relaciones de compresión mucho mejores, pero lo hacemediante la eliminación de información. Cuanto más información se elimine, mayorserá la relación de compresión, pero la calidad de la información recuperada serámenor. Debido a esto entra en juego la noción de calidad —que es inversamenteproporcional a la relación de compresión.

La compresión con pérdida sin embargo, sólo puede utilizarse para datos conforma específica, pues en algunos casos los datos son intolerantes a la pérdida deinformación. La compresión de imágenes, sonido y video son áreas de gran interésque, basándose en la percepción humana, descartan información irrelevante parapoder lograr su cometido.

Afortunadamente la tecnología de almacenamiento ha evolucionado de unmodo considerable, no obstante el problema persiste. Áreas como la televisiónsatelital, teleconferencias, telefonía visual, la industria cinematográfica, grandesbases de datos multimedia, etc., no podrían existir —incluso aprovechando laactual tecnología de almacenamiento disponible— si no fuera por la posibilidad decompresión de datos.

PERCEPCIÓNEl ser humano posee muy buenos sensores que le permiten obtener una

representación del mundo exterior. Esto lo logra a través del sentido de la vista, deloído, del tacto, del olfato y del gusto. Al tratarse de una investigación sobrecompresión de imágenes y de video, nosotros sólo nos concentraremos en elsentido de la vista y del oído. Tanto el ojo como el oído tienen sus característicasespeciales y sus limitaciones. El estudio detallado de éstas ha hecho posible eldesarrollo de técnicas de compresión —tanto de sonido como de imágenes yvideo— que permiten ponderar la información, de manera tal de priorizar los datosde mayor relevancia para nuestros órganos. Primero analizaremos brevemente lavisión humana, luego la audición.

6 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 7: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

El sistema visualLa vista es uno de los cinco sentidos corporales, por el que se percibe la luz y

que da a conocer el color, la forma, la distancia, el tamaño y el movimiento de loscuerpos.

La visión contribuye a informarnos de nuestra posición y mantiene conexionescon los centros que rigen el equilibrio postural. Es el resultado de una serie defenómenos sucesivos que se producen de modo coordinado: 1) formación de laimagen en la retina; 2) estimulación de las células receptoras de la retina; 3)conducción al cerebro del impulso elaborado por dichas células; 4) formación de laimagen en el cerebro.

El ojoEl ojo le transmite la información al cerebro a través del nervio óptico. Esta

información se propaga por impulsos de naturaleza electroquímica, cuya velocidadestá comprendida entre diez y cien metros por segundo.

Cuando los ojos están abiertos, la luz entra por la pupila, que es una aberturadel iris. El diámetro de la pupila puede modificarse: se agranda cuando desciendela luminosidad y se contrae a plena luz, y ello de modo automático, obedeciendo aun reflejo nervioso.

Detrás de la pupila se encuentra el cristalino, que concentra la luz sobre elfondo del ojo. El cristalino es regulable, permitiendo así ver con claridad tanto losobjetos próximos como los lejanos.

En el fondo del ojo se halla situada la retina. La retina esta formada por capasde células nerviosas sensibles a la luz.

La córnea esta situada en la parte anterior del ojo y es, al igual que el cristalino,una superficie que contribuye a concentrar los rayos luminosos sobre la retina. Elcristalino —y, en cierta medida, también la córnea— desvía los rayos de tal formaque la imagen se proyecta invertida sobre la retina.

La retinaLa retina está compuesta por fotorreceptores que convierten la intensidad y el

color de la luz en señales nerviosas que son procesadas por el cerebro. La retinacontiene dos clases de fotorreceptores, bastones y conos. Los bastones son másnumerosos —alrededor de 120 millones— y son más sensitivos a la luz que losconos. Sin embargo, los bastones no son sensibles al color. Los conos —entre 6 y7 millones— son quienes proveen al ojo de sensitividad al color, y estánmayormente concentrados en la mácula. En el centro de esta región se encuentrala fóvea —un área de 0.3 mm de diámetro—, donde no existen bastones y laconcentración de conos es muy grande.

7 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 8: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

Los conosLas experiencias empíricas sugieren que dentro del conjunto de los conos

existen tres clases distintas de receptores de color, y se han establecido las curvasde respuesta para cada tipo de cono (figura 1) [CRRE]. Basándose en estascurvas de respuesta se pudieron clasificar los conos en "rojos" (64%), "verdes"(32%) y "azules" (2%) [NAVE2005]. Los conos verdes y rojos están concentradosen la fóvea, mientras que la sensitividad de los conos azules se encuentramayormente fuera de esta zona.

Los conos azules merecen un estudio particular debido a que constituyen tansólo un 2% del total y se encuentran fuera de la fóvea. Se los identifica en la curvade respuesta a la luz en un pico aproximadamente a los 445 nm. Si bien sonmucho más sensitivos a la luz que los conos verdes y rojos, no es suficiente paracontrarrestar su poco porcentaje en cantidad. Sin embargo, la sensitividad al colorazul en nuestra percepción visual final es comparable a la de los colores verde yrojo. Esto sugiere que nuestro cerebro posee un "amplificador azul".

La percepción visual de los objetos intensamente azules es menos precisa quela percepción de objetos rojos o verdes. Esta reducción de agudeza visual seatribuye a dos efectos. Primero, los conos azules se encuentran fuera de la fóvea,donde los conos dispuestos muy cerca unos de otros pueden brindar la mayorresolución. Segundo, el índice de refracción para la luz azul es lo suficientementediferente del índice de refracción de la luz roja y verde como para que cuando elrojo y el verde estén en foco, el azul se vaya ligeramente de foco.

Los conos son los responsables de la visión de alta definición. El ojo se muevecontinuamente para que la luz reflejada por el objeto en interés se concentre en lafóvea, donde reside la mayor cantidad de conos.

Figura 1: Curvas de respuesta de los conos.

8 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 9: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

Los bastonesSi bien anteriormente mencionamos que la presencia de bastones es nula

dentro de la fóvea, éstos se encuentran concentrados en todo el resto de lasuperficie de la retina. Son los encargados de la visión nocturna, de la detecciónde los movimientos y de la visión periférica.

Los bastones son fotorreceptores increíblemente eficientes —mas de mil vecesmás sensitivos que los conos. Tal es así que, bajo condiciones óptimas, puedenactivarse tan sólo por fotones individuales. La visión adaptada a la oscuridad sealcanza en su totalidad luego de un período de oscuridad considerable (alrededorde 30 minutos). Esto se debe a que el proceso de adaptación de los bastones esmucho más lento que el de los conos.

Mientras que la agudeza o resolución visual es mucho mejor con los conos, losbastones son mejores sensores de movimiento. Debido a que los bastonespredominan en la visión periférica, esta visión es más sensitiva a la luz, y por lotanto podemos ver objetos menos brillantes con nuestra visión periférica. Porejemplo, si vemos una estrella no muy brillante con nuestra visión periférica, alintentar mirarla directamente desaparecerá. Esto es debido a que estamosmoviendo la imagen dentro de la región de la fóvea, la cual es rica en conos ypobre en bastones, y por lo tanto menos sensitiva a la luz. Por la misma razón esque se pueden detectar mejor los movimientos con la visión periférica.

Psicofísica visualUna de las áreas en donde comenzó la psicología es en el campo de la

psicofísica. La psicofísica intenta encontrar la "física del cuerpo humano". Consisteen aplicarle un estímulo a una persona, y luego obtener de esta persona larespuesta de la experiencia psicológica asociada al estímulo físico.

Uno de los descubrimientos es la noción de threshold o umbral. Un umbral esun límite psicológico de la percepción. El umbral absoluto es la mínima cantidad deestimulación sensorial que se puede detectar el 50 % de las veces (el motivo por elcual el límite se fijó en el 50 % es la variabilidad de la capacidad humana). Elumbral relativo es el menor incremento o decremento de un estímulo físico quepuede detectarse el 50 % de las veces. La noción de umbral no es exclusiva delsentido de la vista, sino que se puede aplicar a cualquiera de los órganossensoriales. Un ejemplo de umbral relativo aplicado al sentido de la vista podríaser decidir cuál de dos luces es más brillante.

La relación entre la intensidad de la luz que entra al ojo y el brillo percibido noes una función lineal. Esto significa que a medida que la intensidad de una fuenteluminosa cambia, el observador no percibirá un cambio igual en el brillo. Larespuesta de la intensidad real del ojo es muy parecida a una respuestalogarítmica. De hecho, se ha mostrado experimentalmente que la intensidad deuna fuente luminosa debe ser cercana al doble antes de que el ojo pueda detectar

9 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 10: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

que ésta ha cambiado. Por lo tanto, los cambios ligeros en la intensidad enregiones oscuras de una imagen tienden a ser más perceptibles que los cambiosiguales en regiones brillantes. Esta relación que hay entre la intensidad de lailuminación y el brillo percibido se conoce como Ley de Weber.

Existen varios fenómenos que muestran que la iluminación percibida no es unafunción simple de la intensidad. Entre ellos se encuentra el contraste simultáneo,que es una ilusión por la cual el brillo percibido de una región depende de laintensidad del área circundante. En la figura 2 se observan cinco cuadradosdispuestos horizontalmente, cada uno de ellos sucesivamente más claro. Dentrode cada cuadrado se encuentra un círculo exactamente igual, sin embargo cuantomás claro es el cuadrado que lo contiene, más oscuro parece verse.

Figura 2: Contraste simultáneo.

Otro fenómeno a tener en cuenta es el de las bandas de Mach, que es unailusión por la cual el sistema visual acentúa los cambios importantes de intensidad.El sistema visual tiende a sobrevalorar o infravalorar la intensidad en lasproximidades de los límites de dos regiones con intensidades diferentes. De estemodo, el ojo incrementa el realce en los contornos de las transiciones deintensidad, y gracias a esto se puede obtener una agudeza visual muy buena. Sise observa la figura 3 de izquierda a derecha, cada banda pareciera hacerse másoscura justo antes de la transición. Si la figura 3 se observa de derecha aizquierda, cada banda pareciera hacerse más clara justo antes de la transición.Esto provoca la ilusión de que la transición sea de mayor amplitud de lo que es enrealidad.

Figura 3: Bandas de Mach.

El sistema visual también tiene problemas en cuanto a la respuesta en

10 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 11: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

frecuencia. El ojo tiene problemas para resolver detalles finos, o transiciones deintensidad. Generalmente, la respuesta en frecuencia del ojo disminuye a medidaque las transiciones de intensidad se vuelven cada vez más finas. El contraste esotro factor a tener en cuenta. Cuanto más alto es el contraste, más fino es eldetalle que el ojo puede resolver. Por lo tanto, cuando las transiciones sondemasiado finas o el contraste es demasiado bajo, el ojo ya no puede resolverlossatisfactoriamente. En estos casos el ojo sólo puede percibir un promedio del nivelde gris del área en cuestión. En la figura 4 se puede apreciar un patrón queincrementa la frecuencia de izquierda a derecha y disminuye el contraste de abajohacia arriba [MS].

Figura 4: Patrón de frecuencia y contraste.

El sistema auditivoEste es el sistema mediante el cual podemos percibir los sonidos. Las

cualidades del sonido percibidas por el oído son el tono, la intensidad y el timbre.El tono depende de la frecuencia de las vibraciones: una frecuencia elevadaprovoca tonos agudos y una frecuencia baja tonos graves. La frecuencia se mideen Hertz —Hz.— y se refiere a la cantidad de ciclos por segundo de una ondaperiódica. La intensidad con que se percibe un sonido depende de la amplitud dela vibración y del tono. Psicológicamente se lo percibe como volumen y se mide endecibeles —dB. El timbre permite distinguir sonidos de la misma intensidad yfrecuencia, pero con distintas armónicas de la frecuencia del tono fundamental; esdecir, con distinta forma de onda —por este motivo es que podemos diferenciaruna misma nota en distintos instrumentos musicales.

El sonido puede ser medido con gran exactitud, sin embargo entender cómo serecibe y se transforma en pensamientos dentro del cerebro no es nada trivial. Laaudición es el resultado de una serie de procesos acústicos, mecánicos, nerviosos

11 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 12: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

y mentales que nos da la impresión de sonido.

El oídoEn la estructura física del oído se pueden distinguir tres zonas: el oído externo,

el oído medio y el oído interno.El oído externo comprende el pabellón de la oreja, en forma de embudo, y el

conducto auditivo externo, obturado en su extremo por el tímpano.El oído medio se halla constituido por la caja del tímpano, cavidad que contiene

la cadena de huesecillos: martillo, yunque y estribo. Estos huesecillos transmitenlas vibraciones desde el tímpano hasta la ventana oval.

El oído interno está constituido por una serie de cavidades alojadas en el huesotemporal, y consta de tres partes: el vestíbulo, la cóclea y los conductossemicirculares. En el vestíbulo se encuentra la ventana oval, por la que el oídointerno comunica con el medio. Al vestíbulo le sigue la cóclea, un tubo diminutoque se enrolla dos veces y media sobre sí mismo. El interior de la cóclea estádividido en tres conductos mediante dos membranas que lo recorrenlongitudinalmente. Sobre una de ellas se encuentra el órgano de Corti, que es elórgano de la audición propiamente dicho y que está formado por unas 25.000células sensitivas.

Las vibraciones sonoras transmitidas por las partículas del aire son canalizadaspor el pabellón de la oreja hacia el conducto auditivo externo, hasta llegar altímpano. Por medio de la cadena de huesecillos el tímpano comunica lasvibraciones a la ventana oval y a la cóclea. La presión originada en la cóclea porlas vibraciones sonoras hace vibrar a la membrana basilar. Durante el paso de laonda, el órgano de Corti también oscila, friccionando la membrana tectorial yexcitando las células sensoriales, que estimulan el cerebro.

La membrana basilarLa membrana basilar se encuentra dentro de la cóclea y la recorre en toda su

extensión. Esta membrana varía en masa y rigidez a lo largo de su longitud. Sobreel extremo más próximo a la ventana oval la membrana es rígida y liviana, ydebido a esto su frecuencia de resonancia es alta. Sobre el extremo más lejano lamembrana es blanda y pesada, y es por esto que su frecuencia de resonancia esbaja. El rango de las frecuencias de resonancia disponibles en la membranadetermina el rango de frecuencias de la audición humana. El oído humano puededistinguir entre 16 y 20.000 vibraciones por segundo (entre 16 Hz. y 20 kHz.), perola mayoría de las personas sólo puede distinguir sonidos que se encuentran dentrodel rango de los 20 Hz. hasta los 15 kHz. La membrana basilar transforma cadafrecuencia en impulsos nerviosos en una región distinta, de manera que lapercepción del tono depende del oído y no del sistema nervioso central. Además,esta membrana posee pequeños músculos que actúan como si fuera un sistemade realimentación positiva que mejora el factor Q de resonancia [TEKTRONIX97].

12 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 13: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

Psicofísica auditivaLa psicofísica auditiva o psicoacústica es el estudio de la percepción subjetiva

de los sonidos en los seres humanos. En otras palabras, es el estudio de lapsicología de la percepción acústica.

Ya mencionamos en la sección de psicofísica visual que la noción de umbral noes exclusiva de ningún sentido. Para el oído, el umbral relativo del tono sobre elrango medio de audición es aproximadamente de 2 Hz. Es decir que se puedenpercibir cambios de tono no menores a 2 Hz. No obstante, bajo ciertascondiciones, se puede llegar a percibir variaciones menores [WIKIPEDIA2005].

El límite inferior para el umbral absoluto de la intensidad de cualquier sonidoaudible está a 0 dB. El límite superior no está tan claramente definido. Se podríadefinir como la intensidad máxima sin que dañe físicamente al oído. Pero este noes un límite fijo, pues depende del tiempo de exposición. Por ejemplo,exposiciones de cortos períodos de sonidos de 120 dB. podrían ser inofensivaspara el oído, sin embargo largas exposiciones de sonidos de 80 dB. podríandañarlo.

Un estudio más riguroso de los límites inferiores de audibilidad determina queel umbral mínimo para el cual se puede oír un sonido es dependiente de lafrecuencia del mismo. Por medio de mediciones de tonos de la menor intensidadaudible y a distintas frecuencias, se puede establecer una curva de respuesta deumbral absoluto de audición (figura 5) [TEKTRONIX97]. El oído posee un pico desensitividad (un mínimo en la curva) dentro del rango de 1 kHz. hasta 5 kHz., ycabe destacar que la voz humana cae dentro de este mismo rango.

Figura 5: Curva del umbral en silencio.

Bandas críticasLos sonidos con distintas frecuencias causan que vibren áreas diferentes de la

membrana basilar, excitando a unas u otras células sensitivas. Las señales de los

13 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 14: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

sonidos son contínuas, y por lo tanto existen sonidos de infinitas frecuenciasdiferentes. Por supuesto que no puede existir una relación biunívoca entre cadafrecuencia posible con un área distinta de la membrana basilar, por lo tanto habránsonidos de frecuencias similares que excitarán a las mismas células nerviosas.Debido a esto, si dos sonidos con el mismo volumen que se encuentran dentro dela misma banda crítica suenan simultáneamente, el sonido no será percibido eldoble de fuerte, sino que levemente más fuerte que cualquiera de ellos porseparado. Para que dos sonidos se encuentren dentro de la misma banda crítica,es necesario que sus frecuencias sean similares. Si los sonidos hubieran sido defrecuencias lo suficientemente distintas como para estar dentro de distintasbandas críticas, el sonido percibido hubiera sido considerablemente mas fuerte.Esto se debe a que no se solapan las células sensitivas excitadas en la membranabasilar. En las frecuencias audibles más bajas, el ancho de las bandas críticas esde aproximadamente 100 Hz. A medida que se incrementa la frecuencia, el anchode las bandas críticas se hace más grande, superando los 3 kHz. en lasfrecuencias más altas.

Enmascaramiento frecuencialBajo determinadas condiciones, un sonido que es claramente audible puede

ser enmascarado por otro sonido. Por ejemplo, se complicaría mucho manteneruna conversación si hay mucho ruido en el ambiente. A este fenómeno se lo llamaenmascaramiento frecuencial. Un sonido débil es enmascarado si se haceinaudible con la presencia de otro más fuerte. Si un sonido se encuentra cercanoen frecuencia al sonido fuerte será más fácilmente enmascarado que si seencuentra apartado de su frecuencia. En la figura 6 se puede apreciar cómo unúnico tono afecta al umbral [TEKTRONIX97]. El umbral se incrementa tanto hacialas frecuencias bajas como hacia las altas, pero el incremento hacia lasfrecuencias altas es un poco más acentuado. En presencia de un espectrocomplejo, como el de la música, el umbral se incrementaría en la mayoría delrango. Es por esto que el zumbido de un cassette analógico sólo se puede oírdurante los espacios en blanco.

14 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 15: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

Figura 6: Enmascaramiento frecuencial.

Enmascaramiento temporalEl comportamiento resonante de la membrana basilar es análogo al

comportamiento de un analizador de transformadas. De acuerdo a la teoría de lastransformadas, cuanto más exacto se conoce el dominio de la frecuencia de unaseñal, menos exactitud se dispondrá en el dominio del tiempo —y viceversa. Esdecir que cuanto más pueda distinguir una transformada entre dos frecuencias,menor será su capacidad para discriminar entre dos eventos. En el oído humanose observa un compromiso de modo de equilibrar la incerteza en ambos dominios,y por lo tanto no es perfecto en ninguno de ellos. La imperfección al discriminarentre frecuencias es lo que produce el mencionado enmascaramiento frecuencial.

La imperfección en la discriminación del tiempo se debe a la respuestaresonante del oído. El factor Q es tal que un determinado sonido debe estarpresente por al menos un milisegundo para que pueda ser audible. Debido a estalenta respuesta, el enmascaramiento puede producirse aún cuando las señalesinvolucradas no son simultáneas. El preenmascaramiento y postenmascaramientose producen cuando el sonido enmascarante continúa enmascarando sonidos másdébiles antes y después de la duración real del sonido enmascarante (figura 7)[TEKTRONIX97].

15 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 16: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

Figura 7: Enmascaramiento temporal.

COMPRESIÓNLa compresión de datos reduce la cantidad de bytes necesarios para

representar la información. Es decir, reduce la cantidad de memoria necesariapara almacenar la información. Del mismo modo, también reduce la cantidad detiempo requerido para transmitir información a una tasa de transmisión dada.

Como ya mencionamos, podemos clasificar los métodos de compresión en: Compresión sin pérdida. Compresión con pérdida.

Como los métodos de compresión con pérdida son muy dependientes del áreaen cuestión —audio, imágenes, video, etc.—, en esta sección solamente nosocuparemos de la compresión sin pérdida.

Hay una gran cantidad de aplicaciones en las que no es posible realizar unacompresión con pérdida debido a que la mínima pérdida de la información originalsería intolerable —archivos de texto, ejecutables, etc. En estos casos la únicaalternativa es la compresión sin pérdida. Pero de todos modos, en los casos enque sí se puede aplicar compresión con pérdida, la mayoría de las veces tambiénse realiza (como último paso) una compresión sin pérdida. El hecho de aplicar unacompresión sin pérdida luego de haber realizado toda la compresión con pérdidacomprime aún mas los datos, sin mas efectos adversos que un incremento en eltiempo de los procesos de compresión-descompresión.

Existen muchas técnicas de compresión sin pérdida, entre las más importantesse encuentran la codificación de Huffman y la codificación aritmética. Estastécnicas se basan en la codificación entrópica. La entropía es la cantidad deinformación presente en los datos, y un codificador de entropía codifica unconjunto de símbolos con la menor cantidad de bits necesarios pararepresentarlos.

Codificación de HuffmanLa codificación de Huffman es un método de codificación entrópica de longitud

variable que asocia un valor específico con un único código. La codificación de

16 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 17: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

Huffman se conoce como una codificación de prefijo debido a que ningún códigoes prefijo de otro más largo. Esta propiedad hace que un código Huffman seadecodificable unívocamente.

La codificación de Huffman es general, es por esto que la compresión debepensarse sobre símbolos abstractos, siendo por ejemplo las letras del alfabeto uncaso particular. En un archivo de texto simple, cada caracter está representado porocho bits. Esta representación no es óptima si tenemos en cuenta queestadísticamente algunos caracteres están presentes mucho más frecuentementeque otros. La codificación de Huffman ordena los símbolos más frecuentes ensecuencias cortas de bits, y por lo tanto los símbolos menos frecuentes estaránrepresentados por secuencias más largas.

Las frecuencias relativas de todos los símbolos pueden ser conocidas —pormedio de estudios estadísticos— o pueden calcularse en cada caso en particular.Por ejemplo, existen tablas que indican los valores probabilísticos de ocurrencia decada letra en un texto —cada idioma posee su propia tabla. Entonces, paracomprimir un texto se puede utilizar una codificación de Huffman siguiendo la tablacorrespondiente —que no necesariamente será cien por cien exacta— o calcular laprobabilidad real de cada símbolo que se encuentra en ese texto en particular.Cada alternativa tiene sus ventajas y sus desventajas. El hecho de utilizar unatabla facilita mucho la implementación del compresor —el descompresor utiliza lamisma tabla para llevar a cabo la tarea de descompresión—, pues de lo contrariohabría que contar las apariciones de cada caracter dentro del texto. Por estamisma razón también puede ser —si el texto es extenso— que el compresorresulte más eficiente. Por otro lado, si se calcula la probabilidad exacta deaparición de cada símbolo, intuitivamente podríamos pensar que el texto acabaríaocupando menos datos debido a que la representación de la informaciónterminaría siendo la óptima. Si bien esto es cierto, no debemos olvidarnos quejunto al texto comprimido debe estar también la tabla con la cual se llevó a cabo lacompresión, de lo contrario el proceso no sería reversible. Por lo tanto veremosuna ganancia al calcular las probabilidades reales sólo en aquellos textos tal quesu tamaño sea considerable respecto de lo que ocupa su tabla correspondiente—a menos que la tabla estándar se ajuste muy bien al texto.

Generalmente las tablas no indican los valores probabilísticos, sino quedirectamente muestran el código correspondiente. En el caso en que sólo sedisponga de las probabilidades —ya sea porque es la única información que brindala tabla o porque se desea utilizar una tabla ad hoc— habrá que construir una tablaque indique el código que representa a cada símbolo. A continuación veremos unejemplo de cómo calcular las probabilidades reales de un texto y otro de cómoconstruir una tabla de símbolos con sus respectivos códigos.

Supongamos el siguiente texto: "este es un texto de ejemplo". Primerodeterminaremos el alfabeto, luego contaremos la cantidad de apariciones dentrodel texto. La longitud de nuestro texto es de 27 caracteres, por lo tanto laprobabilidad de cada símbolo será la cantidad de apariciones dividido 27.

17 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 18: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

Símbolo Apariciones Probabilidad’d’ 1 1

27

’e’ 7 727

’j’ 1 127

’l’ 1 127

’m’ 1 127

’n’ 1 127

’o’ 2 227

’p’ 1 127

’s’ 2 227

’t’ 3 327

’u’ 1 127

’x’ 1 127

’ ’ (espacio) 5 527

Tabla 1: Cálculo de probabilidades.

Ahora veremos cómo construir una tabla de símbolos con sus respectivoscódigos, teniendo como dato sus probabilidades. Supongamos la siguiente tabla[LIOU2001]:

Símbolo Probabilidada0 0.4a1 0.3a2 0.2a3 0.04a4 0.04a5 0.02

Tabla 2: Probabilidades para construir una tabla de códigos Huffman.

El procedimiento es el siguiente:

Repetir mientras haya mas de una probabilidadOrdenar las probabilidades en orden descendiente.Combinar las dos probabilidades más pequeñas.Asignarle "0" al miembro superior y "1" al miembro inferior de cada par (o viceversa).

18 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 19: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

Seguir el camino de cada símbolo hasta llegar al final (probabilidad 1) registrando los unos yceros.

Asignarle a cada símbolo la secuencia registrada, de derecha a izquierda.

Gráficamente (figura 8):

Figura 8: Codificación de Huffman.

Finalmente la tabla es la siguiente:Símbolo Código (Codeword) Longitud

a0 1 1a1 00 2a2 010 3a3 0111 4a4 01100 5a5 01101 5

Tabla 3: Tabla de símbolos con sus respectivos códigos Huffman.

Codificación aritméticaLa codificación aritmética se basa en secuencias de símbolos. En vez de

asignarle un código único a cada símbolo, esta técnica genera una serie devalores que corresponden con una única secuencia de datos. Para producir lacodificación se utiliza la probabilidad de ocurrencia de los símbolos individuales.

Esta técnica representa cada símbolo como un segmento de la recta real entre0 y 1. La codificación de una secuencia de símbolos se logra seleccionando unsegmento de reales y transmitiendo un número específico dentro de esesegmento.

Veamos un ejemplo para poder comprender mejor el método [LIOU2001].Consideremos los siguientes símbolos con sus respectivas probabilidades deocurrencia:

19 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 20: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

Símbolo ProbabilidadA 0.50C 0.30G 0.15T 0.5

Tabla 4: Probabilidades de codificación aritmética.

Gráficamente (figura 9) se explica cómo codificar la secuencia de símbolos"CAT".

Figura 9: Codificación aritmética.

Cualquier número en el rango de 0.6425 a 0.65 representa la cadena "CAT".La codificación aritmética puede comprimir desde un 5% hasta un 10% mas

que la codificación de Huffman. Lamentablemente no sólo es más compleja decomprender y de implementar, sino que además está sujeta a patentespertenecientes a IBM, AT&T y Mitsubishi.

COMPRESIÓN DE IMÁGENESLa mayoría de las imágenes poseen una característica en común: los pixeles

cercanos están correlacionados, y por lo tanto contienen información redundante.Entonces es primordial encontrar la representación menos correlacionada de laimagen. En las imágenes tenemos dos tipos de redundancia:

Redundancia espacial (o correlación entre pixeles cercanos). Redundancia espectral (o correlación entre los distintos planos decolor o bandas espectrales).

Las investigaciones en compresión de imágenes buscan reducir el número debits necesarios para representar una imagen por medio de la reducción de laredundancia espacial y espectral tanto como sea posible. Además de reducir la

20 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 21: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

redundancia, en una imagen también es muy útil reducir la irrelevancia. Con estoúltimo nos referimos a omitir información que de todos modos ninguna personapodrá distinguir (percepción).

Compresión de imágenes con pérdidaTodos los métodos de compresión de imágenes con pérdidas involucran la

eliminación de información de la imagen original. La gran ventaja de estosesquemas es que pueden comprimir una imagen con un factor de compresiónmucho más alto que los esquemas de compresión sin pérdidas. Este factor decompresión puede ser de 10:1 sin degradaciones visuales notables, pero si setoleran algunas degradaciones visuales se pueden lograr factores de compresiónde hasta 100:1.

Existen en la actualidad muchos métodos de compresión de imágenes conpérdidas. A continuación analizaremos los más utilizados.

Submuestreo (subsampling)La forma más sencilla de reducir la cantidad de datos que ocupa una imagen

es directamente descartando pixeles. Si por ejemplo, eliminamos con regularidadun pixel y el siguiente no, estaríamos comprimiendo la imagen a la mitad. Unposible proceso de descompresión podría ser simplemente mediante replicaciónde pixeles. Otra técnica más refinada podría ser realizar una interpolación de lospixeles disponibles para obtener aquellos que habían sido descartados. Es muycomún encontrar en las imágenes que los pixeles adyacentes esténcorrelacionados. Si este fuera el caso, la imagen reconstruida no será muydiferente a la original.

Si bien la técnica anteriormente mencionada es válida, es un tanto agresiva ypuede producir degradaciones visuales intolerables para determinadasaplicaciones. Es sabido que el ojo humano es más sensible a la luminancia (brillo)que a la crominancia (color) —debido a que el ojo humano posee muchos masbastones que conos. Es por esto que los cambios graduales de color se ven comoun único color, y esto se puede utilizar para nuestro propósito.

Generalmente a las imágenes se las representa con el espacio de color RGB,que es una tripla que define el color de cada pixel por medio de la combinación delos tres colores primarios —rojo, verde y azul. En lugar de representar a unaimagen por medio de la adición de los colores primarios, podemos realizar unaconversión de espacios de color para poder representarla por medio de lossiguientes tres canales:

Y: Luminancia (brillo). Cb: Crominancia (azul). Cr: Crominancia (roja).

En las figuras 10, 11 y 12 se puede ver una imagen en color junto con susrespectivos canales RGB y YCbCr.

21 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 22: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

Figura 10: Imagen en color.

Figura 11: Canales RGB.

Figura 12: Canales YCbCr.

Dada una imagen representada con el espacio de color RGB, podemosconvertirlo al espacio de color YCbCr mediante las siguientes expresiones:

Y 0.299R 0.587G 0.114B [1.1]

Cb −0.1687R − 0.3313G 0.5B [1.2]

Cr 0.5R − 0.4187G − 0.0813B [1.3]Cabe destacar que esta conversión es levemente diferente a la utilizada para la

codificación de video [JACK2001]. Además hay que tener en cuenta que loscálculos se realizarán utilizando una precisión determinada. Debido a esto seincurrirá en pequeños errores de redondeo que llevarán a una transformación conpérdida, independientemente del método de muestreo que se utilice.

Una vez que hemos realizado la conversión al espacio de color YCbCr

22 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 23: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

podemos comprimir la imagen llevando a cabo un submuestreo de los canales Cby Cr, dejando intacto el canal Y —debido a que el ojo humano es menos sensible alos canales cromáticos que al del brillo. Casi ningún ojo humano es capaz dedetectar esto, y el tamaño del archivo se verá reducido en un porcentaje muy alto—dependiendo del modo en que se realice el muestreo. Existen estándares queaconsejan sobre el modo de realizar el muestreo [JACK2001].

Este paso produce que sucesivas compresiones se vean cada vez un pocopeor, pues este paso no es reversible. Además, las fotos naturales son máspropensas a contener cambios graduales de color que las imágenes producidaspor los humanos. Es por esto que no se recomienda utilizar esta técnica sobreimágenes que puedan incluir textos o bloques grandes de un único color.

Formatos de muestreo de YCbCrLa figura 13 ilustra la posición de las muestras de YCbCr para el formato 4:4:4.

Cada muestra posee un valor de Y, de Cb y de Cr. Cada componente de lamuestra es generalmente de 8 bits, por lo tanto cada muestra será de 24 bits.

La figura 14 ilustra la posición de las muestras de YCbCr para el formato 4:2:2.Por cada dos muestras horizontales de la componente Y se toma una de Cb y deCr. Cada componente de la muestra es generalmente de 8 bits, por lo tanto cadamuestra será de 16 bits.

La figura 15 ilustra la posición de las muestras de YCbCr para el formato 4:1:1(también conocido como YUV12). Por cada cuatro muestras horizontales de lacomponente Y se toma una de Cb y de Cr. Cada componente de la muestra esgeneralmente de 8 bits, por lo tanto cada muestra será de 12 bits.

En lugar de la única reducción horizontal de 2:1 de las componentes Cb y Crutilizada en el formato 4:2:2, el formato 4:2:0 implementa una reducción de 2:1 enlas componentes Cb y Cr tanto horizontalmente como verticalmente. Existen cincoformatos de muestreo 4:2:0 distintos; en la figura 16 se ilustran dos de ellos.

Para mostrar datos que se encuentren en el formato 4:2:2 o 4:1:1 o 4:2:0,primero es necesario realizar una conversión al formato 4:4:4, utilizandointerpolación para generar las muestras faltantes de Cb y Cr.

Figura 13: Formato 4:4:4. Figura 14: Formato 4:2:2.Figura 15: Formato 4:1:1.

23 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 24: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

Figura 16: Formatos 4:2:0.

Transformada discreta del coseno (DCT)Existen muchas transformaciones matemáticas que transforman un conjunto de

datos de un sistema de medición a otro. En algunos casos la representación de losdatos en el nuevo sistema posee propiedades que facilitan la compresión de losmismos. La transformada discreta del coseno (Discrete Cosine Transform - DCTde aquí en mas) es una de las transformaciones más importantes en el área de lacompresión de imágenes digitales.

La DCT transforma un bloque de datos en un nuevo conjunto de valores. LaDCT inversa invierte este proceso, recuperando los valores originales de los datos.En la teoría, en el proceso de transformación y antitransformación no se pierdenada de información. Sin embargo, en la práctica, existe una pequeña pérdida deinformación debido a los dos siguientes factores:

Los valores del coseno no se pueden calcular exactos. Los resultados finales de los cálculos se ven afectados por los erroresde redondeo debido a la limitada precisión en la representación de losdatos.

Las diferencias entre los datos recuperados y los originales son generalmentepequeñas, pero depende del método utilizado para calcular la DCT.

La DCT se puede aplicar a bloques de datos de cualquier tamaño, pero lo másusual es utilizar bloques de 8 8. Esto se debe a que, desde el punto de vista de laimplementación, un bloque de 8 8 no demanda grandes requisitos de memoria.Además, la complejidad algorítmica para tales bloques es asequible en la mayoríade las plataformas. Por otro lado, desde el punto de vista del factor de compresión,si utilizamos bloques mayores no obtendremos grandes mejoras.

La definición de la DCT está dada por:

DCTu,v 2nm

CuCvm−1

y0

∑n−1

x0

∑ pixelx,ycos 2x 1u2n cos 2y 1v

2m [2.1]

La definición de la DCT inversa está dada por:

pixelx,y 2nm

m−1

y0

∑n−1

x0

∑ CuCvDCTu,vcos 2x 1u2n cos 2y 1v

2m [2.2]

Donde, para ambos casos:

24 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 25: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

u 0, . . . ,n

v 0, . . . ,m

C 12

, 0

1, ≠ 0

La DCT puede implementarse siguiendo su definición, pero existen métodosincrementales más veloces [RY1990], [GHANBARI2003].

Puede no resultar intuitivo de su definición, pero cada valor calculado en elproceso de transformación involucra una matriz de transformación (función base)distinta —de n m componentes. Para el caso más común de bloques de 8 8, secuenta con 64 matrices de transformación, cada una de 8 8.

Cada función base representa una combinación de frecuencias de la forma deonda del coseno en dos dimensiones. La idea es determinar cuánto de cadapatrón de frecuencia hay en el bloque de datos a transformar. Esto se lograrealizando el producto interno de la entrada y su función base correspondiente. Esdecir, cada término de una función base específica se multiplica por su términocorrespondiente en el bloque de datos. Luego, todos estos productos se sumanpara formar un único valor. Este único valor representa la cantidad de la frecuenciacontenida en el bloque de datos. Básicamente, la DCT cambia los valoresoriginales que representan intensidades de color en valores que representanfrecuencias del coseno. En la figura 17 se observan las funciones base canónicasy base DCT para un bloque de datos de 8 8.

Figura 17: Funciones base canónicas y base DCT.

Algunos ejemplos nos ayudarán a entender estos conceptos. En los siguientesejemplos se transformarán bloques de datos de 8 8 utilizando unaimplementación sencilla —la utilizada en el caso de estudio COMPRESSLIB— de

25 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 26: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

la DCT. Los valores de los datos originales representan intensidades de color en elrango de 0 a 255. Cabe destacar que la DCT produce mejores valores para lacompresión si los datos originales están centrados en 0, por lo tanto, previo a latransformación propiamente dicha se le resta 128 a cada componente —paraobtener valores en el rango de -128 a 127. Asimismo, luego de realizar laantitransformación se debe sumar 128 a cada componente para recuperar losvalores originales.

Primero consideremos un bloque de datos que representa una región toda delmismo color y su respectiva transformada (figura 18). En el bloque de datos no hayfrecuencias —pues es todo del mismo color—, y consecuentemente todos lostérminos de la transformada excepto el superior izquierdo (DCT0,0), son cero. Siobservamos la matriz superior izquierda de las funciones base DCT en la figura 17,veremos que es una superficie uniforme (todos sus valores son iguales). Estafunción base es especial debido a que representa el caso particular de frecuenciacero. Al término DCT0,0 se lo denomina coeficiente DC. El nombre DC (DirectCurrent) proviene del área de la electricidad y significa corriente continua —lacorriente continua no varía en el tiempo, por lo tanto no tiene frecuencia. Al restode los términos se los denomina coeficientes AC (Alternating Current) y significacorriente alterna. A los datos transformados de la figura 18 se los puede comprimiralmacenando solamente el coeficiente DC y algún código especial para indicar queel resto de los términos son cero.

Figura 18: Transformación de un bloque uniforme.

Consideremos ahora otro ejemplo. En la figura 19 se puede observar un bloquede datos que representa una superficie donde el color cambia suavemente. Nóteseque todos los valores no nulos resultantes de la transformación se encuentran enla esquina superior izquierda (y a lo largo de la primera fila y la primera columna).Estos términos no nulos corresponden a las frecuencias bajas de los datosoriginales. Estos datos pueden comprimirse —mediante algún recorrido específicode la matriz— intentando almacenar solamente los términos no nulos, de modoanálogo al ejemplo anterior.

26 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 27: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

Figura 19: Transformación de un bloque en degrade.

Analizaremos un último ejemplo. Los datos originales de la figura 20 sonaleatorios, esto lleva a que en los datos transformados no haya casi ningún valornulo, y parecieran no estar mejorados para poder comprimirlos. La clave es que hacambiado la importancia de cada valor. Examinemos nuevamente las funcionesbase DCT de la figura 17: las funciones base que se encuentran en la esquinasuperior izquierda capturan frecuencias bajas, mientras que las que se encuentranen la esquina inferior derecha capturan frecuencias más altas. Las frecuenciasmás altas capturan el "ruido" y el detalle fino dentro de un bloque de datos,mientras que las frecuencias más bajas capturan la "esencia" del bloque de datos—debido a la respuesta logarítmica del ojo; la percepción humana del ruido en lasimágenes depende de la frecuencia espacial. En algunos casos, el ruido contenidoen un bloque de datos puede ser eliminado completamente sin degradacionesvisuales. La cantidad de ruido que eliminemos al comprimir un bloque de datosdeterminará la calidad de la imagen. Más específicamente, el conjunto decoeficientes obtenido debe ser cuantificado. Es decir, cada coeficiente es divididopor un valor almacenado en una tabla —tabla de cuantificación— de modo tal dereducir su valor numérico. Estos nuevos valores se deben redondear —otruncar—, y en el caso de obtener un cero, sencillamente se estaría descartandoesa información. Si el nuevo valor no resultara ser cero, de todos modosestaríamos obteniendo una mejora, ya que cuanto menor sea el valor, menor serála cantidad de bits que serán necesarios para representarlo. El factor decompresión obtenido utilizando este método depende de los valores de loselementos de la tabla de cuantificación. Cuantos mas elementos en la tablaposean valores grandes, mayor será la cantidad de coeficientes que quedaránnulos, y por lo tanto mayor será el factor de compresión. Por supuesto que estoincrementará la pérdida de información, y por lo tanto la calidad de la imagen serámenor. Para reconstruir la imagen se debe revertir todo el proceso.

27 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 28: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

Figura 20: Transformación de un bloque aleatorio.

WaveletComo ya mencionamos, las variaciones suaves en el color se corresponden

con variaciones de baja frecuencia y las variaciones fuertes de color secorresponden con variaciones de alta frecuencia. La transformación del espacio deintensidades de color al espacio frecuencial se puede llevar a cabo de muchosmodos. Uno de los posibles es la anteriormente presentada DCT. Otra de lasposibles técnicas es la descomposición de una imagen por medio de laTransformada Discreta Wavelet o Discrete Wavelet Transform (DWT), la cualanalizaremos brevemente a continuación.

La forma general de una transformada wavelet unidimensional (1-D) se puedeapreciar en la figura 21. Aquí una señal pasa a través de un filtro pasa bajos y deotro pasa altos, l y h (de lowpass y highpass, en inglés) respectivamente, y luegose submuestrea en un factor de dos —esto causa un proceso con pérdida—,logrando una transformada de un nivel. Se pueden realizar múltiples nivelesrepitiendo los procesos de filtrado y eliminación (submuestreo), únicamente sobrela rama del filtro pasa bajos. Este proceso se lleva a cabo para un número K finitode niveles, obteniendo los coeficientes wavelet: di1n, i ∈ 1, . . . ,K y dK0n.Cuando no se necesita tener conocimiento de la escala o de la frecuencia, elconjunto entero de coeficientes wavelet se expresa como wn.

Figura 21: Descomposición de una wavelet de 1-D, de K niveles.

La transformada wavelet de 1-D puede extenderse a una transformada waveletbidimensional (2-D) utilizando filtros wavelet separables. Con los filtros separables,la transformada 2-D puede calcularse aplicando una transformada 1-D a cada fila

28 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 29: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

de los datos de entrada, y luego aplicándola a cada columna de los datos deentrada. Utilizando la imagen original de la figura 22 [USEVITCH2001], la figura 23muestra un ejemplo de transformada wavelet 2-D de un nivel (K1), con sucorrespondiente esquema de descomposición en la figura 24. El mismo ejemplo,pero para un nivel de 3, se ve en las figuras 25 y 26.

Figura 22: Imagen original.

Figura 23: Wavelet de un nivel. Figura 24: Descomposición de 1 nivel.

29 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 30: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

Figura 25: wavelet de 3 niveles. Figura 26: Descomposición de 3 niveles.

Así como la transformada wavelet se utiliza para separar una imagen en variasclases de importancia, la antitransformada se utiliza para reensamblar las distintasclases de datos, y de este modo poder reconstruir la imagen. Aquí también seutiliza un filtro pasa bajos y otro pasa altos, pero el filtrado se realiza en formaopuesta. Es decir, se comienza desde el nivel más alto, aplicando primero losfiltros por columna y luego por fila, hasta llegar al primer nivel.

La codificación basada en wavelet ha mejorado considerablemente durante losúltimos años. Un gran progreso fue la introducción de la codificación EZW(embedded zero-tree), de Shapiro. Este algoritmo es capaz de aprovechar laspropiedades de multiresolución de la transformada wavelet y es muy eficiente.

Formato de imagen JPEGEn la actualidad existe una cantidad muy grande de formatos de imagen. Cada

uno con sus respectivos puntos fuertes y débiles, según sea la aplicación para lacual fueron diseñados —calidad, razón de compresión, eficiencia, costos(patentes, licencias, etc.), estándares, etc.

A mediados de 1980, miembros de la ITU —International TelecommunicationUnion (Unión Internacional de Telecomunicaciones)— y de la ISO —InternationalStandards Organisation (Organización Internacional de Estándares)— seasociaron para llevar a cabo un estándar para la compresión de imágenes enescala de grises y en colores. Este estándar se llamó JPEG: Joint PhotographicExperts Group (Grupo de Expertos Fotográficos Asociados).

Unos años más tarde, el comité de JPEG decide desarrollar otro estándar parala compresión de imágenes, llamado JPEG2000. Esto fue en respuesta a lasdemandas cada vez mayores de multimedia, internet y una gran variedad deaplicaciones de imágenes digitales. Sin embargo, en términos de la metodologíade compresión, estos dos estándares son muy distintos —mientras que el JPEGoriginal está basado en la DCT, el JPEG2000 está basado en la DWT.

30 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 31: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

Las imágenes JPEG pueden ser de cualquier resolución y espacio de color,tanto con algoritmos con pérdida como sin pérdida. El estándar JPEG es depropósito general, y posee muchas características y posibilidades. Por ejemplo,por medio del ajuste de parámetros, se puede tomar una decisión de compromisoentre la calidad de la imagen y su factor de compresión. El rango de compresiónes muy amplio: desde aproximadamente 100:1 —con degradaciones visualesimportantes— hasta aproximadamente 3:1 —indistinguible de la imagen original.Generalmente, el umbral del factor de compresión para percibir diferencias entre laimagen original y la reconstruida, se encuentra dentro del rango de 10:1 a 20:1—dependiendo de la imagen original.

Si bien el formato JPEG se desarrolló con la intención de comprimir imágenes,ha resultado satisfactorio para la compresión de video, principalmente si se tratade video en tiempo real —pues es más eficiente en términos computacionales queotras soluciones, como el formato MPEG. También resultó útil en la tarea deedición. Sin embargo, el factor de compresión que logra no es muy alto, ya que noaprovecha la redundancia temporal entre cuadros. Una vez que ha finalizado elproceso de edición, el video puede convertirse a un formato más apropiado paraobtener una compresión mayor.

El formato JPEG define cuatro modos de operación distintos: sin pérdida,secuencial, progresivo y jerárquico. La codificación sin pérdida se basa en unalgoritmo espacial, en el dominio de los pixeles. Se lleva a cabo una predicción delvalor de una muestra, teniendo en cuenta hasta tres muestras vecinas. Luego, alvalor real se le resta el valor de la predicción y la diferencia se codifica sin pérdidautilizando codificación de Huffman o aritmética. La compresión sin pérdida logra unfactor de compresión de aproximadamente 2:1.

Los otros tres modos de compresión se basan en la DCT. El esquemasecuencial puede utilizar tanto codificación de Huffman (la opción por defecto deJPEG - baseline sequential scheme) como codificación aritmética. Cuando laimagen se reconstruye, cada fila (bloques de 8 8 pixeles) se decodifica —deizquierda a derecha y de arriba hacia abajo— y se presenta secuencialmente contoda su exactitud y resolución.

El esquema progresivo presenta la imagen en múltiples pasos. Cuando laimagen se decodifica, inmediatamente se obtiene una mera aproximación de laimagen completa. Progresivamente se va mejorando la calidad, hasta lograr suexactitud total. Esto es ideal para aplicaciones de búsqueda en bases de datos deimágenes o exploración de sitios web. Se puede utilizar selección espectral,aproximación sucesiva, o ambas. La selección espectral codifica los coeficientesde baja frecuencia de la DCT al principio (para obtener la imagen rápidamente),seguido de los coeficientes de alta frecuencia (para añadir los detalles). Laaproximación sucesiva codifica los bits más significativos de los coeficientes de laDCT, seguido de los bits menos significativos.

Por último, el modo jerárquico representa a una imagen en múltiplesresoluciones. Por ejemplo, supongamos que existen tres versiones de una imagen:512 521, 1024 1024 y 2048 2048. Las imágenes con mejor resolución se

31 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 32: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

codifican como diferencias de la siguiente imagen más chica, requiriendo menosbits de los que necesitaría si se almacenara individualmente. Por supuesto, elnúmero total de bits es mayor al requerido para almacenar solamente la imagen demayor resolución. Cabe destacar que las imágenes individuales en una secuenciajerárquica pueden ser codificadas progresivamente.

Esquema secuencial (baseline)Aquí estudiaremos las distintas etapas del pipeline de

compresión-descompresión del esquema secuencial. Primero comentaremosbrevemente cada uno de los pasos, y luego se profundizará en aquellos que lorequieran. Las técnicas que ya hayan sido analizadas con anterioridad seránmencionadas superficialmente. En la figura 27 se puede apreciar un diagramaesquemático de un compresor.

Figura 27: Diagrama esquemático de un compresor (secuencial) JPEG.

Si la imagen que se desea comprimir es en colores, entonces el primer paso esconvertir esta imagen al espacio de colores YCbCr —el estándar JPEG no defineun espacio de color específico para la imagen de entrada. Luego, es posiblerealizar algún submuestreo de los canales Cb y Cr. El estándar JPEG permitecualquiera de los formatos de muestreo de YCbCr; para la correctadescompresión, en el encabezado se almacena información del factor de muestreovertical y horizontal. Luego, cada plano del espacio de color se discretiza en

32 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 33: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

bloques de 8 8 pixeles —en caso de tratarse de una imagen en escala de grises,esta imagen se discretiza sin ningún preprocesamiento.

El siguiente paso es realizar un corrimiento de los valores de las componentesde cada bloque, pues la DCT produce mejores valores para la compresión si losdatos originales están centrados en 0. Como el rango original es de 0 a 255, alrestarle 128 el nuevo rango será de -128 a 127.

A continuación, a cada bloque se le aplica la DCT. Luego, cada bloque secuantifica teniendo en cuenta una tabla de cuantificación. Una vez cuantificado, serecorre el bloque en zigzag, de modo tal de acumular la mayor cantidad posible deceros al final del recorrido. Después, los coeficientes DC de los bloques secodifican mediante DPCM; los coeficientes AC se codifican mediante RLC. Luegode esta primer codificación, cada conjunto se codifica independientemente porsegunda vez, en este caso mediante un codificador entrópico —codificación deHuffman, pues es la única posibilidad en el esquema secuencial baseline. Una vezterminados estos procesos, se cuenta con toda la información comprimida, listapara almacenar o transmitir.

Para descomprimir una imagen, simplemente se invierte todo el proceso. Seutilizan decodificadores entrópicos, un decodificador RLC, un decodificador DPCM,se reconstruyen los bloques, se descuantifican, se antitransforman y finalmente seobtiene la imagen recuperada.

CuantificaciónEn este proceso se reduce la precisión de los coeficientes, consecuentemente

el número de bits necesarios para representarlos será menor. Esto se lleva a cabodividiendo cada valor en el bloque por un único divisor (entre 1 y 256) que estáalmacenado en una tabla —tabla de cuantificación. Debido a la percepciónhumana, generalmente las frecuencias más altas se dividen por factores mayores,por lo tanto muchos coeficientes finalizan siendo cero. Matemáticamente lacuantificación es una operación de división, sin embargo si los factores decuantificación se restringen a potencias de dos, esto se puede realizar muyeficientemente realizando corrimientos.

La cantidad de precisión que se puede reducir sin involucrar pérdidas visualesconsiderables es dependiente de los datos. Es por esto que el estándar JPEG noimpone ninguna tabla de cuantificación, sino que lo deja abierto para que cadaaplicación defina la más conveniente para sus propósitos. No obstante, existentablas de propósito general. Es usual que haya una tabla para la luminancia y otra—con coeficientes mayores— para las crominancias. Además, al comprimirutilizando estas tablas estándar, se puede almacenar en el encabezado unparámetro de escalamiento. Esto le brinda flexibilidad a las tablas, puesdependiendo del factor de escalamiento se podrá incrementar o disminuir lacalidad de la imagen —inversamente proporcional al factor de compresión. En lafigura 28 se muestra una tabla de cuantificación para luminancia y en la 29 unapara crominancias, ambas de propósito general [GHANBARI2003].

33 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 34: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

El proceso de decodificación restaura las magnitudes de los términos, pero porsupuesto que no la precisión original. Esto se lleva a cabo invirtiendo la operación,es decir multiplicando por el mismo número que anteriormente se había dividido.Por lo tanto, un conjunto de datos sólo podrá ser decodificado satisfactoriamente siel codificador y el decodificador utilizan las mismas tablas. Las tablas pueden estarincluidas en el conjunto de datos comprimidos —tablas ad hoc, almacenadas en elencabezado— o pueden ser tablas predefinidas —almacenadas tanto en elcompresor como en el descompresor. El análisis de cuál de las dos alternativas esmás conveniente es análogo al realizado con las tablas de probabilidad en lacodificación de Huffman. Es posible que al utilizar tablas específicas se logre unmejor desempeño, pero hay que tener en cuenta que estas tablas deberán formarparte de la imagen comprimida. Si la imagen es muy grande con respecto al costoasociado de almacenar las tablas, probablemente convenga utilizar esta opción.Por otro lado, si la imagen a comprimir es muy pequeña, es posible que el hechode almacenar las tablas en la misma imagen comprimida represente un porcentajeconsiderable del tamaño total, con lo cual sería conveniente utilizar las tablasestándar. Otros factores que afectan son los de la eficiencia y complejidad deimplementación. Es muy probable que el factor de más relevancia a la hora dedecidir cuál decisión tomar sea el de la eficiencia. Es cierto que el objetivoprimordial de la compresión de imágenes es reducir la cantidad de datos que lasrepresentan, pero en muy pocas ocasiones el hecho de guardar las tablas decuantificación representará un costo importante. Observemos que una tabla decuantificación es una matriz de 8 8 componentes, y en la mayoría de lasaplicaciones se trabaja con imágenes de varios órdenes de magnitud mayor a 8 8pixeles.

Figura 28: Tabla de cuantificación para Y.

34 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 35: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

Figura 29: Tabla de cuantificación para Cb y Cr.

Recorrido en zigzagLuego de la cuantificación, es muy probable que muchos términos que se

encuentran en la esquina inferior derecha se redondeen —o trunquen— a cero.Será más eficiente almacenar la cantidad de ceros que almacenarlosindividualmente. Mas aún, cuando sólo queden elementos nulos por codificar, sepodrá almacenar un símbolo que indique esta situación.

El recorrido en zigzag es una técnica que reagrupa los términos de los bloquesen un arreglo lineal, de modo tal de incrementar la probabilidad de que loselementos no nulos se encuentren al principio, agrupando los ceros al final. Estose logra recorriendo los bloques en zigzag a 45 grados, comenzando por elextremo superior derecho y finalizando en el extremo inferior izquierdo, como semuestra en la figura 30.

Figura 30: Recorrido en zigzag.

Codificación RLCUna vez que se dispone del arreglo resultante del recorrido en zigzag, se lo

codifica con RLC (Run Length Coding - codificación de longitud de cadenas), enseries de pares (longitud, valor). La componente longitud indica la cantidad decoeficientes nulos y la componente valor indica el siguiente coeficiente no nulo en

35 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 36: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

el arreglo. Cabe destacar que la componente longitud utilizará sólo cuatro bits, porlo tanto su rango será de 0 a 15. Por lo tanto, si nos encontráramos con unasecuencia de, por ejemplo, 20 ceros y a continuación un 8, esta cadena serepresentaría como: (15,0),(4,8). Es decir, el primer par indica que hay 15 ceros ya continuación un cero —en total 16 ceros—; el primer término del segundo pardebe completar los 20 ceros, por lo tanto es 4, y finalmente le sigue el 8. Cuandose detecta que el bloque lo termina una cadena de ceros, se codifica como (0,0).Como muchas veces los arreglos quedan con largas cadenas de cerosconsecutivos, esta codificación elimina mucha redundancia.

Veamos un ejemplo completo, considerando el siguiente bloque:

-800 -73 0 -7 0 -2 0 -1-73 0 0 0 0 0 0 00 0 0 0 0 0 0 0-7 0 0 0 0 0 0 00 0 0 0 0 0 0 0-2 0 0 0 0 0 0 00 0 0 0 0 0 0 0-1 0 0 0 0 0 0 0

Recorrido en zigzag:-800,-73,-73,0,0,0,-7,0,0,-7,0,0,0,0,0,-2,0,0,0,0,-2,0,0,0,0,0,0,0,-1,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

RLC:(0,-800),(0,-73),(0,-73),(3,-7),(2,-7),(5,-2),(4,-2),(7,-1),(6,-1),(0,0)

Codificación DPCMLa codificación DPCM (Differential Pulse Code Molulation - codificación

modulada de pulsos diferenciales) es un caso particular de la codificaciónpredictiva. Se basa en la información ya disponible para predecir valores futuros, ylo que se codifica es la diferencia entre el valor real y el de la predicción.

La idea es restarle al coeficiente DC actual el coeficiente DC anterior, yalmacenar ese valor —excepto que se trate del primer coeficiente DC de laimagen, en cuyo caso se almacena el coeficiente DC original. A este valor lollamaremos DC Diferencial, o simplemente Dif. Este tratamiento por separado delos coeficientes AC se realiza para explotar la correlación entre los valores DC delos bloques adyacentes.

Por ejemplo, supongamos que los cuatro primeros bloques —yacuantificados— poseen los siguientes coeficientes DC: 733, 708, 737 y 677. Lacodificación DPCM se observa en la figura 31.

36 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 37: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

Figura 31: Codificación DPCM.

Para decodificar una serie de coeficientes se realiza lo siguiente. Al coeficientecodificado se le suma el coeficiente que se ha decodificado anteriormente —amenos que sea el primer coeficiente por decodificar, en cuyo caso no se le sumanada. En la figura 31 se observa la decodificación DPCM del ejemplo anterior.

Figura 32: Decodificación DPCM.

Codificación entrópicaPara reducir la cantidad de bits necesarios para representar los bloques

cuantificados, tanto los coeficientes Dif. como los AC se codifican entrópicamente.Para esto se utilizan dos esquemas básicos: el VLC (Variable Length Coding -codificación de longitud variable) y el VLI (Variable Length Integer - entero delongitud variable). El VLC codifica la cantidad de bits utilizados por cadacoeficiente, mientras que el VLI codifica los enteros signados.

Aquí se utilizarán tablas de códigos Huffman predefinidas, sin embargorecordemos que el estándar JPEG permite especificar sus propios códigos en elencabezado.

Codificación de los coeficientes DC DiferencialesLa codificación de los coeficientes Dif. se lleva cabo mediante tres pasos

[BOUMAN2001].1. Determinar la cantidad m de bits necesarios para representar Difk sin

signo. Por ejemplo, la representación binaria no signada del número −3es 11, por lo tanto m 2 bits.

37 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 38: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

2. Utilizar la tabla 5 para codificar m. A esto se lo conoce comocodificación VLC.

3. Si Difk 0, entonces tomar los m menos significativos bits. SiDifk 0, entonces tomar el complemento a dos de la representación deDifk − 1 y tomar los m menos significativos bits. A este paso se lo conocecomo codificación VLI. Se lleva a cabo para representar eficientementelos coeficientes, pues |Difk | 2m − 1.

Por ejemplo, si m 2, Difk debe pertenecer al conjunto −3,−2,2,3.Como los valores −1,0,1 no son posibles, para no desperdiciar bitspodemos remapear los valores enteros al rango 0,1,2,3.

Consideremos el caso cuando Difk −3. En este caso m 2. ComoDifk 0, hay que tomar el complemento a dos de la representación deDifk − 1, el cual es 11111100. Tomando los m menos significativos bitsnos queda 00.

Ahora si Difk 3, entonces la representación de Difk encomplemento a dos es 00000011, y tomando los m menos significativosbits nos queda 11.

En la práctica, se debe utilizar aritmética de 16 bits para elcomplemento a dos, para poder trabajar con los doce bits de los valoressignados de Difk.

El resultado de esta codificación se presenta como una cadena de bits quecontiene primero la parte VLC y luego la VLI.

Rango de los valores de DC Difk Cantidad de bits (m) Código Huffman0 0 00

-1,1 1 010-3,-2,2,3 2 011

-7...-4,4...7 3 100-15...-8,8...15 4 101

-31...-16,16...31 5 110-63...-32,32...63 6 1110

-127...-64,64...127 7 11110-255...-128,128...255 8 111110-511...-256,256...511 9 1111110

-1023...-512,512...1023 10 11111110-2047...-1024,1024...2047 11 111111110

Tabla 5: Códigos Huffman para la representación de cada valor posible de m de loscoeficientes Difk.

Codificación de los coeficientes AC

38 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 39: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

Los coeficientes AC se codifican de modo similar a los coeficientes Difk, peroteniendo en cuenta que los coeficientes AC estarán representados por pares(longitud, valor).

1. Teniendo en cuenta el par (longitud, valor), determinar el par(longitud, m), donde longitud es la cantidad de ceros que precede al valorno nulo y m es la cantidad de bits necesarios para representar lacomponente valor del primer par. A m se lo determina del mismo modoque en el paso 1 de la codificación de los coeficientes Dif. Entonces, porejemplo el par (longitud, valor) (3,-3) deberá representarse como(longitud, m) (3,2).

Al par (15,0) se lo representa con el símbolo ZRL. Al par (0,0) se lorepresenta con el símbolo EOB.

2. Mapear la componente valor en una secuencia de m bits, del mismomodo que en el paso 3 de la codificación de los coeficientes Dif. A estepaso se lo denomina codificación VLIac.

3. Utilizar una tabla de códigos Huffman para coeficientes AC[BOUMAN2001], [GHANBARI2003] para mapear el par (longitud, m) enun código Huffman, denominado VLCac.

4. Concatenar los códigos VLCac,VLIac para formar una cadena de bitsque representa la codificación del par original (longitud, valor).

Veamos un ejemplo que ilustre el procedimiento completo [BOUMAN2001].Supongamos que el bloque a codificar es el primero de la imagen y que posee lossiguientes valores:

3 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 9 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 0

Los pares que resultan del recorridoen zigzag son los siguientes:

(0,3),(15,0),(15,0),(15,0)(2,9),(0,0)

La cadena de bits que representa la codificación entrópica se construye acontinuación.

39 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 40: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

011 VLC de m 2 del coeficiente DC del par (0,3)11 VLI del coeficiente DC 311111111001 VLCac de ZRL —par (15,0)11111111001 VLCac de ZRL —par (15,0)11111111001 VLCac de ZRL —par (15,0)111111110100 VLCac de (2,4) —del par original (2,9)1001 VLIac del valor 9 —del par original (2,9)1010 VLCac de EOB —par (0,0)

Al concatenar estos códigos obtenemos la siguiente cadena de bits:’011”11”111

7F11111001’

F9’11111111

FF001”11111

3F111001”11

E711111101

FD00”1001”10

2610”??????

??Las llaves denotan los límites de los bytes, y las comillas simples denotan

grupos de bits asociados a los códigos. Es claro que la cadena de bits no siemprefinalizará al final de un byte. Si el bloque actual no es el último de la imagen,entonces la cadena de bits que producirá la codificación del próximo bloquedeberá concatenarse al final de la codificación del bloque actual. Si el bloqueactual sí es el último de la imagen, entonces lo que se realiza es completar —sifuera necesario— el último byte con ceros, para asegurar un número entero debytes. A esto se lo denomina padding de ceros.

La segunda línea representa el valor hexadecimal del byte asociado. En lasecuencia se ve el valor 0xFF, pero este valor está reservado para el encabezadoJPEG. Entonces, lo que se realiza para evitar problemas es, ante la ocurrencia deun valor 0xFF, añadir a continuación un byte con el valor 0x00. A esto se lo llamabyte stuffing. Teniendo en cuenta estos detalles, la secuencia correcta debería ser:7F F9 FF 00 3F E7 FD 26 ??. El verdadero valor del último byte será determinadoal codificar el próximo bloque.

Caso de estudio: COMPRESSLIBEl propósito de este caso de estudio es ilustrar las diferentes etapas del

pipeline de compresión-descompresión del esquema secuencial baseline delformato de imagen JPEG. Cabe aclarar que la intención de este caso de estudiono es realizar una implementación de un compresor-descompresor de imágenesJPEG. La idea es mostrar, mediante el desarrollo de un formato propio —formatoBCI (Basic Compressed Image)—, cómo se pueden llevar a la práctica los distintosconceptos teóricos. Por este motivo es que se le ha dado mayor prioridad a lafacilidad de comprensión de la implementación que a la eficiencia.

Este desarrollo consiste de lo siguiente: Una librería de compresión de imágenes (COMPRESSLIB),modularizada para poder acceder independientemente a cada una de lasetapas de compresión-descompresión.

40 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 41: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

Una aplicación que ilustra el funcionamiento interno de cada una delas etapas de compresión-descompresión —Compress demo. Una aplicación de compresión y visualización de imágenes —Imageviewer.

Librería de compresión de imágenesAquí describiremos el funcionamiento general de la librería, analizando en

detalle los temas que lo requieran. La librería COMPRESSLIB fue desarrollada enC y compilada a un archivo compressor.lib, que deberá ser incluido porcualquier aplicación que desee utilizarla. Esta librería utiliza otra librería, DevIL(Developer’s Image Library), que es una librería de imágenes Open Source basadaen la licencia LGPL. Si bien la librería DevIL soporta muchos formatos deimágenes, sólo se la utiliza para cargar imágenes que luego serán comprimidaspor COMPRESSLIB, o para almacenar imágenes en algún formato estándar. Poresta razón, las aplicaciones que utilicen la librería COMPRESSLIB, tendrán queincluir también (sólo en el caso que la aplicación requiera cargar o almacenarimágenes con formatos estándar) el archivo devil.dll.

A continuación describiremos las capacidades y limitaciones del formato BCI.Este formato permite almacenar dos tipos de imágenes distintas: Imágenes enescala de grises —8 bits por pixel— e imágenes en color —24 bits por pixel—.Para las imágenes en color, se emplea el formato de muestreo 4:2:2. Utiliza tablasde cuantificación fijas —una para el canal Y y otra para los canales Cb y Cr—,almacenadas en un archivo de texto (quantization.tbl), que deberá residir enel mismo directorio que la aplicación. Estas tablas pueden modificarsesimplemente editando el archivo y cambiando los valores de los coeficientes de lasmatrices. Además, en el encabezado se guarda un parámetro que indica el factorde calidad de la imagen, que determina el escalado de estas tablas. Para lacodificación entrópica se adoptó la codificación de Huffman, y se utiliza una tablade códigos sugerida por [BOUMAN2001] y [GHANBARI2003], almacenada en unarchivo de texto (huffman.tbl) que debe hallarse en el mismo directorio que laaplicación. Al igual que con las tablas de cuantificación, los códigos podríanmodificarse editando el archivo.

En la figura 33 puede observarse un diagrama del encabezado del formato.Posee 6 campos:

Id (Identificador) - Es el identificador del formato. Este campo es fijo, ysiempre debe contener los caracteres ’b’, ’c’, ’i’ y ’ ’(espacio) —4 datosde tipo char (en total 4 bytes). L (Largo) - Este campo almacena el largo (o ancho) de la imagen,medido en pixeles. El tipo de datos que almacena es unsigned int—entero de 32 bits (o 4 bytes) no signado. A (Alto) - Este campo almacena la altura de la imagen, medida enpixeles. El tipo de datos que almacena es unsigned int —entero de32 bits (o 4 bytes) no signado.

41 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 42: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

BPP (Bits Por Pixel) - Este campo almacena la cantidad de bits queson necesarios para representar un pixel de la imagen. Sólo puede ser 8(escala de grises) o 24 (color). Su tipo de datos es unsigned char—entero de 8 bits (o 1 byte) no signado. C (Calidad) - Este campo almacena un número real entre 0 y 1, y seutiliza para definir el escalado de las tablas de cuantificación. Controla lacalidad de la imagen, siendo 0 la peor calidad (factor de compresión másalto), 0.66 una calidad buena (sin escalado) y 1 la mejor calidad (factorde compresión más bajo). Su tipo de datos es float —real de 32 bits (o4 bytes). T (Tamaño) - Este campo almacena la cantidad de bytes que ocupanlos datos comprimidos propiamente dichos. Es el último campo delencabezado. El tipo de datos que emplea es unsigned int —enterode 32 bits (o 4 bytes) no signado.

Figura 33: Encabezado del formato BCI.

Ahora estudiaremos las distintas etapas del pipeline decompresión-descompresión. El diagrama esquemático de este pipeline puedeobservarse en la figura 34. Si bien el formato no especifica una implementacióndeterminada, nosotros explicaremos cómo lo hace COMPRESSLIB. Noexplicaremos en detalle cada una de las clases, ya que esto superaría losalcances de este trabajo, no obstante sí se analizarán los extractos de código quesean relevantes. Para acceder a la documentación de COMPRESSLIB, referirse alarchivo annotated.html, en la rutaprogramacion\proyectofinal.cvs\compressor\docs\compresslib.Dado que el funcionamiento general es análogo al del esquema secuencial delformato JPEG, comenzaremos inmediatamente a analizar cada una de las etapas.

42 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 43: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

Figura 34: Diagrama esquemático de un compresor BCI.

MuestreoEn esta etapa, para la compresión, se realiza un submuestreo de los canales

YCbCr con el formato 4:2:2.A cada canal se lo representa como si fuera una imagen individual. Los datos

están almacenados en un arreglo, por filas, de izquierda a derecha y de arribahacia abajo. Entonces, luego de hacer la conversión de espacio de color a YCbCr4:4:4, tendremos una imagen que representa al canal Y, otra que representa alcanal Cb y otra que representa al canal Cr; cada una de 8 bits por pixel y delmismo largo y alto que la original. Resta realizar el submuestreo de los canales Cby Cr. Para esto, a cada canal hay que aplicarle el siguiente algoritmo:

for ( UInt32 i 0; i size; i )

{

alias[0] dataChrominancePtr[0];

alias;

dataChrominancePtr 2;

};

size es alto original ancho original2 (la mitad de la cantidad de pixeles

del canal Y). dataChrominancePtr[] es un puntero (original) a una estructura quecontiene los datos originales del canal Cb o Cr. alias[] es un puntero (nuevo) a una estructura donde se almacenaránlos datos del canal submuestreado.

43 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 44: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

Entonces, lo que se realiza es: 1) se copia el valor de un pixel del punterooriginal en el nuevo; 2) se adelanta una posición el puntero nuevo; 3) se adelantados posiciones el puntero original; 4) se repite el proceso hasta llegar al final delpuntero original (size veces).

Para la descompresión es necesario convertir del formato 4:2:2 a 4:4:4,realizando una interpolación. Es necesario seguir el siguiente algoritmo para loscanales Cb y Cr.

alias[0] dataChrominancePtr[0];

dataChrominancePtr;

for ( UInt32 i 0; i ( size - 2 ); i 2 )

{

alias[2] dataChrominancePtr[0];

temporalValue floor ( ( ( alias[0] alias[2] ) / 2 ) 0.5 );

if ( temporalValue 255 )

temporalValue 255;

else if ( temporalValue 0 )

temporalValue 0;

alias[1] temporalValue;

alias 2;

dataChrominancePtr;

};

alias[] es un puntero (nuevo) a una estructura donde se almacenaránlos datos del canal Cb o Cr con las muestras faltantes reconstruidas. dataChrominancePtr[] es un puntero (original) a una estructura donde seencuentran los datos originales del canal Cb o Cr submuestreado. size es alto Cb o Cr ancho Cb o Cr 2 (la cantidad de pixeles delcanal Y).

Entonces el procedimiento es: 1) antes de comenzar el ciclo, se copia en laprimer componente del puntero nuevo, la primer componente del puntero original;2) se copia en la tercer componente del puntero nuevo, la segunda componentedel puntero original; 3) se almacena en la segunda componente del puntero nuevo,un promedio de la primer y tercer componente; 4) se avanza en dos el punteronuevo y en uno el puntero original; 5) se repiten los pasos 2), 3) y 4) hastaterminar el proceso.

Aquí se ha presentado sólo un esquema general de la implementación. Laimplementación propiamente dicha se puede encontrar en el código fuente, en losarchivos colorspacemanager.h y colorspacemanager.cpp, bajo la rutaprogramacion\proyectofinal.cvs\compressor\src\compressor\utils

44 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 45: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

Discretización en bloquesHasta ahora, siempre se dijo que se deben discretizar las imágenes en bloques

de 8 8, pero esto no siempre es posible. Si la imagen no tiene un largo o altomúltiplo de 8, entonces será imposible dividir a esta imagen en bloques de sólo8 8. No existe una única manera de afrontar este problema. Una posible soluciónes "agrandar" la imagen hasta alcanzar el múltiplo de 8 más cercano —en ladimensión que sea necesario—, y en el proceso de descompresión volver laimagen a su tamaño original. En el presente caso de estudio se adoptó otrasolución, permitiendo bloques menores a 8 8. Supongamos que se dispone deuna imagen de 50 35, entonces tendremos 24 bloques de 8 8, 4 de 2 8, 4 de8 3 y 1 de 2 3 (figura 35). Esta solución complica un poco la implementación dela transformada DCT, ya que no alcanza con realizar el caso particular de 8 8,sino que se debe llevar a cabo de modo general.

Figura 35: Discretización en bloques no uniformes.

Transformación DCTDado que la DCT ya se ha analizado con suficiente rigurosidad, ahora sólo nos

limitaremos a explicar cómo se ha implementado en este caso de estudio. Acontinuación se presenta la implementación del constructor de una matriz detransformación de rows columns elementos.

Real c, d;

for ( UInt8 u 0; u rows; u )

{

if ( u 0 )

c 1/sqrt( Real(2.0) );

else c 1;

for ( UInt8 v 0; v columns; v )

{

if ( v 0 )

d 1/sqrt( Real(2.0) );

else d 1;

for ( UInt8 i 0; i rows; i )

45 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 46: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

for ( UInt8 j 0; j columns; j )

{

Real first ( 2*c*d / sqrt( Real( rows * columns ) ) );

Real cos1 cos( ( 2*i 1 ) * u*PI / ( 2 * rows ) );

Real cos2 cos( ( 2*j 1 ) * v*PI / ( 2 * columns ) );

this-setComponent ( v rows*u, j columns*i, first * cos1 * cos2 );

};

};

};

Dado un bloque de datos de rows columns componentes y una matriz detransformación conforme —decolumns − 1 rows ∗ rows − 1 1 columns − 1 columns ∗ rows − 1 1elementos—, el siguiente algoritmo realiza la transformación DCT.

IMatrixReal* auxMatrix new IMatrixReal (rows, columns);

for ( UInt8 u 0; u rows; u )

for ( UInt8 v 0; v columns; v )

for ( UInt8 i 0; i rows; i )

for ( UInt8 j 0; j columns; j )

{

Real uvAux auxMatrix-getComponent (u, v);

Int16 ijAux ( input-getComponent (i, j) - 128 );

Real transfAux transfMatrix-getComponent (v rows*u, j columns*i);

auxMatrix-setComponent ( u, v, uvAux (ijAux * transfAux) );

};

for ( UInt8 u 0; u rows; u )

for ( UInt8 v 0; v columns; v )

result-setComponent (u, v, floor ( auxMatrix-getComponent (u, v) 0.5) );

auxMatrix es una matriz auxiliar de números reales, de rows columnscomponentes, inicializada toda con ceros. input es una matriz de rows columns componentes, que contiene elbloque de datos a transformar. transfMatrix es la matriz de transformación de input.

En el proceso de descompresión se debe llevar a cabo una antitransformaciónde los datos. A continuación se lista el algoritmo para el constructor de una matrizde antitransformación de rows columns elementos.

Real c, d;

for ( UInt8 u 0; u rows; u )

for ( UInt8 v 0; v columns; v )

for ( UInt8 i 0; i rows; i )

46 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 47: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

{

if ( i 0 )

c 1/sqrt( Real(2.0) );

else c 1;

for ( UInt8 j 0; j columns; j )

{

if ( j 0 )

d 1/sqrt( Real(2.0) );

else d 1;

Real first ( 2*c*d / sqrt( Real( rows*columns ) ) );

Real cos1 cos( (2*u 1) * i*PI/( 2*rows ) );

Real cos2 cos( (2*v 1) * j*PI/( 2*columns ) );

this-setComponent (v rows*u, j columns*i, first * cos1 * cos2 );

};

};

Dado un bloque de rows columns coeficientes DCT y una matriz deantitransformación conforme —decolumns − 1 rows ∗ rows − 1 1 columns − 1 columns ∗ rows − 1 1elementos—, el siguiente algoritmo realiza la antitransformación DCT.

IMatrixReal* auxMatrix new IMatrixReal (rows, columns);

for ( UInt8 u 0; u rows; u )

for ( UInt8 v 0; v columns; v )

for ( UInt8 i 0; i rows; i )

for ( UInt8 j 0; j columns; j )

{

Real uvAux auxMatrix-getComponent (u, v);

Int16 ijAux input-getComponent (i, j);

Real transfAux transfMatrix-getComponent (v rows*u, j columns*i);

auxMatrix-setComponent ( u, v, uvAux ijAux * transfAux );

};

for ( UInt8 u 0; u rows; u )

for ( UInt8 v 0; v columns; v )

result-setComponent (u, v, floor ( auxMatrix-getComponent (u, v) 0.5) 128 );

auxMatrix es una matriz auxiliar de números reales, de rows columnscomponentes, inicializada toda con ceros. input es una matriz de rows columns componentes, que contiene elbloque de coeficientes DCT a antitransformar. transfMatrix es la matriz de antitransformación de input.

Para un análisis exhaustivo de los constructores de las matrices detransformación y antitransformación, referirse al código fuente de los archivos

47 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 48: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

transformationmatrix.h y transformationmatrix.cpp, situados en eldirectorioprogramacion\proyectofinal.cvs\compressor\src\compressor\common

Si se desea profundizar en la implementación de la transformación DCT,recurrir a los archivos dcttransformer.h y dcttransformer.cpp. Para laantitransformación, a los archivos idcttransformer.h yidcttransformer.cpp. Todos estos archivos se encuentran enprogramacion\proyectofinal.cvs\compressor\src\compressor\codecs

CuantificaciónPara la cuantificación, se utiliza una tabla para la luminancia (canal Y) y otra

para las crominancias (canales Cb y Cr). Por defecto, estas tablas son lassugeridas por [GHANBARI2003] —figuras 28 y 29—, pero al estar almacenadasen un archivo de texto (quantization.tbl) son fácilmente editables. Vale lapena aclarar que una imagen debe ser descomprimida con las mismas tablas quefue comprimida, por esta razón se recomienda tener especial cuidado al editarlas.

Tanto para la cuantificación como para la descuantificación, se utiliza unparámetro C (Calidad) de escalado, que determina la calidad de la imagen. Esteparámetro es un número real entre 0 y 1, siendo 0 la peor calidad (factor decompresión más alto), 0.66 una calidad buena (sin escalado) y 1 la mejor calidad(factor de compresión más bajo). Previo al escalamiento propiamente dicho, a esteparámetro C se le realiza un preproceso. Notaremos como Coriginal y Cpreprocesado alparámetro C antes y después del preproceso respectivamente. El parámetroCpreprocesado también será un número real, pero su rango es de 0.25 a 16. Elpreproceso es el siguiente:

Cpreprocesado 21−Coriginal 6−2

Esto mapea el mínimo de Coriginal al máximo de Cpreprocesado, y el máximo deCoriginal al mínimo de Cpreprocesado.

Luego se cargan en memoria las tablas ya escaladas. El escalado es muysimple, consiste de multiplicar cada componente de cada una de las dos tablasoriginales por el factor de escalado Cpreprocesado.

Para la cuantificación, se divide el elemento (i,j) del bloque de coeficientes DCpor el elemento (i,j) de la tabla de cuantificación escalada. Para ladescuantificación, se multiplica el elemento (i,j) del bloque de coeficientes DCcuantificados por el elemento (i,j) de la tabla de cuantificación escalada.

Para mayores detalles referirse al código fuente de los archivosquantization.h y quantization.cpp, situados enprogramacion\proyectofinal.cvs\compressor\src\compressor\common

48 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 49: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

Codificación DPCMLa implementación de la codificación y decodificación DPCM es la traducción

directa del método explicado en el esquema secuencial baseline de JPEG. Esdecir, para la codificación, al coeficiente DC del bloque a codificar se le debe restarel coeficiente DC del bloque codificado previamente. Al resultado de esta resta lollamaremos Dif. Se construye un nuevo bloque, al coeficiente DC se le asigna Dif,y al resto de los coeficientes AC se les asigna los mismos valores que loscontenidos en el bloque original. Luego, se debe almacenar el valor DC del bloqueoriginal, para poder realizar la codificación del próximo bloque. El código queimplementa esto es el siguiente:

BlockMatrix* result new BlockMatrix ( input.getRows (), input.getColumns () );

for ( UInt8 row 0; row input.getRows (); row )

for ( UInt8 column 0; column input.getColumns (); column )

result-setComponent ( row, column, input.getComponent ( row, column ) );

result-setComponent (0, 0, input.getComponent (0, 0) - this-previousEncodingDCValue);

this-previousEncodingDCValue input.getComponent (0, 0);

return result;

result es una matriz inicializada toda con ceros, donde se almacenaráel bloque de coeficientes DCT codificado con DPCM. input es el bloque de coeficientes DCT a codificar con DPCM. previousEncodingDCValue es el valor DC del bloque codificado previamente.Si fuera el primer bloque a codificar, previousEncodingDCValue es igual a cero.

Para la decodificación, al coeficiente codificado se le suma el coeficiente quese ha decodificado anteriormente. Se construye un nuevo bloque y al coeficienteDC se le asigna este valor. Además, este valor se almacena para la correctadecodificación del próximo bloque. Al resto de los coeficientes AC del bloquerecién creado se les asigna los valores contenidos en el bloque original. Laimplementación es la siguiente:

BlockMatrix* result new BlockMatrix ( input.getRows (), input.getColumns () );

for ( UInt8 row 0; row input.getRows (); row )

for ( UInt8 column 0; column input.getColumns (); column )

result-setComponent ( row, column, input.getComponent ( row, column ) );

result-setComponent (0, 0, input.getComponent (0, 0) this-previousDecodingDCValue);

this-previousDecodingDCValue result-getComponent (0, 0);

return result;

result es una matriz inicializada toda con ceros, donde se almacenará

49 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 50: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

el bloque de coeficientes DCT decodificado con DPCM. input es el bloque de coeficientes DCT a decodificar con DPCM. previousDecodingDCValue es el valor DC del bloque decodificadopreviamente. Si fuera el primer bloque a decodificar, previousDecodingDCValuees igual a cero.

Para explorar el código fuente original, los archivos que se deben observar son:dctdpcm.h y dctdpcm.cpp, ubicados enprogramacion\proyectofinal.cvs\compressor\src\compressor\encoding

Recorrido en zigzag y codificación RLCDado que COMPRESSLIB implementa el recorrido en zigzag en las mismas

clases que implementa la codificación y decodificación RLC, aquí tambiénestudiaremos todo en conjunto. Primero analizaremos la forma en que se realizanlos recorridos de matrices. Recordemos que COMPRESSLIB utiliza bloques dem n elementos, siendo m y n 8. Debido a esto, no alcanza con definir un únicorecorrido para el bloque más común de 8 8, sino que es necesario definir unrecorrido para cada bloque posible —en total son 64 recorridos distintos. Acontinuación se ofrece el código que implementa la construcción de un vector depares (i,j), que define el recorrido de un bloque de rows columns componentes.Cada par que contiene el vector, indica las componentes (i,j) que deben visitarse amedida que se va avanzando. Así, por ejemplo, si tenemos en cuenta el recorridode la figura 30 (para un bloque de 8 8 elementos), los pares del vector que defineel recorrido en zigzag serán:

[(0,0),(0,1),(1,0),(2,0),(1,1),(0,2),(0,3),(1,2),(2,1),(3,0),(4,0)...(7,7)]

PathVector* path new PathVector ();

UInt8 row 0;

UInt8 column 0;

while ( (row (rows - 1)) || (column (columns - 1)) )

{

path-push_back( Tuple2UInt8,UInt8 (row, column) );

if ( column (columns - 1) )

column;

else row;

// Tests if the last component was reached.

if ( (row (rows - 1)) && (column (columns - 1)) )

{

path-push_back( Tuple2UInt8,UInt8 (row, column) );

50 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 51: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

break;

};

while ( (column ! 0) && (row (rows - 1)) )

{

path-push_back( Tuple2UInt8,UInt8 (row, column) );

column–;

row;

};

path-push_back( Tuple2UInt8,UInt8 (row, column) );

if ( row (rows - 1) )

row;

else column;

// Tests if the last component was reached.

if ( (row (rows - 1)) && (column (columns - 1)) )

{

path-push_back( Tuple2UInt8,UInt8 (row, column) );

break;

};

while ( (row ! 0) && (column (columns - 1)) )

{

path-push_back( Tuple2UInt8,UInt8 (row, column) );

column;

row–;

};

};

// This is only true when rows is equal to 1 and columns is equal to 1.

if ( path-size() 0 )

path-push_back( Tuple2UInt8,UInt8 (0, 0) );

return path;

path es el vector donde se almacena el recorrido de la matriz.Si se desea acceder al código fuente, referirse a los archivos

dctrlccoder.cpp o dctrlcdecoder.cpp, enprogramacion\proyectofinal.cvs\compressor\src\compressor\encoding

Para la codificación RLC se construye un vector de pares (longitud, valor). Lacomponente longitud indica la cantidad de coeficientes nulos y la componente

51 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 52: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

valor indica el siguiente coeficiente no nulo en el recorrido. Al igual que en el casode JPEG, aquí también se destinaron cuatro bits para la representación de lacomponente longitud, por lo tanto su rango será de 0 a 15. A continuación sepresenta la primer parte del código que construye este vector.

while ( ! isStreamOver () )

{

element nextStreamElement ();

// If the element is equal to our skip element

if ( element skipElement )

{

// then if it is less than the maximum

if ( skipElementCount maxRunLength )

// add it to the count

skipElementCount;

else

{

// put it in the result

rlcResult.push_back ( Tuple2_TQuantity,_TDataType (skipElementCount,element) );

skipElementCount 0;

};

}

else

{

// Put the tuple in the result

rlcResult.push_back ( Tuple2_TQuantity,_TDataType (skipElementCount,element) );

skipElementCount 0;

};

};

isStreamOver (), basándose en el recorrido zigzag para la matriz actual,retorna un valor booleano que indica si ya se han visitado todas lascomponentes. nextStreamElement (), basándose en el recorrido zigzag para la matrizactual, retorna el próximo elemento de la matriz. skipElement representa al elemento sobre el cual se realizará lacodificación RLC, en nuestro caso es el número 0. La razón de ser deesta variable es para brindar flexibilidad al algoritmo. skipElementCount lleva la cuenta de cuántos ceros se han encontrado enel recorrido. maxRunLength representa la cantidad máxima de ceros consecutivos quese pueden encontrar. En nuestro caso es 15. Este valor se almacena enuna variable para brindar flexibilidad al algoritmo. rlcResult es el vector en el que se almacena la codificación RLC.

En esta primer parte se ha recorrido todo el bloque de coeficientes DCT,

52 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 53: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

llenando el vector de pares (longitud, valor) con los valores encontrados. Restapostprocesar este vector, principalmente porque COMPRESSLIB termina cadacodificación RLC con el par (0,0), independientemente de cuáles sean los últimosvalores del bloque. Pero además, por ejemplo, si los últimos 50 elementos delrecorrido son nulos, el código anterior terminaría la codificación con estos pares:[...(15,0),(15,0),(15,0),(2,0)]. Esto se puede codificar de un modo mucho máseficiente: [...(0,0)]. Esto es lo que realiza la última parte del código.

Int32 rlcResultSize rlcResult.size ();

rlcResultSize–;

if ( rlcResultSize 0 )

{

while ( rlcResult[rlcResultSize].getSecond () 0 )

{

if ( rlcResultSize 0 )

rlcResultSize–;

else break;

};

rlcResult.resize ( rlcResultSize 1 );

};

// Add end of block

rlcResult.push_back ( Tuple2_TQuantity,_TDataType (0,0) );

rlcResultSize almacena la cantidad de pares que contiene el vector decodificación rlcResult.

Si se desea profundizar más en el tema, el código fuente se encuentra en losarchivos rlccoder.h, rlccoder.cpp, dctrlccoder.h y dctrlccoder.cpp.Todos los archivos pueden encontrarse enprogramacion\proyectofinal.cvs\compressor\src\compressor\encoding

Para la decodificación RLC, el proceso se invierte: dado un vector de pares(longitud, valor), se debe construir un bloque de coeficientes DCT. A continuaciónpuede apreciarse el código que lo implementa.

tuple *input;

input;

Tuple2_TQuantity,_TDataType nullTuple (0, skipElement);

while ( !( tuple nullTuple ) )

{

for ( UInt8 i 0; i tuple.getFirst (); i )

storeInNextOutputPosition ( skipElement );

53 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 54: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

storeInNextOutputPosition ( tuple.getSecond () );

tuple *input;

input;

};

while ( !(isDataContainerFull ()) )

storeInNextOutputPosition ( skipElement );

input es un iterador para acceder al vector con la codificación RLC. storeInNextOutputPosition ( element ), basándose en el recorrido zigzag para lamatriz correspondiente, almacena el valor element en la componentecorrespondiente, en el bloque de coeficientes DCT que se genera en ladecodificación. isDataContainerFull () retorna un valor booleano que indica si el bloque decoeficientes DCT que se genera en la decodificación ya está completo.

Para un análisis exhaustivo, el código completo puede encontrarse en losarchivos rlcdecoder.h, rlcdecoder.cpp, dctrlcdecoder.h ydctrlcdecoder.cpp. La ruta de acceso esprogramacion\proyectofinal.cvs\compressor\src\compressor\encoding

Codificación de HuffmanLa codificación de Huffman que se ha implementado es casi la misma que la

presentada en el esquema secuencial baseline de JPEG. La única diferencia esque, por una cuestión de simplicidad, los coeficientes DC se codifican utilizando latabla de códigos Huffman de coeficientes AC —por defecto es la misma queproponen [BOUMAN2001] y [GHANBARI2003]. Comencemos con la primer partede la implementación.

Tuple2 _TQuantity , _TDataType tuple;

std::vectorBool output;

for (std::vector Tuple2 _TQuantity , _TDataType ::iterator iter input.begin(); iter input.end();

iter)

{

// Dereference iter to obtain values.

tuple *iter;

encodeTuple ( output, tuple );

};

iter es un iterador para acceder a las tuplas codificadas con RLC. output es un vector binario, es donde se almacenará la codificación. encodeTuple ( output, tuple ) realiza la codificación Huffman de tuple y la

54 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 55: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

añade al final del vector output.La codificación termina una vez que se ejecuta encodeTuple ( output, tuple ) tantas

veces como tuplas haya para codificar. Veamos ahora cómo está implementadoencodeTuple ( output, tuple ).

Tuple2 _TQuantity , _TDataType preprocessedTuple;

preprocess ( output, preprocessedTuple, tuple );

lookup ( output, preprocessedTuple );

postprocess ( output, preprocessedTuple, tuple );

preprocess ( output, preprocessedTuple, tuple ) le asigna a la primer componentede preprocessedTuple la primer componente de tuple, y a la segundacomponente de preprocessedTuple le asigna la cantidad de bits necesariospara representar a la segunda componente de tuple. lookup ( output, preprocessedTuple ) busca en la tabla de códigos Huffman elpar que contiene preprocessedTuple. El código obtenido se añade al final delvector binario output. postprocess ( output, preprocessedTuple, tuple ) añade al final de output larepresentación en binario de la segunda componente de tuple.

Si se desea profundizar en los detalles de implementación de los distintosmétodos, referirse a los archivos huffmancoder.h, huffmancoder.cpp,dcthuffmancoder.h y dcthuffmancoder.cpp. Los cuatro archivos puedenaccederse desdeprogramacion\proyectofinal.cvs\compressor\src\compressor\encoding

Por otro lado, en el proceso de decodificación, lo que se debe hacer es: dadoun vector binario, devolver un vector de pares que representen la codificaciónRLC.

Tuple2 _TQuantity , _TDataType tuple;

std::vector Tuple2 _TQuantity , _TDataType output;

UInt32 vectorSize input.size ();

while ( this-usedBits vectorSize )

{

tuple lookup ( input );

postprocess ( output, tuple, input );

};

return output;

tuple es una tupla de dos elementos. output es un vector que contiene tuplas de dos elementos. Al finalizar elproceso de decodificación, este vector tendrá todos los pares querepresentan la codificación RLC. input es un vector binario que contiene la información codificada.

55 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 56: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

usedBits representa la posición de búsqueda actual dentro de input. lookup ( input ) retorna un par (longitud, m): longitud indica la cantidad deceros que hay antes de un valor no nulo y m es la cantidad de bits queutiliza ese valor no nulo. postprocess ( output, tuple, input ) postprocesa el par tuple de modo tal depoder asignarle a output el par (longitud, valor). Lo único que cambia es lasegunda componente, postprocess ( output, tuple, input ) utiliza los m siguientesbits de input para obtener valor.

Si se desea obtener más información acerca de esta implementación, accedera los archivos huffmandecoder.h, huffmandecoder.cpp,dcthuffmandecoder.h y dcthuffmandecoder.cpp. Estos archivos seencuentran enprogramacion\proyectofinal.cvs\compressor\src\compressor\encoding

Si lo que se desea es obtener información acerca de cómo se implementó elárbol de códigos Huffman, acceder al archivo huffmantree.h ubicado enprogramacion\proyectofinal.cvs\compressor\src\compressor\utils

Compress demoEsta aplicación ilustra el funcionamiento interno de cada una de las etapas del

pipeline de compresión-descompresión (figura 36). La aplicación permite definir losvalores de un bloque de datos de 8 8 elementos. Según en el modo en que seesté trabajando, el rango de los valores de las componentes será de 0 a 255(Image mode) o de -99 a 999 (Numeric mode). Avanzando hacia la derecha delbloque de datos, la aplicación presenta los distintos estados de la compresión: unbloque con los coeficientes DCT, un bloque con los coeficientes DCTcuantificados, la codificación RLC y la codificación Huffman. Avanzando hacia laizquierda de la codificación Huffman, la aplicación presenta los distintos estadosde la descompresión: codificación RLC, un bloque con los coeficientes DCTcuantificados, un bloque con los coeficientes DCT, y finalmente un bloque con losdatos recuperados.

A la izquierda de los bloques de datos se encuentra dispuesta verticalmenteuna barra de desplazamiento. Al desplazar esta barra hacia arriba, se incrementala calidad; al hacerlo hacia abajo, se decrementa.

La tabla de cuantificación que se utiliza es la definida para la luminancia. Estatabla, escalada según sea la posición de la barra de desplazamiento, se presentadebajo del bloque que contiene los datos recuperados.

Si se está trabajando en Image mode, a la izquierda de la barra dedesplazamiento, se presentan dos cuadros, dispuestos verticalmente. El cuadrosuperior representa gráficamente al bloque de datos. El cuadro inferior representagráficamente al bloque de datos recuperados. Ambos cuadros están en escala degrises y amplificados para poder observar detalladamente la representación decada pixel. Entre medio de los dos cuadros se puede apreciar el factor de

56 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 57: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

compresión. Esto se calcula realizando el cociente entre la cantidad de bitsrequeridos para almacenar el bloque de datos original —64 pixeles 1 byte 64bytes 512 bits— y la cantidad de bits requeridos para almacenar la codificaciónHuffman.

Para definir los valores del bloque de datos hay varias posibilidades. Llenarmanualmente cada una de las componentes, llenar todo el bloque de modoaleatorio (Fill | Random generate) o llenarlo con patrones predefinidos (Fill | Fixedgeneration). Hay cinco patrones predefinidos: bloque negro (Fill | Fixed generation | Blacksquare), bloque blanco (Fill | Fixed generation | White square), triangular superior (Fill |Fixed generation | Upper triangular) —blanco arriba de la diagonal—, triangular inferior(Fill | Fixed generation | Lower triangular) —blanco debajo de la diagonal— y grilla (Fill |Fixed generation | Checker) —pixeles blancos y negros alternados.

Figura 36: Compress demo.

Image viewerEsta aplicación (figura 37) demuestra la utilidad práctica real de la librería

COMPRESSLIB. Permite visualizar y comprimir imágenes en formato BCI.Además, también puede visualizar imágenes en formato BMP y convertirlas a BCI.

En el extremo superior izquierdo se encuentra un menú principal con dos ítems:File y View. El primero de ellos se utiliza para: abrir un archivo (File | Open...), cerrarun archivo (File | Close), guardar un archivo (File | Save), guardar un archivo con otronombre (File | Save as...) o para salir de la aplicación (File | Exit). El ítem View sólo sehabilita cuando se abre una imagen en color. Se utiliza para elegir visualizar: laimagen original, la imagen comprimida y la imagen de error (View | Images); los trescanales RGB de la imagen original (View | Channels | RGB | Original image); los trescanales RGB de la imagen comprimida (View | Channels | RGB | Compressed image); elcanal de luminancia y los dos de crominancia de la imagen original (View | Channels |YUV | Original image); o el canal de luminancia y los dos de crominancia de la imagencomprimida (View | Channels | YUV | Compressed image).

57 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 58: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

Cuando abrimos un archivo —ya sea .bci o .bmp—, se visualizan por defectola imagen original, la comprimida y la de error. Además, también se habilita unabarra de desplazamiento horizontal y un botón. Esta barra nos permite cambiar elfactor de compresión —de 0 a 100—, y el botón nos permite aplicar los cambios.Cuando presionemos el botón, la imagen original se comprimirá con el factor decompresión elegido, y se actualizará la imagen comprimida. También seactualizará la imagen de error, que es la diferencia entre la imagen original y lacomprimida. Si la imagen cargada es en color, para la representación de la imagende error sólo se utilizará el canal Y. Esto se hace de este modo debido a que estecanal es predominante sobre los otros dos. La diferencia se realiza de estamanera: PixelError(i,j) PixelOriginal(i,j) - PixelComprimido(i,j) 128; limitando elresultado en 0 como mínimo y en 255 como máximo.

Figura 37: Image viewer.

Por debajo del menú principal se encuentra una barra de estados con sietecampos. Cada uno de ellos, de izquierda a derecha, indica:

Width (ancho): ancho de la imagen, medido en pixeles. Height (alto): alto de la imagen, medido en pixeles. bpp (bits per pixel - bits por pixel): cantidad de bits necesarios pararepresentar un pixel de la imagen. Será 8 si la imagen es en escala degrises y 24 si es en colores. Format (formato): formato de la imagen. Sólo puede ser bci o bmp. Compression ratio (factor de compresión): factor de compresión de

58 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 59: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

la imagen comprimida respecto de lo que ocuparía la imagen sincomprimir. PSNR (Peak Signal to Noise Ratio - relación de la señal de picorespecto del ruido): una métrica de error. Un valor de PSNR alto esbueno porque indica que la relación de la señal respecto del ruido esalta. Aquí, la señal es la imagen original, y el ruido es el error en laimagen reconstruida. Se calcula del siguiente modo:

PSNR 20 log10255MSE

[3.1]

MSE i0

n−1∑

j0

m−1∑ fi, j − Fi, j2

n m [3.2]

Donde: fi, j y Fi, j, con 0 ≤ i n y 0 ≤ j m, representan unaimagen de n m pixeles, original y reconstruida respectivamente.

Los valores de la métrica PSNR generalmente varían entre 20 y 40. Elvalor en sí mismo no es significativo, sino que se utiliza para comparar lacalidad de distintas imágenes reconstruidas. Status (estado): Indica cuál tarea se está llevando a cabo. Existen 4posibilidades: Idle (estado ocioso), Opening file... (abriendo un archivo),Saving file... (guardando un archivo) y Updating image... (actualizando lasimágenes).

COMPRESIÓN DE VIDEODesde los comienzos de la industria de la animación, lo que los espectadores

percibieron como un flujo continuo de movimiento, fueron en realidad sólosecuencias de imágenes. El requisito para que esta técnica funcionecorrectamente, es que las imágenes cambien lo suficientemente rápido como paralograr la ilusión de movimiento real.

Hasta hace algunos años, el video digital estaba reservado sólo paraaplicaciones profesionales, la mayoría de los equipos estaban diseñadosprincipalmente para video analógico. El problema era que las señales analógicasposeen algunos inconvenientes. Dentro de un ancho de banda dado para unaseñal analógica, cualquier forma de onda es válida. Por este motivo, los ruidoseléctricos —variaciones de tensión, distorsiones, etc.— que puedan interferir enuna señal, no podrán ser detectados. En determinadas ocasiones, se puede inferirla presencia de ruido en una señal analógica, pero no se puede determinar conexactitud qué parte de la señal recibida corresponde al ruido y cuál a la señaloriginal.

Con el transcurso del tiempo, la tecnología comenzó a ser más económica, ylas técnicas digitales en audio y video crecieron rápidamente. La informacióndigital es más robusta y puede codificarse para eliminar los errores, tanto en los

59 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 60: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

procesos de grabación como en los de transmisión. Las técnicas de grabación,edición y transmisión digital permiten manipulaciones de los datos que sonimposibles en señales analógicas. Una vez que el audio o el video estándigitalizados, se convierten en datos. Estos datos no se pueden diferenciar decualquier otra clase de datos, por lo tanto el audio y el video digital se conviertenen un área de estudio muy importante dentro de la computación.

Las imágenes se comprimen para poder transmitirlas más rápido oalmacenarlas más eficientemente. Puesto que el video es una secuencia deimágenes, la necesidad de compresión es aún mayor. La técnica más básica decompresión de video podría ser simplemente una secuencia de imágenescomprimidas. Sin embargo, el factor de compresión que se logra mediante estatécnica no es muy alto, ya que no aprovecha la redundancia temporal entrecuadros.

Codificación temporalEs común encontrar secuencias de video donde las diferencias entre las

imágenes o cuadros (frames) sucesivos son pequeñas. En estos casos, lacorrelación entre cuadros es muy grande, y sería redundante almacenar (de aquíen mas, léase como almacenar o transmitir) cada uno de ellos. Una codificaciónpredictiva puede reducir gran parte de la redundancia. Lo que se hace entonces,es almacenar sólo las diferencias. La primer imagen de un video sólo se codificautilizando alguna técnica de compresión de imágenes. Para codificar el siguientecuadro, se calculan las diferencias y se construye una nueva imagen con esosdatos. A esta nueva imagen se la comprime del mismo modo que a la primera, yluego recién se la almacena. A las imágenes codificadas mediante predicción selas denomina inter, mientras que a las codificadas sin predicción se las denominaintra. El proceso de predicción puede llevarse a cabo con varios cuadrosconsecutivos, sin embargo, cada n cuadros inter debe haber un cuadro intra.Existen varios motivos para esta restricción. El peor de los casos es que, por algúnmotivo, se introduzcan errores. Estos errores se propagarán hasta la próximaimagen intra, por lo tanto el parámetro n no debe ser demasiado grande. Otromotivo es que en una secuencia de video puede ocurrir un cambio de escena, conlo cual los cuadros ya no estarán fuertemente correlacionados y la predicción nobrindará beneficios. Otra de las razones se hace evidente a la hora de lareproducción o edición. En una reproducción, si se desea adelantar o retrocederrápidamente, el nuevo punto de comienzo será una imagen intra, por lo tanto elparámetro n dará la granularidad. En la edición, será necesario realizardecodificaciones y recodificaciones en cascada. Cuanto más grande sea n, mayorserá el tiempo de proceso.

Compensación de movimientoCuando en una secuencia de video existen objetos en movimiento o se

60 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 61: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

desplaza la pantalla, los valores de algunos pixeles entre un cuadro y el siguiente,se verán trasladados horizontalmente, verticalmente o en ambas direcciones. Laidea de la compensación o estimación de movimiento es encontrar ese traslado deposición para poder minimizar las diferencias entre los pixeles de ambos cuadros.

Aplicar esta técnica para cada pixel individual no mejorará la compresión, yaque deberíamos almacenar cada traslado y cada diferencia, lo cual es muyineficiente. Sin embargo, si esta técnica se lleva a cabo para un grupo de pixeles,se pueden obtener resultados muy favorables. Al desplazar un grupo de pixelesdentro de un cuadro, de tal modo que las diferencias entre pixeles se veanminimizadas, se podrán alcanzar factores de compresión muy grandes. Estedesplazamiento deberá ser almacenado junto con los datos comprimidos, pero esdespreciable frente al beneficio obtenido. A este desplazamiento se lo denominavector de movimiento, y generalmente se lo representa mediante un par denúmeros enteros que especifican el corrimiento horizontal y vertical.

Compresión de audioGeneralmente, el audio representa un papel muy importante dentro del video,

tanto semánticamente como físicamente. Por lo tanto, la compresión de audio, sibien es un área en si misma, está muy relacionada con la compresión de video. Lamayoría de las técnicas de compresión de audio están basadas en la eliminaciónde información que es perceptualmente irrelevante. Si bien existen muchosmétodos de compresión sin pérdida [WHITTLE2003], su aplicación es limitadadebido a sus bajos factores de compresión.

La mayoría de las técnicas de compresión de audio con pérdidas utilizantransformadas —DCT modificada (MDCT), transformada de Fourier, etc.— paraconvertir las formas de onda muestreadas en un dominio frecuencial. Una vezrealizada la transformación, las componentes de frecuencia son ponderadasmediante el cálculo de un umbral de enmascaramiento. Si la energía de lacomponente está por debajo de este umbral, se considera que la componente esirrelevante y no se la codifica. El umbral de enmascaramiento se calcula teniendoen cuenta el umbral absoluto de audibilidad y los principios de enmascaramientofrecuencial y temporal. Si la señal a codificar posee múltiples canales, se puederealizar una compresión entrópica, ya que los distintos canales generalmenteestán correlacionados.

Replicación de banda espectral (SBR)La replicación de banda espectral (en inglés, Spectral Band Replication) es una

nueva herramienta de codificación que mejora la ganancia de los codificadoresperceptuales. La SBR es una técnica de extensión de ancho de banda, donde unaporción importante del ancho de banda de la señal se reconstruye a partir de labanda baja recibida. A esta técnica la desarrolló una compañía internacional,Coding Technologies.

61 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 62: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

La SBR no es un codificador de audio autocontenido, sino que es uncomplemento de los codificadores de audio tradicionales (de aquí en máscodificadores núcleo). La SBR actúa como un preproceso del codificador núcleo ycomo un postproceso del decodificador núcleo. En el codificador, la SBR extraeinformación importante (datos SBR) para poder asegurar un desempeño óptimo enel decodificador. Esta información es muy pequeña comparada con la informacióntotal. El codificador núcleo se debe encargar de codificar la banda baja de la señal,hasta una cierta frecuencia de corte. Todas las frecuencias mayores a lafrecuencia de corte serán reconstruidas por la SBR, mediante los datos SBR y labanda baja ya decodificada. La combinación de la banda baja —decodificada porel decodificador núcleo— y la banda alta —reconstruida por la SBR— resulta enuna señal de audio de ancho de banda completo.

El fundamento de la SBR es la existencia de una fuerte correlación entre lascaracterísticas de la banda alta y la banda baja de una señal. Una señal con seriesarmónicas fuertes que llegan a la frecuencia de corte, generalmente consistirá delas mismas series de armónicas en la banda alta, aunque tal vez no tanpronunciadas como en la banda baja. Del mismo modo, se asume que una señalruidosa en la banda baja tendrá el mismo aspecto en la banda ancha. Hay señalesque se desvían de este modelo, pero la SBR posee métodos para manejar estassituaciones —filtrado inverso, adición adaptativa de ruido, regeneración sinusoidal.Si se desea estudiar más profundamente esta técnica, referirse a[EKSTRAND2002].

Los datos SBR se almacenan como datos adjuntos dentro de los datosgenerados por el codificador núcleo. Esto permite que los decodificadores núcleoque no dispongan de SBR puedan seguir siendo capaces de decodificar la señal—sólo la banda baja.

Formato de video MPEG-2MPEG (Moving Picture Experts Group) es un grupo de trabajo de ISO/IEC

(International Standards Organisation / International Electrotechnical Commission),establecido en el año 1988 para desarrollar estándares para los formatos de audioy video digital. Existen en la actualidad cinco estándares MPEG, algunos en uso yotros en desarrollo. Cada estándar de compresión fue diseñado teniendo encuenta una aplicación y una velocidad de transferencia (bit rate) específico.

El formato MPEG-2 fue diseñado para un bit rate dentro del rango de 1.5Mbit/seg. a 15 Mbit/seg. Es el estándar en el cual están basados la televisióndigital y la compresión DVD (Digital Video Disk). MPEG-2 es una extensión delprimer estándar MPEG-1, pero está diseñado para la compresión y transmisión detelevisión digital masiva. MPEG-1 es un estándar que consiste de tres partes: 1)definición de los métodos para la compresión de video; 2) definición de losmétodos para la compresión de audio; 3) definición de un sistema para elmultiplexado del audio y el video, para poder reproducirlos simultáneamente.MPEG-2 escala bien para la resolución y bit rate requerido para la televisión digital

62 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 63: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

de alta calidad (HDTV - High Definition TeleVision).El formato MPEG-2 se desarrolló con la intención de que sea genérico en el

sentido que sea utilizable por un amplio rango de aplicaciones, bit rates,resoluciones, calidades y servicios. Durante el desarrollo, se consideraron variosrequerimientos para aplicaciones típicas, y todos ellos fueron integrados en unamisma sintaxis. De todos modos, generalmente no resulta práctico ni económicoimplementar hardware capaz de tratar con la totalidad de los requerimientos. Poresta razón se estipularon los llamados perfiles y niveles, que definen variossubconjuntos de la sintaxis total.

Comenzaremos realizando una descripción de los distintos perfiles y niveles,luego estudiaremos las técnicas que utiliza MPEG-2 para comprimir video,posteriormente el audio y finalmente el multiplexado y sincronización de ambos.

Perfiles y nivelesLos perfiles especifican el tipo de compresión, formato de muestreo, tipos de

cuadros, etc. Dentro de los límites de la sintaxis impuesta por un determinadoperfil, aún es posible definir varias combinaciones que determinarán el desempeñoy complejidad de los codificadores y decodificadores. Para lograr unaespecificación concreta, dentro de cada perfil se definen varios niveles. Un nivelespecifica el alto y ancho de la imagen, la cantidad de cuadros por segundo y el bitrate. Tanto los perfiles como los niveles poseen una estructura jerárquica, y cadaperfil (nivel) deberá soportar en su totalidad a su perfil (nivel) inferior.

[GHANBARI2003] describe mediante tablas los distintos perfiles que defineMPEG-2 y los niveles definidos para cada perfil.

CapasAnteriormente mencionamos que un perfil y un nivel especifican una

determinada calidad de video. Sin embargo, dentro del bitstream pueden existirvarias capas (tanto de audio como de video). La primera se conoce como capabase, y puede ser decodificada independientemente. Las otras capas se utilizansucesivamente para mejorar la calidad del audio o del video. De este modo, undecodificador relativamente económico podría reconstruir un video o audioutilizando sólo la capa base. Cuanto más complejo sea el decodificador, máscapas podrá decodificar y consecuentemente podrá brindar una mayor calidad dereproducción.

Si los datos están codificados en una única capa, se dice que el bitstream esno escalable. En caso contrario, se dice que el bitstream posee una jerarquíaescalable. La escalabilidad también puede utilizarse para aumentar la robustez enla transmisión: se eligen los canales más seguros para la transmisión de las capasbase, y los canales de menor calidad para las capas de menor jerarquía.

63 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 64: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

Codificación de videoLa organización básica de los datos que conforman un video (bitstream)

consiste de secuencias de video. A su vez, las secuencias de video estáncompuestas de bloques de pixeles, macrobloques (MB), rebanadas (slices),imágenes o cuadros (pictures o frames) y grupos de imágenes (Group Of Pictures- GOP). El menor elemento, un bloque, consiste de 8 líneas de 8 pixeles cada una.Los bloques se agrupan en macrobloques, de acuerdo a alguno de los perfilespredefinidos. Por ejemplo, el macrobloque con formato 4:2:0 posee 4 bloques parala luminancia, 1 bloque para la componente Cb y un bloque para la componenteCr. Los macrobloques se agrupan horizontalmente en rebanadas que representanuna porción de una fila de una imagen. Las rebanadas pueden ser tan largas comouna línea completa o tan sólo un único macrobloque. Los cuadros y los GOPmerecen especial atención y serán estudiados a continuación.

Si se desea profundizar en los detalles, [JACK2001] ofrece una descripcióncompleta del bitstream.

Cuadros I, P, B y DEn el estándar MPEG-1 hay cuatro modos de codificar los cuadros. Los

cuadros I (intra) se codifican como imágenes independientes, similar a una imagenJPEG. Estos cuadros permiten el acceso aleatorio dentro de un video. Por estarazón, los cuadros I deberían ocurrir alrededor de dos veces por segundo. Estoscuadros también deberían utilizarse cuando ocurren cambios de escena.

Los cuadros P (predicted o de predicción) se codifican respecto del cuadropróximo anterior, que puede ser un cuadro I u otro cuadro P. El resultado es unacodificación predictiva (diferencial) hacia adelante (figura 38). Por este motivo loscuadros P proveen más compresión que los cuadros I, utilizan compensación demovimiento y se utilizan como referencia para los cuadros P y B.

Los cuadros B (bidireccionales) utilizan los dos cuadros (I o P) adyacentescomo referencia, logrando una predicción bidireccional (figura 38). Estos cuadrosproveen la mayor compresión y reducen el ruido promediando dos cuadros.Generalmente hay dos cuadros B separando cuadros I o P.

Los cuadros D (DC) se codifican como imágenes independientes, pero sóloutilizan las componentes DC de los coeficientes de la DCT. Estos cuadros sonraramente utilizados.

Un grupo de imágenes (GOP - Group Of Pictures) es una serie de uno o mascuadros codificados. Un GOP siempre comienza con un cuadro I y termina justoantes de la aparición del próximo cuadro I. La cantidad de cuadros que componenun GOP se puede configurar en el proceso de codificación. Cuanto más chico es elnúmero de cuadros, mejor será la calidad —pues los frames I estarán más cercaunos de otros—, pero el factor de compresión será menor.

Debido a que los cuadros B necesitan información del pasado y del futuro, elorden de presentación de los cuadros no será el mismo que el de transmisión. Es

64 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 65: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

decir, para poder codificar o decodificar un cuadro B, es necesaria la imagen (I oP) que le precede y la que le sigue. De este modo, tanto el codificador como eldecodificador dispondrán de la información necesaria para poder tratar a loscuadros B (figura 38).

Figura 38: Cuadros I, P y B.

Compensación de movimientoLa compensación de movimiento mejora la compresión de los cuadros P y B

por medio de la eliminación de las redundancias que existen entre dos cuadros.Funciona a nivel de macrobloques. La técnica de compensación de movimiento sebasa en el hecho de que dentro de una secuencia corta de video, la mayoría de losobjetos permanecerán en la misma posición, mientras que otros sólo se moveránen una distancia corta. El movimiento se describe como un vector bidimensional.Este vector especifica de qué lugar de un cuadro previamente decodificado,recuperar un macrobloque para poder predecir los valores de las muestras delmacrobloque actual.

Luego de que un macrobloque se comprima utilizando compensación demovimiento, contendrá una diferencia espacial (el vector de movimiento) ydiferencias de contenido (términos de error), respecto del macrobloque dereferencia.

Cabe destacar que existen casos donde cierta información en una escena nopuede predecirse de un cuadro anterior. Esto se produce cuando un objeto enmovimiento descubre algo que estaba tapando —una puerta que se abre— o alintroducirse un objeto nuevo en la escena —un conejo que sale de su madriguera.En estos casos, cuando un macrobloque en un cuadro P no se puede representarmediante compensación de movimiento, se codifica del mismo modo que secodificaría en un cuadro I. Es decir, simplemente se almacena esa porción de la

65 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 66: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

imagen, comprimida sin utilizar codificación temporal.Los macrobloques de los cuadros B se pueden codificar utilizando como

referencia al cuadro previo o al siguiente, lo cual lleva a cuatro modos distintos decodificación:

Codificación intra sin compensación de movimiento. Predicción hacia adelante, con el cuadro (I o P) anterior comoreferencia. Predicción hacia atrás, con el cuadro (I o P) siguiente comoreferencia. Predicción bidireccional, utilizando dos cuadros (I o P) comoreferencia: el anterior y el siguiente.

La predicción hacia atrás se utiliza en los casos que se introduce un nuevoobjeto en la escena o cuando algún objeto en movimiento deja al descubierto unárea nueva.

Codificación de audioMPEG-1 utiliza una familia de tres esquemas de codificación de audio,

llamados capa 1, capa 2 y capa 3, incrementándose la complejidad y la calidad encada una. Estas son capas jerárquicas escalables; la capa 1 es la capa base y lasotras dos se utilizan para mejorar la calidad. Todas las capas soportan audio digitalde 16 bits, utilizando muestreos de 32, 44.1 o 48 kHz. La capa 1 es una versiónsimplificada de la capa 2 y posee un bit rate dentro del rango de 32 a 448 kbps. Lacapa 2 tiene un bit rate dentro del rango de 8 a 384 kbps y fue diseñada parabalancear la calidad del sonido con la complejidad del codificador. La capa 3—también conocida como MP3, de MPeg capa 3— posee un bit rate de 8 a 320kbps. Esta capa especifica un conjunto de características avanzadas quepersiguen un mismo objetivo: preservar tanto como sea posible la calidad delsonido, incluso a bit rates relativamente bajos.

MPEG-1 soporta hasta dos canales de audio y cuatro modos de operación entotal:

1. Modo monofónico para un único canal de audio.

2. Modo monofónico dual para dos canales de audio independientes—funcionalmente igual al modo estéreo.

3. Modo estéreo normal. En este modo, un canal lleva la señal de audioizquierda y el otro canal lleva la señal de audio derecha. Cada canal secodifica de manera independiente.

4. Modo joint-estéreo. Este modo aprovecha la correlación entre losdos canales, la irrelevancia de la diferencia de fase, o ambas. Posee dosmodos de codificación: intensity y ms. Para el primer modo —soportadopor todas las capas—, las frecuencias altas (por encima de 2 kHz.) secombinan. Para el segundo modo —sólo soportado por la capa 3—, uncanal transporta la suma de las señales (izquierda derecha) y el otro ladiferencia (izquierda - derecha).

66 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 67: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

El estándar MPEG-2 extiende al estándar MPEG-1 del siguiente modo: Soporte para audio multicanal: Se dispone de cinco canales de altafidelidad, mas un canal extra que mejora la calidad en las frecuenciasbajas (también conocido como 5.1 canales), de este modo permite lacompresión del audio de la televisión de alta definición (HDTV) opelículas digitales. Soporte para audio multilenguaje: Soporte para siete canalesadicionales para comentarios. Los canales de comentarios poseen unmuestreo igual a la mitad de los muestreos de los canales de altafidelidad. Bit rates de compresión más bajos: Soporta bit rates adicionales detan sólo 8 kbits/seg. Muestreos de audio más bajos: Incluye nuevos muestreos de audio de16, 22.05 y 24 kHz.

En el proceso de codificación, la entrada de audio pasa a través de un bancode filtros que separan la señal en múltiples subbandas de frecuencia.Simultáneamente, la entrada de audio pasa a través de un modelo psicoacústicoque determina el factor de energía de la señal respecto del umbral deenmascaramiento de cada subbanda. El coeficiente de señal respecto delenmascaramiento se utiliza para determinar la cantidad de bits que se utilizarán enla cuantificación de las señales en las subbandas. Finalmente, se toma larepresentación de las muestras de las subbandas cuantificadas y se las codifica.

La clave de la compresión de audio MPEG es el banco de filtros. Este banco defiltros divide la señal de audio en 32 subbandas con el mismo ancho. Los filtrosson relativamente simples y proveen una buena resolución de tiempo con unaresolución de frecuencia razonable. El diseño posee tres puntos débiles que valela pena mencionar:

Primero, el hecho de que las subbandas sean del mismo ancho, norefleja exactamente el comportamiento dependiente de la frecuencia delsistema auditivo humano. El ancho de una banda crítica en función de lafrecuencia es un buen indicador de este comportamiento. En lasfrecuencias bajas, una sola subbanda cubre varias bandas críticas. Bajoestas circunstancias, el número de bits de cuantificación debe serespecificado por la banda que posea el menor enmascaramiento deruido. Segundo, el banco de filtros y sus inversas no son transformacionessin pérdida. Incluso sin realizar ninguna cuantificación, es imposiblerecuperar perfectamente la señal original. Sin embargo, el errorintroducido por el banco de filtros es pequeño e inaudible. Tercero, las bandas de filtros adyacentes presentan un solapamientoimportante de frecuencias. Por lo tanto, una señal con una únicafrecuencia podría afectar la salida de dos filtros adyacentes.

Modelo psicoacústico

67 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 68: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

El modelo psicoacústico analiza la señal de audio y computa la cantidad deenmascaramiento de ruido disponible como una función de la frecuencia. Elcodificador utiliza esta información para decidir como representar la señal deentrada con una cantidad limitada de bits. El estándar MPEG provee dosimplementaciones de modelos psicoacústicos a modo de ejemplo. El modelo 1 esmás sencillo y toma varias decisiones de compromiso para simplificar los cálculos.Cualquiera de los dos modelos sirve para la compresión de todas las capas. Sinembargo, sólo el modelo 2 incluye modificaciones específicas para poder lograr unbuen desempeño en la capa 3.

A continuación se destacan los principales pasos involucrados en los cálculospsicoacústicos.

Alineación temporal de los datos de audio: Los datos enviados almodelo psicoacústico deben ser concurrentes con los datos procesadospor el banco de filtros. Conversión de la representación del audio a un dominio frecuencial:El modelo psicoacústico necesita utilizar una representación frecuencialdistinta a la utilizada por el banco de frecuencias. Esto se debe a quenecesita una mayor precisión frecuencial para poder calcular losumbrales de enmascaramiento de un modo más exacto. Ambos modelospsicoacústicos utilizan la transformada de Fourier. Procesamiento de los valores espectrales, agrupados de acuerdo alancho de las bandas críticas: Para simplificar los cálculospsicoacústicos, ambos modelos procesan los valores frecuencialesdiscretizados en cantidades perceptuales. Separar los valores espectrales en componentes tonales y no tonales:Ambos modelos identifican y separan las componentes tonales de lasruidosas, porque el enmascaramiento de las dos clases de señales esdiferente. Aplicar una función de distribución: El enmascaramiento para unaseñal dada se distribuye sobre alrededor de la banda crítica. El modelo 1determina el umbral de enmascaramiento de ruido aplicando primero unenmascaramiento determinado empíricamente. El modelo 2 lo haceaplicando una función de distribución a las componentes de la señal. Especificar un límite inferior para los valores de umbral: Ambosmodelos incluyen un umbral de enmascaramiento absoluto (en silencio)determinado empíricamente. Este umbral es el límite inferior para laaudibilidad del sonido. Encontrar el umbral de enmascaramiento para cada subbanda:Ambos modelos calculan los umbrales de enmascaramiento con unaresolución frecuencial mayor que la utilizada por el banco de filtros. Paravarias frecuencias dentro de una subbanda se calculan muchosumbrales de enmascaramiento. De todos ellos se elige uno como elvalor de umbral de la subbanda. El modelo 1 elige el menor de losvalores. El modelo 2 tiene en cuenta el ancho relativo de la bandarespecto de la banda crítica. Calcular el coeficiente de la señal respecto del enmascaramiento: Losmodelos calculan este coeficiente como el valor de la energía de la señaldentro de la subbanda (para la capa 3, dentro de un grupo de

68 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 69: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

subbandas) dividido por el mínimo umbral de enmascaramiento para esasubbanda.

Si se desea profundizar en los modelos psicoacústicos, en el banco de filtros, oen detalles más específicos de la codificación de audio, referirse a [PAN1996].

Multiplexado y sincronización de audio y videoUna vez que se dispone de la información comprimida, antes de almacenarla o

transmitirla, se debe multiplexar el audio, el video y la información del sistema. A lasalida de un codificador de audio o video MPEG, se la llama tren elemental(elementary stream). Una señal de televisión tradicional, generalmente estácompuesta por tres trenes elementales: uno que transporta video codificado, otroque transporta audio estéreo codificado y otro que transporta datos de teletexto(información acerca del programa que se esté emitiendo). Dentro del contexto delos medios de comunicación, un programa es generalmente una de las distintasunidades temáticas de una emisión de radio o televisión —por ejemplo, unnoticiero o una novela. Sin embargo, MPEG utiliza la palabra programa paraidentificar una única emisora o canal.

A continuación analizaremos distintos aspectos necesarios para podercomprender cómo se realiza el multiplexado y la sincronización del audio y delvideo. Si se desea un estudio más detallado, consultar [JACK2001],[TEKTRONIX97] y [SARGINSON1996].

Trenes de programa y de transporteMPEG-2 define dos alternativas para el multiplexado. Una de ellas se llama

tren de transporte, a la otra se la denomina tren de programa. Cada una estáoptimizada para determinadas clases de aplicaciones.

Un tren elemental empaquetado (Packetised Elementary Stream - PES) es unaestructura de datos básica común a la organización de los trenes de programa yde transporte. Un paquete PES se genera empaquetando los trenes continuos deaudio y video comprimido.

Tren de programaEste multiplexado se basa en el único definido por MPEG-1 y sólo puede estar

compuesto por un único programa. La definición de MPEG-2 utiliza una sintaxismodificada que permite nuevas funcionalidades como, por ejemplo laescalabilidad. El propósito de este multiplexado es el almacenamiento yrecuperación de video en medios digitales.

Un tren de programa debe utilizarse en ambientes libres de error, pues esbastante susceptible a los errores. Uno de los motivos es que los trenes de

69 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 70: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

programa están compuestos de una sucesión de paquetes relativamente largos.Cada paquete comienza con un encabezado. Si se produce un error en elencabezado, posiblemente cause la pérdida del paquete completo. Como lospaquetes de un tren de programa pueden contener varios kilobytes de datos (hastaun máximo de 64), la pérdida de un único paquete podría representar un graveproblema. El otro motivo es que los paquetes pueden ser de longitud variable, locual le impide a los decodificadores la predicción de las finalizaciones y comienzosde éstos. Por lo tanto, los decodificadores deberán obtener esta información delencabezado de cada paquete. Si se corrompe el campo que almacena lainformación de la longitud del paquete, se perderá el sincronismo, y la informaciónde al menos un paquete.

Los decodificadores de MPEG-2 pueden reproducir todos los trenes MPEG-1.Sin embargo, MPEG-2 incluye varias características no soportadas por MPEG-1.Algunas de ellas son la encriptación (scrambling) de los datos, la asignación deprioridades a los paquetes, información de copyright, etc.

Tren de transporteUn único tren de transporte puede contener varios programas independientes.

Por lo tanto, este modo de multiplexado está dirigido para aplicaciones quenecesiten soporte para múltiples programas, tales como la transmisión detelevisión.

Los trenes de transporte están compuestos de una sucesión de paquetes delongitud fija de 188 bytes, llamados paquetes de transporte. La utilización depaquetes cortos y de longitud fija indica que los trenes de transporte no son tansensibles a los errores como lo son los trenes de programa. Esto hace que lostrenes de transporte sean aptos para la utilización en ambientes propensos aerrores, como transmisión de televisión —tanto satelital como por cable—,transmisión por redes, etc.

Podría parecer que los trenes de transporte son una mejor opción que lostrenes de programa, pues son capaces de transmitir múltiples programas y sonmenos susceptibles a los posibles errores. Sin embargo, el multiplexado de lostrenes de transporte es mucho más complicado que el multiplexado de los trenesde programa, y del mismo modo es más difícil crearlos y demultiplexarlos.

Unidades de presentación y de accesoSe le llama unidad de presentación (presentation unit) a cada imagen o bloque

de sonido decodificado, según se trate de video o audio respectivamente. Loscodificadores comprimen cada unidad de presentación generando las llamadasunidades de acceso (access unit). Cabe destacar que las unidades de acceso devideo no son de un tamaño fijo, sino que depende de qué clase son —I, P, B o D—y del contenido de la imagen. Cada unidad de acceso de audio contienegeneralmente algunas decenas de milisegundos de audio comprimido.

70 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 71: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

El resultado de una codificación MPEG de una secuencia de video es unasucesión de unidades de acceso de video. A esta sucesión se la denomina trenelemental de video (video elementary stream).

Análogamente, el resultado de codificar audio mediante MPEG, es unasucesión de unidades de acceso de audio. A esta sucesión se la llama trenelemental de audio (audio elementary stream).

Trenes elementales empaquetados (PES)En la creación de cualquiera de las dos clases de multiplexado de MPEG-2,

cada tren elemental debe convertirse en un tren elemental empaquetado (PES).Un PES está compuesto estrictamente de una sucesión de paquetes PES.

Un paquete PES está compuesto de un encabezado y a continuación unbloque de datos (payload). El payload consiste simplemente de bytes de datostomados secuencialmente del tren elemental original. No existe ningúnrequerimiento en la alineación del comienzo de una unidad de acceso con elcomienzo del payload de un paquete PES. De este modo, una nueva unidad deacceso puede comenzar en cualquier punto del payload de un paquete PES.También es posible que un paquete PES contenga varias unidades de accesopequeñas.

Los paquetes PES pueden ser de longitud variable hasta un máximo de 64kilobytes —una excepción a esto es un paquete PES de video en un tren detransporte, que no posee longitud máxima. El diseñador de un multiplexor MPEG-2tiene la libertad de elegir la longitud de los paquetes.

El encabezado de un paquete PES posee una gran cantidad de campos. Acontinuación describiremos los más importantes.

Packet start code prefix (código prefijo de comienzo de paquete):Este campo de 24 bits posee un valor fijo de 000001H y, en conjunto conel campo stream ID, indica el comienzo de un paquete. stream ID (identificador de tren): Este campo de 8 bits distingue lospaquetes PES pertenecientes a distintos trenes elementales. Flags (banderas): Las banderas son bits que se utilizan para indicar lapresencia o ausencia de varios campos opcionales que puede incluir unpaquete PES. Estos campos opcionales pueden contener información decopyright, prioridad relativa, encriptación de datos, etc. Hay una banderaque consiste de dos bits e indica la presencia o ausencia de estampillasde tiempo. Un valor de 10 indica la presencia de un campo que contieneuna estampilla de tiempo de presentación (Presentation Time Stamp -PTS) dentro del encabezado. Un valor de 11 indica la presencia de uncampo PTS y de un campo que contiene una estampilla de tiempo dedecodificación (Decoding Time Stamp - DTS). Un valor de 00 indica laausencia de ambos campos. Las estampillas de tiempo conforman elmecanismo que asegura el sincronismo entre los trenes elementalesrelacionados. PES header data length (longitud de los datos del encabezado PES):Este campo de 8 bits indica la cantidad de bytes utilizados en campos

71 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 72: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

opcionales del encabezado PES.

Multiplexado del tren de programaEn un tren de programa, los paquetes PES obtenidos de los distintos trenes

elementales se agrupan en packs. Un pack está compuesto de un encabezadopack (pack header), un encabezado de sistema (system header) opcional y unnúmero arbitrario de paquetes PES, tomados secuencialmente de cualquiera delos trenes elementales, en cualquier orden. No existe ninguna restricción en lalongitud de un pack, excepto que debe ocurrir un encabezado pack al menos cada0.7 segundos. Esto se debe a que los encabezados de sistema contieneninformación acerca del tren de programa —máxima velocidad de transferencia,cantidad de trenes elementales de audio y de video, información de temporización,etc. Un decodificador puede utilizar esta información para determinar si es capazde decodificar el tren de programa o no.

Multiplexado del tren de transporteUn tren de transporte puede contener muchos programas diferentes, y cada

uno puede utilizar un factor de compresión y un bit rate que pueden variardinámicamente, siempre y cuando el bit rate total se mantenga constante. A estose lo denomina multiplexado estadístico, y permite que un programa difícil decomprimir ocupe ancho de banda de otro que esté manipulando información másfácil de comprimir. Algunos programas pueden estar protegidos de modo tal quesólo puedan ser vistos por aquellos clientes que hayan pagado alguna tarifaadicional. Para llevar a cabo esto, el tren de transporte puede contener informaciónde acceso condicional (Conditional Access - CA) dentro de la informaciónespecífica de programa (Program Specific Information - PSI).

El multiplexado del tren de transporte consiste estrictamente de paquetes detransporte de longitud fija y corta —188 bytes. Un paquete de transporte estáconstituido por un encabezado de 4 bytes, seguido de un campo de adaptación, unpayload o ambos. En un tren de transporte, los paquetes PES provenientes de losdistintos trenes elementales se dividen entre los payload de varios paquetes detransporte. Esta división está sujeta a dos restricciones: 1) el primer byte de cadapaquete PES debe comenzar en el primer byte del payload de un paquete detransporte; 2) Un paquete de transporte puede llevar datos de sólo un paquetePES. En realidad, cada una de estas restricciones implica a la otra, pero seespecifican las dos para una mejor comprensión.

Es muy difícil que un paquete PES pueda dividirse exactamente en un númeroentero de paquetes de transporte. Generalmente, el último paquete de transporteno podrá completar su payload de 184 bytes. Para respetar las dos restriccionesanteriores y teniendo en cuenta que los paquetes de transporte son de longitudfija, el espacio que sobra simplemente se descarta mediante el campo deadaptación de una longitud acorde.

72 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 73: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

Todos los PES que deben ser multiplexados juntos se convierten en paquetesde transporte de este modo. Un tren de transporte se genera tomandosecuencialmente los paquetes de transporte resultantes. Dentro del tren detransporte también pueden haber paquetes de transporte con información deservicio y paquetes nulos. No existe ninguna restricción en cuanto al orden en quese agrupan los paquetes de transporte dentro del multiplexado, excepto que serespete el orden cronológico de los paquetes pertenecientes al mismo trenelemental.

Encabezado del paquete de transporteCada paquete de transporte comienza con un encabezado de 4 bytes. De

todos los campos que posee, analizaremos los más importantes. Sync Byte (byte de sincronización): Es el primer byte del encabezadodel paquete y siempre contiene el valor 47H (01000111 en binario). Sibien este valor puede repetirse dentro de un paquete de transporte, elhecho de que se repetirá cada 188 bytes le permite a los decodificadoresajustarse a esta frecuencia para poder identificar los comienzos de cadanuevo paquete de transporte. PID (Packet IDentifier - identificador de paquete): Este campo de 13bits se utiliza para distinguir los paquetes de transporte que contienendatos de un tren elemental de aquellos que contienen datos de otrostrenes elementales. De los 213 8192 valores posibles, 17 estánreservados. De este modo, son 8175 los valores que se le puedenasignar a los distintos trenes elementales, y por lo tanto esta es lacantidad máxima de trenes elementales distintos que pueden componerun tren de transporte. Payload Unit Start Indicator (indicador de unidad de comienzo): Elsignificado de este bit es dependiente del payload. Para datos de unpaquete PES, un 1 indica que el primer byte del payload es también elprimer byte del paquete PES. Para datos PSI, un 1 indica que el bloquede datos del paquete contiene el primer byte de una sección PSI. Continuity Count (contador de continuidad): Este campo de 4 bits seincrementa con la ocurrencia de paquetes pertenecientes al mismo trenelemental (paquetes con el mismo PID). Esto le permite a losdecodificadores, detectar la pérdida de los paquetes de transporte yeventualmente corregir —u ocultar— los errores. Cuando se llega almáximo, la cuenta vuelve a cero.

Información específica de programa (PSI)Dentro de un tren de transporte, cada paquete de transporte posee un PID que

indica el origen de los datos de su payload. Pueden haber muchos treneselementales que conformen varios programas distintos. Para poder discernir cuáltren elemental pertenece a cuál programa, se incluye información adicional dentrodel tren de transporte, para hacer explícita la relación entre los programas

73 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 74: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

disponibles y los PID de los trenes elementales que los componen. Esainformación adicional se denomina PSI y debe estar presente en cada tren detransporte.

La PSI especificada por MPEG-2 está compuesta por cuatro tablas.1. PMT (Program Map Table - tabla de mapeo de programa): Cada

programa posee una PMT asociada. Esta tabla brinda detalles acerca delos trenes elementales que lo comprenden. Además, la PMT puedecontener descriptores que ofrecen información adicional, como porejemplo parámetros de codificación de audio y de video, identificación delenguaje, detalles de acceso condicional, información de copyright, etc.

2. PAT (Program Association Table - tabla de asociación de programa):Esta tabla contiene una lista de todos los programas disponibles en eltren de transporte. Esta tabla siempre se encuentra en los paquetes detransporte que poseen el PID igual a cero. Por cada programa listado, seinforma el PID de la PMT que le corresponde.

3. NIT (Network Information Table - tabla de información de red): Elprograma número cero posee un significado especial dentro de la PAT.Se utiliza para apuntar a la NIT. Esta tabla es opcional y su contenido esprivado —definido por el usuario, no por MPEG. Cuando esta tabla estápresente, brinda información física acerca de las redes que transportan eltren de transporte —frecuencias de los canales, características demodulación, etc.

4. CAT (Conditional Access Table - tabla de acceso condicional): Sialgún tren elemental dentro del tren de transporte está encriptado,entonces esta tabla debe estar presente. Brinda detalles acerca delsistema de scrambling utilizado y provee los PID de los paquetes detransporte que contienen acceso condicional.

Buffers del codificador y del decodificadorAnteriormente hemos mencionado que no todas las unidades de acceso de

video son del mismo tamaño. Esto depende de la clase de cuadro que representan—I, P, B o D— y del contenido de la imagen. Por lo tanto, un codificador de videogenera un número de bits variable por imagen. Este bit rate variable generalmentese suaviza por medio de un buffer que actúa como una cola —buffer First In FirstOut.

Se puede pensar que la disposición de las celdas está ordenada alrededor dela circunferencia de un reloj de agujas —cola circular. Una de las agujasrepresentará al puntero de escritura y la otra al puntero de lectura. El puntero deescritura no se mueve alrededor del reloj a una velocidad constante, sino queavanza sobre el reloj a pasos de tamaño variable, pues cada paso representa laescritura de una unidad de acceso completa. El puntero de lectura gira siguiendoal de escritura, pero a una velocidad constante, de modo tal de leer los datos delbuffer a un bit rate constante. En el codificador hay una realimentación queasegura que el puntero de escritura esté siempre por delante del de lectura, pero

74 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 75: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

no tanto como para que se produzca un overflow.Entonces, la función del buffer del codificador es suavizar la salida de video

para producir un bit rate constante. Este nuevo tren elemental de video de bit rateconstante se transmite a través de un multiplexado de tren de transporte MPEG-2hacia un decodificador de video. El decodificador de video también posee un bufferque actúa como una cola. Teóricamente, el buffer del codificador y el deldecodificador son del mismo tamaño. En el buffer del decodificador, es el punterode escritura quien gira a velocidad constante, a medida que escribe los datos quellegan con un bit rate constante. Detrás de éste, gira el puntero de lectura, que semueve alrededor de la cola circular de un modo irregular, dependiendo del tamañode las unidades de acceso. Realiza un movimiento por cada período de imagen,de este modo se elimina una imagen del buffer, se decodifica y se presenta alusuario.

Es fundamental que el decodificador elimine las unidades de acceso del bufferprecisamente en el momento adecuado. Si el decodificador lee unidades deacceso del buffer demasiado temprano, se producirá un underflow en el buffer; silo hace demasiado tarde, se producirá un overflow.

En la práctica, MPEG-2 define un sistema de estampillas de tiempo yreferencias de reloj, que le permiten al decodificador determinar el momentopreciso en el cual debe eliminar una unidad de acceso del buffer. Un decodificadorque utilice las estampillas de tiempo de un modo adecuado podrá presentar lasimágenes decodificadas en sincronismo con el audio decodificado sin sufriroverflow o underflow en el buffer.

Estampillas de tiempo y referencias de relojEn la figura 39 [SARGINSON1996] se puede observar un decodificador de

MPEG sencillo capaz de extraer y reproducir video y audio, ya sea desde un trende programa o desde un tren de transporte. Los interruptores están controlados demodo de identificar los paquetes —de transporte dentro de un tren de transporte olos paquetes PES dentro de un tren de programa— que contienen los datos devideo o audio de los trenes elementales deseados. Un interruptor sólo permitealmacenar dentro del buffer aquellos bytes de datos que provengan de los treneselementales correctos. Cuando se le solicita, el decodificador de video toma unaunidad de acceso de video del buffer, la decodifica y la muestra en pantalla.Análogamente, el decodificador de audio puede decodificar cada unidad de accesode audio y reproducir algunos milisegundos de audio.

75 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 76: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

Figura 39: Decodificador de MPEG.

Un decodificador podrá decodificar cada unidad de acceso de acuerdo aestampillas de tiempo. Éstas determinan el momento exacto en el cual una unidadde acceso debe ser eliminada del buffer y decodificada. Un decodificador que haceun uso correcto de las estampillas de tiempo, podrá decodificar las unidades deacceso manteniendo el sincronismo con los demás trenes elementales quecomponen el programa.

Una estampilla de tiempo es, básicamente un valor que representa un tiempo.Una función del multiplexor es asignarle estampillas de tiempo a las unidades deacceso que produce un codificador. Para realizar esto, un codificador debe tenerun reloj de referencia. El tiempo actual se mantiene gracias a un reloj precisodentro del multiplexor. Cada vez que se genera una nueva unidad de acceso, se leasigna una estampilla de tiempo basada en el tiempo actual.

Para poder interpretar las estampillas de tiempo, el decodificador debe tener supropio reloj. De este modo, el decodificador podrá determinar exactamente en quémomento decodificar una unidad de acceso en particular. Es fundamental que elreloj del decodificador esté en exacto sincronismo con el reloj del codificador. Estose logra incluyendo muestras regulares del tiempo actual del reloj del multiplexor.El decodificador utiliza estas muestras para chequear y corregir su reloj.

Los relojes utilizados tanto en los codificadores como en los decodificadores,no miden el tiempo en horas, minutos y segundos, sino que en unidades de 27MHz. Una estampilla de tiempo es un número de 33 bits que es una muestra de uncontador con una frecuencia de 90 kHz. Esta frecuencia se obtiene dividiendo elreloj de 27 MHz. por 300.

En un tren de programa, al reloj del multiplexor se lo denomina reloj de sistema(system clock). A las unidades de acceso en todos los trenes elementales del

76 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 77: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

programa se les asignan estampillas de tiempo basadas en este reloj de sistema.Dentro del tren de programa se introduce regularmente —en el encabezado de lospaquetes PES— muestras del reloj de sistema, y se utilizan para que el reloj deldecodificador pueda mantenerse sincronizado. A estas muestras se las llamareferencias del reloj de sistema (System Clock Reference - SCR) y deben ocurrirdentro del tren de programa al menos una vez cada 0.7 segundos.

La otra alternativa de multiplexado de MPEG-2, el tren de transporte, puedecontener muchos programas independientes. Cada programa posee su propio relojindependiente, denominado reloj de programa, y no es necesario que estésincronizado con los relojes de los demás programas. A las unidades de accesoque componen un programa se les asignan estampillas de tiempo basadas en elreloj de programa correspondiente. A las muestras de cada reloj de programa selas denomina referencias del reloj de programa (Program Clock Reference - PCR),y se transmiten en el tren de transporte. Estas muestras le permiten aldecodificador sincronizar su reloj con el reloj del programa a decodificar. MPEGrequiere que se envíe una PCR al menos 10 veces por segundo. Para determinarexactamente cuáles paquetes transportan una PCR para un programa enparticular, debe consultarse la PMT de ese programa.

Estampilla de tiempo de presentación (PTS)En realidad, existen dos clases de estampillas de tiempo. La primera y más

importante es la estampilla de tiempo de presentación (Presentation Time Stamp -PTS). Especifica el momento en el cual una unidad de acceso debe eliminarse delbuffer del decodificador, decodificarse y presentarse al usuario. MPEG asume queeste proceso puede llevarse a cabo instantáneamente, sin embargo en la práctica,la transferencia de los datos y la decodificación consumen tiempo, y esresponsabilidad del diseñador del decodificador tener en cuenta estos detalles.

Para muchas clases de trenes elementales, las PTS son las únicas estampillasde tiempo que se necesitan. Sin embargo, para el caso de los trenes elementalesque transportan video, puede necesitarse otro tipo de estampilla de tiempo llamadaestampilla de tiempo de decodificación (Decoding Time Stamp - DTS).

Estampilla de tiempo de decodificación (DTS)Una DTS especifica el tiempo en el cual una unidad de acceso —una imagen—

debe eliminarse del buffer del decodificador y decodificarse, pero no presentada alusuario. La imagen decodificada se almacena temporariamente en un buffersecundario para presentarla en un tiempo posterior. Este tratamiento es necesariosólo para las imágenes de tipo I y P, cuando están separadas por imágenes detipo B.

Una DTS nunca ocurre de modo aislado, sino que siempre acompañada de unaPTS. Aquí, la PTS indica cuándo la imagen decodificada debe ser eliminada delbuffer secundario y presentada al usuario. Por lo tanto, la PTS siempre debe ser

77 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 78: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

mayor que la DTS, pues la presentación de la imagen siempre ocurrirá luego de ladecodificación.

Asignación de estampillas de tiempoNo es necesario que cada una de las unidades de acceso tenga una estampilla

de tiempo asociada. Un decodificador generalmente sabrá por adelantado lafrecuencia con que las unidades de acceso deben ser decodificadas. Por lo tanto,alcanza con asignarle una estampilla de tiempo a las unidades de acceso sóloocasionalmente, simplemente para asegurar que el proceso de decodificaciónmantenga el sincronismo de largo plazo. La restricción que impone MPEG es que,en un PES de audio o de video, debe ocurrir una estampilla de tiempo al menoscada 0.7 segundos.

Tanto en el tren de programa como en el tren de transporte, las estampillas detiempo se transmiten dentro de campos opcionales de los encabezados de lospaquetes PES. Si una unidad de acceso posee una estampilla de tiempo asociada,entonces esta estampilla de tiempo se codifica en el encabezado del paquete PESque contiene el principio de la unidad de acceso.

Librerías de reproducción de video MPEGAquí hablaremos acerca de las librerías de reproducción de video MPEG. Si

bien este formato es un estándar muy conocido y utilizado, no resulta sencilloencontrar en la Internet librerías libres de licencia. Además, de las pocas que sepueden encontrar, no se dispone de una buena documentación. Algunas, como lalibrería mpeglib (mpeglib.sourceforge.net), están desarrolladas para un sistemaoperativo en particular —Linux—, lo cual reduce el campo de utilización. La libreríaSMPEG (www.lokigames.com) es multiplataforma, pero no todas lasfuncionalidades están implementadas para cada una de las plataformassoportadas —el modo fullscreen sólo está implementado para el driver de video deX11. Más grave aún, la librería libmpeg2 (libmpeg2.sourceforge.net) sóloimplementa la decodificación de video, sin tener en cuenta el audio.

Más allá de los problemas mencionados, una librería nos ahorra mucho tiempoen el desarrollo de un reproductor de video. No sería viable llevar a cabo undesarrollo desde cero ("from scratch"), si es que se desea terminar el proyecto enun tiempo moderado. Para esta clase de desarrollos se necesita mucho tiempo,muchos recursos humanos, mucho equipamiento y sobre todo un profundoconocimiento del formato.

Si se opta por la utilización de una librería, los requerimientos para llevaradelante el proyecto se reducen notablemente. En cuanto a los conocimientos, nosería necesario un manejo de los detalles de bajo nivel del formato, ya que lalibrería se encarga de eso.

A continuación estudiaremos la librería SMPEG y analizaremos brevemente sufuncionamiento mediante un reproductor de videos.

78 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 79: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

Librería SMPEGLa librería SMPEG (SDL MPEG), de Loki Software, es el resultado de un

proyecto Open Source y se ofrece bajo la licencia pública LGPL. Está basada en elsoftware de decodificación de video MPEG mpeg_play v2.2 —de UC Berkeley— yen el decodificador de audio MPEG SPLAY —creado por Woo-jae Jung.

SMPEG es capaz de reproducir video y audio MPEG en sistemas Pentium II osuperiores, pues en sistemas más lentos no se logra un desempeño satisfactorio.A la fecha del último release —versión 0.4.4, 28 de septiembre de 2000— sólo sehabía testeado en el sistema operativo Linux. La única documentación de la quese dispone se encuentra en el archivo smpeg.h para la interfase en C y en losarchivos MPEG*.h para la interfase en C. Todos estos archivos puedenencontrarse en el directorio librerias dempeg\www.lokigames.com\smpeg-0.4.4. Cabe destacar que la última versiónde esta librería requiere la versión 1.2.0 o posterior de la librería SDL (SimpleDirectMedia Layer - www.libsdl.org) para poder compilar.

SDL brinda una API que provee facilidades para la programación multimedia—teclado, mouse, joystick, audio, hardware 3D via OpenGL, etc. Está escrita en C,pero posee bindings para otros lenguajes —C#, Java, Perl, etc. Además, laversión actual soporta varios sistemas operativos tales como Windows, Linux,Solaris, QNX y otros. La documentación puede encontrarse en los archivos *.h,situados en el directorio librerias dempeg\www.lokigames.com\SDL\SDL-1.2.8\include, o en formato htmlmediante el archivo index.html, situado en el directorio librerias dempeg\www.lokigames.com\SDL\SDL-1.2.8\docs.

Veamos ahora cómo utilizar las funcionalidades más importantes de SMPEGmediante la implementación de un reproductor de videos. Este programa, MPEGplayer, corre sobre sistemas Windows y posee una interfase gráfica que permiteun control intuitivo (figura 40). En el extremo superior izquierdo se encuentra unmenú principal con dos ítems: File y About. El primero de ellos se utiliza para: abrirun archivo (File | Open...) o para salir de la aplicación (File | Quit). El segundo,simplemente presenta una ventana con información acerca del programa. Enprincipio, los botones Play, Pause, Stop y Go to new position se encuentrandeshabilitados. Una vez que se abre un archivo, se habilita el botón Play. Alpresionar este botón, comienza la reproducción del archivo y se habilitan todos losdemás botones. Si se presiona nuevamente este botón durante una reproducciónen curso, ésta comenzará nuevamente desde el principio. Si se presiona el botónStop, se detiene la reproducción y queda habilitado sólo el botón Play (el sistemaqueda en el mismo estado que luego de abrir un archivo). El botón Pause se utilizapara detener temporariamente la reproducción, de modo que si luego se presionanuevamente el botón Pause —o el botón Play— se reanuda la reproducción encurso. El botón Go to new position se utiliza en conjunto con la barra de

79 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 80: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

desplazamiento New position, que está situada arriba de él. La barra de progresoCurrent position indica la posición actual dentro del stream (cuánto se ha reproducidohasta ese momento). Al presionar el botón Go to new position, se desplaza laposición actual dentro del stream según el valor del indicador de la barra dedesplazamiento New position, y la reproducción continúa desde ese punto. A modode ejemplo, si en una reproducción en curso se sitúa el indicador de la barra dedesplazamiento New position en el centro y luego se presiona el botón Go to newposition, la reproducción seguirá desde la mitad. A la derecha del botón Stop seencuentra otra barra de desplazamiento (Volume), pero ésta se utiliza paradisminuir —hacia la izquierda— o incrementar —hacia la derecha— el volumen.Más a la derecha se encuentra una casilla de verificación (Loop stream) que seutiliza para configurar el modo continuo, lo cual indica si luego de finalizar unareproducción comenzará de nuevo automáticamente. En el extremo derecho sepueden apreciar varios datos internos del stream:

Total time: indica la duración total de reproducción, en segundos. Current time: indica cuánto se ha reproducido hasta el momento, ensegundos. Has video: indica si el stream contiene información de video. Has audio: indica si el stream contiene información de audio. Video width: indica el ancho original del video. Video height: indica el alto original del video. Current FPS: indica la cantidad actual de cuadros por segundo (FramesPer Second).

Una vez que se ha comenzado con una reproducción de video, puedemodificarse el tamaño de la ventana que lo muestra de dos formas. Una es pormedio del botón de maximizar/restaurar, que es el botón central de los tres que seencuentran en el extremo superior derecho. La otra es llevando el puntero haciauno de los límites de la ventana y manteniendo presionado el botón principal delmouse arrastrar hasta obtener el tamaño deseado.

Figura 40: MPEG player.

Cabe destacar que este programa también es capaz de reproducir archivos deaudio en formato MP3. Sin embargo, la librería tiene algunos pequeños problemas.

80 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 81: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

Si se abre un archivo de audio MP3 codificado con bitrate variable (vbr), lainformación del tiempo total de duración que se obtiene no es el correcto. Por otrolado, si el archivo de audio MP3 que se abre fue codificado con bitrate fijo, esposible que el audio se perciba saturado. Para poder minimizar este últimoproblema, se recomienda bajar el volumen del reproductor y aumentar el volumenexterno (del equipo de audio).

A continuación se muestran las líneas de código más importantes de esteprograma.

// Initialize SDL

this-InitializeSDL();

// Create an MPEG stream

this-mpeg SMPEG_new((char*) this-getFilename().c_str(), &this-info, (int) this-getUseAudio());

// Set up video display

this-SetupVideo();

// Play

SMPEG_play(this-mpeg);

La primer línea llama a un método que se encarga de la inicialización de audioy video de la librería SDL.

La segunda línea invoca a una función que crea el stream MPEG. El primerparámetro de esta función representa el nombre del archivo que se deseareproducir y el segundo es un parámetro de salida en el que se almacenaráinformación relacionada con el stream —ancho y alto del video, tiempo dereproducción total y transcurrido, cuadros por segundo, etc.

La tercer línea llama a un método que, utilizando información obtenida pormedio de SDL, prepara a la librería SMPEG para poder llevar a cabo unareproducción de audio, video o ambos, según sea el caso.

Por último, la cuarta línea es la más importante, pues esta llamada es la queefectivamente se encarga de la reproducción. Internamente, mediante la funciónSDL_CreateThread de la librería SDL, se crean dos threads: uno para la decodificacióndel audio y otro para la de video. La sincronización de estos dos threads es unatarea que lleva a cabo internamente la librería SMPEG.

Si se desea examinar el código completo, éste se encuentra en el directorioprogramacion\mpeg\smpeg\Borland.

81 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación

Page 82: Proyecto final   compresión de imágenes y video

Compresión de imágenes y video (formato MPEG2) Fernando Martín Pap

BIBLIOGRAFÍA

[BOUMAN2001] Prof. Charles A. Bouman. "Achromatic Baseline JPEGEncoding Lab", abril de 2001. Purdue University: Digital Image ProcessingLaboratories.

[BS1995] C. Wayne Brown, Barry J. Shepherd. "Graphics File Formats:Reference and Guide", 1995. Prentice Hall.

[CRRE] Fredy Fabian Cuello Rojas, Juan Carlos Rueda Erazo. "Compresiónde Video Digital Bajo Los Estándares MPEG".http://www.fuac.edu.co/autonoma/pregrado/ingenieria/ingelec/proyectosgrado

[EKSTRAND2002] Per Ekstrand. "BANDWIDTH EXTENSION OF AUDIOSIGNALS BY SPECTRAL BAND REPLICATION", 2002. CodingTechnologies.

[GHANBARI2003] Mohammed Ghanbari. "Standard Codecs: ImageCompression to Advanced Video Coding", 2003. Institution of ElectricalEngineers.

[JACK2001] Keith Jack. "Video Demystified (A Handbook for the DigitalEngineer)", 2001. LLH Technology Publishing.

[LIOU2001] Dr. Der-Ming Liou. "Entropy Coding", 2001. Institute of HealthInformatics, National Yang-Ming University.

[MS] Marcus Magnor, Philipp Slusallek. "The Human Visual System".[NAVE2005] Carl Rod Nave. "HyperPhysics", 2005. Georgia State University.

http://hyperphysics.phy-astr.gsu.edu/hbase[PAN1996] Davis Pan. "A Tutorial on MPEG/Audio Compression", 1996.

Motorola Inc.[RY1990] K. R. Rao, P. Yip. "Discrete Cosine Transform: Algorithms,

Advantages, and Applications", 1990. Academic Press.[SARGINSON1996] P.A. Sarginson. "MPEG-2: Overview of the systems

layer", 1996. British Broadcasting Corporation.[TEKTRONIX97] "A GUIDE TO MPEG FUNDAMENTALS & PROTOCOL

ANALYSIS (Including DVB and ATSC", 1997. Tektronix.[USEVITCH2001] Bryan E. Usevitch. "A Tutorial on Modern Lossy Wavelet

Image Compression: Foundations of JPEG 2000", septiembre de 2001.IEEE SIGNAL PROCESSING MAGAZINE, pág. 22.

[WHITTLE2003] Robin Whittle. "Lossless Compression of Audio", 2003.http://www.firstpr.com.au/audiocomp/lossless

[WIKIPEDIA2005] "Psychoacoustics". Wikipedia, 2005.http://en.wikipedia.org/wiki/Psychoacoustics

82 U. N. S. – Depto. de Cs. e Ing. de la Computación – Ing. en Sistemas de Computación