Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Técnica Operatoria
Tarea 1
La función huffmandict de Matlab genera un diccionario de código Huffman correspondiente a
una fuente con un modelo de probabilidad conocido. Las entradas requeridas son símbolos,
que enumera los distintos valores de la señal que produce la fuente. Para ello se considera una
fuente de datos que produce los siguientes valores:
No existe posibilidad de que una palabra de código forme parte de la otra, puesto que el
código Huffman es un código binario prefijo. Esto quiere decir que no es posible encontrar
ninguna palabra de código perteneciente a un símbolo, como prefijo en cualquiera de las
palabras de códigos utilizadas para representar los demás símbolos.
Mediante la función huffmanenco, es posible codificar una señal utilizando los códigos
Huffman descritos por un diccionario de códigos. En este caso se eligió codificar la secuencia 3
3 1 3 3 3 3 3 2 3 que se repite 50 veces, la cual se creó utilizando la función repmat. De esta
forma la información queda codificada en un vector numérico de fila de 600 columnas,
equivalente a decir 600 bits. Se logra una compresión con respecto a si se utilizasen palabras
de código de igual longitud para codificar.
Todo el proceso descrito puede verse reflejado, en el código de Matlab implementado que se
ofrece en la Fig. 3.
Tarea 2
Se utiliza el software VcDemo para experimentar con diferentes algoritmos de compresión de
imágenes. De la visualización de los resultados de la compresión se desarrollan análisis
cuantitativos y cualitativos.
Claramente se puede apreciar en ambas figuras que el número de bits empleado por cada
muestra es un parámetro que determina la precisión con que se cuantifica y cuanto mayor es,
mayor es la precisión. Esto se debe a que las imágenes en niveles de grises (grayscale)
cuantifican cada píxel con 2n niveles de intensidad, donde n representa la cantidad de bits de
la palabra binaria con que pueden ser representados dichos niveles.
Se puede ver, por ejemplo, que cuando cada muestra se cuantifica con 1 bit y se utilizan solo 2
posibles niveles de intensidad por muestra, no son siquiera apreciables detalles de las
imágenes como el cabello de la chica en la Fig. 4 o la lengua, la cola y la sombra del perro en la
Fig. 5. A medida que se incrementa el bitrate, y por ende la cantidad de niveles de gris usados
durante la cuantificación, se percibe una mejoría en las imágenes.
Fig. 4. Variación del bitrate. (a) Imagen original con 8bpp. (b) - (h) Imagen codificada con 1, 2, 3, 4, 5,
6 y 7bpp.
Fig. 5. Variación del bitrate. (a) Imagen original con 8bpp. (b) - (h) Imagen codificada con 1, 2, 3, 4, 5,
6 y 7bpp.
Se percibe que, en ambas figuras, para un valor del bitrate igual a 5, 6 y 7bpp,
correspondientes a 32, 64 y 128 niveles de cuantificación respectivamente, no se observan
cambios muy significativos entre las imágenes ni con respecto a la imagen original. Esto es
producto de que se conoce, a partir de los mecanismos de la visión humana, que es posible
distinguir sólo alrededor de unos 30 diferentes niveles de gris.
Además, en la Fig. 5 existe algo muy curioso que se diferencia de la Fig. 4. A partir de 4 niveles
de cuantificación en adelante, es posible percibir cada detalle de la imagen Odie256B, debido a
que es una imagen de menor entropía o menos compleja que Lena256B, como muestran los
histogramas de la Fig. 6 obtenidos con el software Matlab para 256 niveles de luminancia.
a b
En la Tabla 1 se muestran tabulados los resultados, en función de los Coding Results y Selected
Uniform Quantizer, tras modificar el bitrate de los Set PCM Parameters del VcDemo en ambas
imágenes.
Tabla 1: Implicación de la variación del bitrate en los parámetros cuantitativos de las imágenes de muestra.
En cada uno de los casos se puede observar información no deseada que contamina la imagen
producto de los errores del canal, lo cual puede interpretarse como ruido sal y pimienta ( Salt
& Pepper), Los píxeles erróneos se presentan como puntos blancos y negros superpuestos
sobre cada imagen. Como es de esperar, a medida que se disminuye la probabilidad de error
en el canal se aprecia una menor afectación en la calidad de la imagen.
Los cambios cuantitativos que se derivan de estos errores en el canal, para una codificación fija
de 5bpp, son mostrados en la Tabla 2. También fueron colocados los datos de la codificación
sin errores a modo de establecer una comparación. A mayor porciento de bits erróneo en el
canal, mayor error cuadrático medio, menor S/N, menor PSNR y, como consecuencia, mayor
degradación de la imagen. En el mejor de los casos simulados, donde la probabilidad de error
en el canal es de 0.0001, los valores de los parámetros analizados son más cercanos al caso en
que no existen errores en el canal.
Tabla 2: Implicación de la inserción de errores en el canal.
Cuando la correlación entre muestras consecutivas es alta y se toma la diferencia entre ellas
como señal a cuantificar, la varianza disminuye reduciéndose el error de cuantificación.
Además, se aprecian en la Tabla 3 otros aspectos positivos como el aumento de la relación
señal a ruido (S/N) y de la relación señal a ruido pico (PSNR), con valores que van de 12.7 a
15.8 dB y de 24.8 a 28.0 dB, respectivamente.
Tabla 3: Incidencia de los modelos de predicción DPCM en los parámetros cuantitativos de la imagen.
Model Varianza del error Ganancia de Error cuadrático S/N [dB] PSNR [dB]
o de predicción Predicción medio
1 504.8 7.9 215.6 12.7 24.8
2 296.5 13.4 186.3 13.3 25.4
3 231.8 17.1 121.1 15.2 27.3
4 222.0 17.9 103.9 15.8 28.0
Algo muy significativo es que, para bajos valores del bitrate en la imagen codificada, los bordes
de los objetos son los más afectados, puesto que son zonas de mayor entropía con respecto al
fondo. Para valores del bitrate superiores a 3bpp, se puede observar mayor nivel de detalle en
dichos bordes, en este caso la silueta del hombre.
En el caso del modelo de una dimensión las líneas son horizontales y más apreciables, como se
muestra en la Fig. 11, donde se mantuvo invariante el porciento de bits erróneos en un 0.05 %,
el bitrate en 4 y el número de niveles en 16. El parámetro variado es el modelo de predicción
para demostrar la diferencia entre el modelo de una sola dimensión y los bidimensionales.
Fig. 12. Variación del bitrate con presencia de ruido. (a) – (b)
Modelo 1 de predicción con bitrate de 3 y 6bpp. (c) – (d)
Modelo 2 de predicción con bitrate de 3 y 6bpp.
Como evidencia la Tabla 5, donde están tabulados los resultados cuantitativos del proceso
anterior, ambos parámetros están relacionados. A mayor factor de calidad, mayor bitrate y,
por tanto, y mejor calidad visual de la imagen. Con el aumento de Q, también aumenta la
relación señal a ruido (S/N) y la relación señal a ruido pico (PSNR), y disminuye el error
cuadrático medio.
Tabla 5: Implicación del valor del factor de calidad en los parámetros cuantitativos de la imagen.
Flat: una matriz de normalización con pesos iguales para todos los coeficientes DCT
(peso=50).
Para una alta compresión con Q=10, se aplicaron cada una de estas matrices y los resultados se
aprecian en la Fig. 14. Fue seleccionado este valor de factor de calidad para hacer más notorio
el efecto de aplicar una u otra matriz.
Los mejores resultados se observan con las matrices Std UV y Standard Y. Con la matriz Flat el
resultado es desfavorable, puesto que, como se mencionó anteriormente, le otorga el mismo
denominador a cada coeficiente y esto juega un papel muy importante en el manejo de la
optimización. Por otra parte, con la matriz HighPass tampoco se obtienen muy buenos
resultados, debido a que contradice completamente al hecho de que el ojo humano es muy
bueno detectando pequeños cambios de brillo en áreas relativamente grandes.
Tablas de Huffman
El estándar JPEG incluye unas tablas de Huffman pre-calculadas en base a las probabilidades de
aparición de cada símbolo estimadas por el grupo creador del estándar. Este tipo de
codificación Huffman con tablas pre-calculadas se denomina codificación de longitud variable
(VLC).
Con un valor fijo de calidad Q = 20 y la menor probabilidad de error de bit posible que se
puede establecer con el software (0.00005), se obtuvieron los resultados mostrados en la Fig.
16 para cada una de las opciones posibles del parámetro Huffman del Set JPEG Parameters. Lo
más apreciable de la Fig. 16 es la respuesta al ruido en cada uno de los casos, mostrándose una
mejoría en los casos donde se utiliza VLC.
Fig. 16. Aplicación de las tablas de Huffman con Q = 20 y un 0.005 % de bits erróneos. (a) FLC. (b)
VLC estándar. (c) VLC optimizada.
En la Tabla 7 se encuentran tabulados los resultados del proceso anterior en lo que respecta a
los parámetros cuantitativos que definen la calidad de la imagen. Los casos más favorables son
aquellos en los que se usa codificación de longitud variable, a pesar de que poseen valores
inferiores de bitrate.
Tabla 7: Implicación del uso de tablas de Huffman en los parámetros cuantitativos de la imagen.
Sin ruido en el canal, el hecho de utilizar codificación con longitud fija o variable no aporta
cambios apreciables a la vista. Solo el bitrate es el parámetro que varía y se comporta de igual
manera que en la Tabla 7, donde sí existe ruido en el canal. Los demás parámetros como el
error cuadrático medio, la relación señal a ruido, la relación señal a ruido pico y el número de
bits erróneos producto de la corrupción del canal, se mantienen invariables.
Suavizado
Si la opción Smooth output está marcada, dentro del Set Smoothing Preferences del parámetro
Smooth, la imagen descomprimida se suaviza un poco para suprimir los artefactos de bloqueo.
Para imágenes con menor calidad o con una alta tasa de compresión, se tiene una mejor
apreciación visual de los efectos de este parámetro. La Fig. 17 es un ejemplo, resultado de
seleccionar o no esta opción de suavizado. La elección no influye en la compresión, sino en la
calidad visual tras la decodificación. Para ello, se eligió un valor fijo de calidad Q = 5.
Fig. 17. (a) Imagen sin suavizado. (b) Imagen con suavizado.
Marcadores
En el módulo JPEG, se pueden inyectar errores en el flujo JPEG real. Esto significa que los
códigos VLC, la información de cabecera y otra información crucial pueden corromperse. Para
bloquear el efecto del empeoramiento progresivo de los errores de decodificación VLC se
pueden insertar marcadores únicos en el flujo de bits JPEG.
Si la opción Restart Marker está seleccionada, dentro del Set Markers After del parámetro
Marker, entonces la periodicidad de estos marcadores se puede seleccionar, a saber cada 10
filas, en cada fila o en cada bloque. El efecto de aplicar o no marcadores, así como la influencia
que tiene la regularidad con que se aplique, se muestra en la Fig. 18. Se eligió una calidad Q =
50 y una probabilidad de bits erróneos de 0.01 %. Se puede observar la robustez ante errores
de este método.
En la Tabla 9 se aprecian los datos ofrecidos a la salida del decodificador para cada una de las
secuencias, los cuales fueron extraídos de la ventana de texto del software.
Tabla 9: Datos ofrecidos por el software sobre las características de las secuencias de video seleccionadas.
Apartado Operation
En el apartado Operation, dentro del Set Mpeg Decoding Parameters, se puede seleccionar
para que el decodificador produzca tres salidas diferentes: Decoded Frames, el video es
descomprimido como lo haría cualquier otro decodificador; Frame Prediction, muestra los
cuadros de vídeo resultado de la predicción sin añadir el error residual de los macrobloque y
permite observar la calidad de la predicción en sí; Coded Difference, muestra únicamente el
error residual encontrado para cada macrobloque, y los macrobloques que han sido
codificados en modo INTRA.
En las Fig. 19 y Fig. 20 se muestra lo obtenido al seleccionar cada una de estas opciones en las
secuencias bike.mpg y Flower.mpg, respectivamente. De forma específica, se muestra solo el
cuadro 90 que es un cuadro bidireccionales o cuadro B. Se puede observar, para ambas
secuencias, como en este cuadro ocurrieron problemas en el caso de la predicción. Además, es
apreciable la poca información que lleva este tipo de imagen, aunque la imagen de la
secuencia flawer.mpg lleva más información que la de bike.mpg.
Apartado Display
El apartado Display permite seleccionar entre tres opciones a la hora de mostrar el video
decodificado. La opción Color display se refiere a en color o escala de grises, en dependencia
de la secuencia de video original; la segunda opción, Motion vector overlay, muestra los
vectores de movimiento sobreimpresionados; y por último, No B frames, evita decodificar los
cuadros de tipo B, para acelerar la decodificación en aquellas máquinas con poca capacidad de
cómputo.
El resultado de elegir ver la secuencia en escala de grises y mostrar los vectores de
movimiento, en la secuencias de muestra bike.mpg, se muestra en la Fig. 21.
Fig. 21. (a) Imagen en escala de grises. (b) Imagen con la representación de los vectores de movimiento.
Apartado Video
El apartado Video indica a qué ritmo se va a decodificar el vídeo, o bien se decodifica cuadro a
cuadro, o se decodifican todos los cuadros sin interrupción. También se puede indicar que se
repita el proceso varias veces, seleccionando la cantidad de Loops deseados.
Fig. 22. Simulación de canales inalámbricos bajo el protocolo HyperLAN. (a) – (b) Simulación para 3 y 5
usuarios.
Tabla 10: Implicación de la simulación de canales inalámbricos en la secuencia de video.
HiperLAN 20 Mbps
Parámetros 3 usuarios 5 usuarios
No. de bits procesados 5140720 5140720
No. de paquetes procesados 438 438
Razón de paquetes erróneos 0.223 0.602
No. De bits erróneos 1145005 3096507
Razón de error de paquetes 0.187 0.507
Paquetes erróneos 0 0
incorregibles
Paquetes de errores no 0 0
detectados
Pérdidas de paquetes por 82 222
conexión
Apartado Save
Save permite definir el nombre de archivo en donde se guardará el resultado de la
decodificación, es decir, el video reconstruido.
Tarea 3
Una vez cargado el ejemplo de compresión de video que brinda el software Matlab se obtuvo
el esquema mostrado en la Fig. 23.
El display Compression Ratio muestra el resultado de calcular cuántos bits se necesitan para
transmitir la información de video codificada del total de bits generados por la fuente de video,
es decir, una medida de la razón de compresión.
Tarea 4
Elecard StreamEye es una poderosa herramienta de software con la que se puede realizar un
eficaz análisis en profundidad de secuencias de vídeo. Proporciona una representación visual
de las características del vídeo codificado y un análisis de la estructura del flujo de MPEG-1/2/4
o AVC/Н.264 Video Elementary Streams (VES), MPEG-1 System Streams (SS), MPEG-2 Program
Streams (PS) y MPEG-2 Transport Streams (TS).
El sistema MPEG establece tres tipos diferentes de cuadros, cada uno con una función
específica. En la Fig. 25 las barras de colores representan el tipo de cuadro, donde el color rojo
se corresponde con los cuadros intra-codificados o cuadros I, el color azul con los cuadros pre-
determinados o cuadros P y el color verde con los cuadros bidireccionales o cuadros B. Las
altitudes de las barras indican el tamaño del cuadro en bytes según el valor numérico
mostrado en el eje de las ordenadas.
Posicionando el cursor encima de las barras de colores se pueden ver un conjunto de datos
como se muestra en la Fig. 26. El parámetro stream identifica el número en el orden de
transmisión de los cuadros I, P o B, es decir, el número de cuadro en el orden del
decodificador; mientras que display indica el número de cuadro en el orden en que deben ser
mostrados. Ambos parámetros, stream y display, difieren en algunas ocasiones como es el
caso mostrado en la Fig. 26. Esto es producto de que el decodificador necesita recibir
previamente los cuadros I de los que dependen los P siguientes y los cuadros I y P, de los que
dependen los B.
El GOP (Group of Picture) se corresponde con el número del grupo de cuadros al que
pertenece la imagen en cuestión. El size hace referencia al tamaño del cuadro en bytes y el
parámetro type al tipo de cuadro, ya sea I, P o B.
Los parámetros offset y time, indican el desplazamiento respecto al comienzo del archivo y el
tiempo en que la imagen es presentada, respectivamente. Por último, mux time representa la
marca de tiempo de presentación.
Los cuadros se agrupan y forman grupos de cuadros que deben empezar y terminar con una
imagen de tipo I. En la secuencia de video analizada están asociados 25 GOPs en total, donde
cada uno cuenta con 32 cuadros.
La diferencia en el size entre las barras de colores de las Fig. 25, Fig. 26 y Fig. 27, está dada por
la razón de compresión de cada tipo de cuadro. Las imágenes intra-codificados tienen una
razón de compresión relativamente baja, ya que estas imágenes se codifican de forma
independiente sin aprovechar ningún tipo de redundancia temporal. Por otro lado, la
codificación de las imágenes pre-determinadas se realiza utilizando compensación de
movimiento forward a partir de una imagen I u otra imagen P previa dando lugar a una razón
de compresión significativamente mayor que la de las imágenes I. La mayor razón de
compresión la presentan las imágenes bidireccionales, ya que se obtienen usando
compensación de movimiento bidireccional a partir de imágenes I o P.
El software permite visualizar la secuencia en este espacio de color, así como cualquiera de sus
componentes por separado. En la Fig. 28 se puede observar una imagen representada en el
espacio de color YUV con sus respectivas componentes Y, U y V. Cuando solo se representa la
componente Y, la imagen representada es una imagen en escala de grises que se interpreta
como el nivel de brillo de la imagen.
Fig. 28. (a) Imagen en el espacio de color YUV. (b) – (d) Componentes Y, U y V de la imagen.
Slice
A partir de la secuencia de muestra seleccionada anteriormente, se intentó mostrar los límites
de los slices seleccionando el botón Slice Boundaries. El resultado fue que en la mayoría de las
imágenes de la secuencia existe un slice por cuadro, es decir, que un solo slice constituye el
cuadro entero como se evidencia en la primera imagen representada en la Fig. 29. En muy
pocos cuadros de la secuencia, como es el caso de la segunda imagen que se observa en la Fig.
29, se muestra una línea azul que divide la imagen en dos slices.
Fig. 29. (a) Imagen con un slice. (b) Imagen con dos slices.
Macrobloques
Una de las claves del éxito de H.264 es la optimización de la cantidad de información residual.
Con intención de disminuir al máximo dicha información, se asignan bloques de diferentes
tamaños a la imagen, según la zona esté más o menos texturizada. Así, zonas en las que existe
una mínima textura, zonas homogéneas de la imagen, tendrán macrobloques del mayor
tamaño posible, 16x16 píxeles. En caso contrario se pueden dividir estos macrobloques en sub-
bloques de 16x8, 8x16, 8x8, etc. que a su vez estos últimos pueden dividirse en 8x4, 4x8 y 4x4
como se muestra en la Fig. 30. Esto permite optimizar la cantidad de información codificada,
comprimiendo las zonas homogéneas, habitualmente background de un frame, y utilizando
más bits, para las zonas con más información, cuya predicción no sea inmediata debido, por
ejemplo, a movimientos. En la Fig. 31 se muestran dos imágenes diferentes de la secuencia
seleccionada, donde el tamaño de los macrobloques varía, tal y como se explicó
anteriormente.
Esto otorga una mayor flexibilidad a la elección del bloque más parecido al bloque codificado,
permitiendo una estimación de movimiento mucho más eficaz. Sin embargo, esta mejora
propicia una mayor complejidad en términos de codificación.
Otra de las opciones relacionadas con este tema, es la apreciación de los tipos de
macrobloques en una imagen a partir de seleccionar el botón MB Types. Luego de aplicarlo en
las mismas imágenes de la Fig. 31, se puede apreciar el resultado en la Fig. 32. En el primer
caso es una imagen P y en el segundo, una B.
Fig. 32. Tipos de macrobloques. (a) Frame P. (b) Frame B.
Los círculos rojos se corresponden con el tipo Intra, que pueden ser de 4x4 o 16x16; los azules,
con Inter (B o P); y los verdes, con Inter B Direct. En el caso de que se un círculo azul con un
cuarto verde, son del tipo Inter B 8x8 with Direct. Los círculos amarillo indican una omisión en
la codificación del macrobloque de la imagen debido a que las diferencias con respecto al
mismo bloque de la imagen anterior son mínimas. Este último se denomina Inter Skip (B o P).
Entonces, de modo general, cada tipo de frame tiene tipos de macrobloque concretos. Por
ejemplo, los frames P tienen macrobloques con predicción forward, macrobloques intra-
codificados, y macrobloques skip, añadiéndose la posibilidad de macrobloques con predicción
backward y bidireccional para los frames B.
Es válido aclarar que los frame I sólo tiene macrobloques I; los P, macrobloques I o P; y un
frame B, macrobloques I o B.
Vectores de movimiento
Las particiones macrobloques H.264 mantiene una de las herramientas más utilizadas en
estándares anteriores, los vectores de movimiento. La misión de dichos vectores es apuntar al
bloque más parecido al que se está codificando en ese momento. Esto permite codificar la
diferencia entre ambos bloques, lo cual supone mucha menor información que enviar el
bloque en sí. Puesto que en el decodificador también se cuenta con los frames previamente
codificados, se puede repetir la misma predicción que en el codificador y, con los pasos
inversos, reconstruir el frame de forma fiable.