Práctica 3 Codificación de vídeo en formato MPEG-1

Anuncio
Práctica 3
Codificación de vídeo en formato
MPEG-1
3.1.
Objetivo de la práctica
La práctica tiene los siguientes objetivos:
Conocer en detalle la estructura de un GOP (Group of Pictures) en codificación
MPEG-1.
Evaluar la influencia de la composición del GOP en la calidad de la trama de
vídeo codificada en MPEG-1, para una tasa binaria fija, a través del análisis de
la relación señal/ruido de pico (PSNR).
Evaluar la influencia del tamaño de los macrobloques en los cuadros B y P en
la calidad de la trama de vídeo codificada en MPEG-1, también para una tasa
binaria fija dada.
Como resultado de la práctica, el alumno deberá mostrar, mediante gráficas generadas con MATLAB, la forma de las curvas que se solicitan, acompañadas de los
comentarios que el alumno considere oportunos como consecuencia del análisis de los
resultados.
3.2.
Material necesario
El material necesario para la realización de la práctica es el siguiente:
Un ordenador, con las siguientes aplicaciones instaladas:
• MATLAB (incluyendo el toolbox de Image Processing)
• La aplicación LSX-MPEG Encoder, encargada de realizar la codificación
en formato MPEG-1.
23
3.3. RESULTADOS DE LA PRÁCTICA
• La aplicación Video Editor, de MediaStudio Pro, para extraer imágenes de
las secuencias AVI y MPEG-1, y almacenarlas como ficheros independientes, en formato BMP (legible para MATLAB).
Una secuencia de prueba, en formato AVI.
3.3.
Resultados de la práctica
Como resultado de la práctica se debe entregar una memoria que incluya:
El programa MATLAB.
Las gráficas que muestran la evolución de la calidad de la secuencia codificada
con las diferentes estructuras de GOP y de tamaño de macrobloque en los
cuadros P y B en el proceso de optimización.
Las gráficas que muestran la evolución de la relación señal/ruido de pico (PSNR)
para la secuencia final codificada en MPEG-1 con las condiciones óptimas halladas.
3.4.
Descripción técnica previa
Tal como se comentó en la asignatura de teoría, el sistema de codificación MPEG1 está estructurado en seis niveles:
1. Nivel de secuencia.
2. Nivel de GOP.
3. Nivel de imagen.
4. Nivel de tira.
5. Nivel de macrobloque.
6. Nivel de bloque.
3.4.1.
El nivel de GOP
La función que permite el nivel de GOP es acceder de manera aleatoria a los
diferentes cuadros de vídeo de la secuencia, que se agrupan en estructuras con entidad
independiente: los GOP.
Todo GOP comienza con un cuadro B (predicción bidireccional) o I (predicción intraframe), y termina con un cuadro B o un cuadro P (predicción interframe). Ejemplos
de posibles GOP son:
24
Lab. de Tecnologías de Audio y Vídeo. SSR-ETSIT-UPM
PRÁCTICA 3. CODIFICACIÓN DE VÍDEO EN FORMATO MPEG-1
. . . BP BBBP BBIBBBP BBBP
BBBP BBIBBBP B . . .
GOP
. . . BP BB IBBP BBP
BBP BB IBBP B . . .
GOP
En el caso del primer ejemplo, los dos cuadros B anteriores al I pueden depender:
a) Exclusivamente de los cuadros I y P del GOP al que pertenecen, denominándose
en este caso GOP cerrado.
b) De los cuadros I y P tanto del GOP al que pertenecen, y del cuadro P del GOP
anterior, denominándose GOP no cerrado.
Habitualmente, la trama MPEG-1 incluye la transmisión periódica de un GOP
cerrado cada cierto intervalo de tiempo para permitir la resincronización completa de
la trama.
El tamaño mínimo de GOP es 1 (un cuadro I), en tanto que el tamaño máximo
no está especificado, y depende del número de cuadros B, P o D1 .
Habitualmente, los codificadores MPEG admiten la especificación de alguno de
sus parámetros, entre los cuales se encuentra:
El número de cuadros B consecutivos en cada GOP.
El número de cuadros P en cada GOP.
El máximo valor de los vectores de movimiento utilizados en la predicción y
compensación de movimiento.
La tasa binaria sostenida de salida.
Etc.
Por ejemplo, especificando un número de cuadros B consecutivos en cada GOP
de 3, y un número total de cuadros P por GOP de 2 se obtienen estructuras cíclicas
del tipo:
. . . BP BBB IBBBP BBBP
BBB IBBBP B . . .
GOP
Resulta evidente que la alteración de los valores de los parámetros anteriores afecta
a la capacidad de compresión del codificador y, con ello, a la calidad de la secuencia
codificada. En este sentido, uno de los parámetros más comúnmente utilizados para
1
Esquema en el que sólo se codifica el coeficiente DC de cada bloque transformado DCT de
8 × 8 píxeles.
Lab. de Tecnologías de Audio y Vídeo. SSR-ETSIT-UPM
25
3.4. DESCRIPCIÓN TÉCNICA PREVIA
evaluar la calidad de la señal resultante es la relación señal/ruido de pico PSNR,
definida como:
FIL-1
COL-1
(NIV − 1)2
PSNR = 10 log
i=0
FIL-1
COL-1
i=0
j=0
j=0
[dB]
|Iorig (i, j, t) − Icod (i, j, t)|2
donde FIL es el número de filas de cada cuadro de imagen, COL el número de
columnas, NIV el número de niveles de gris, Iorig (i, j, t) el píxel situado en la posición espacial (i, j) en la imagen original (sin codificar) en el instante temporal t, e
Icod (i, j, t) igual, pero para la imagen ya codificada. Por tanto, la expresión anterior
evalúa la cantidad de errores cometidos en el proceso de codificación (denominador),
normalizado a una imagen con todos sus píxeles a blanco (NIV − 1) para independizar
la medida de la SNR del nivel de luminosidad de la imagen.
3.4.2.
El nivel de macrobloque
El macrobloque es la unidad utilizada en las tareas de estimación y compensación de movimiento. Típicamente, cada macrobloque se compone de un bloque de
16×16 píxeles de luminancia Y, y de un bloque de 8×8 píxeles para cada una de las
crominancias Cr y Cb, de acuerdo con el esquema de muestreo utilizado de 4:2:0.
La idea básica de todo sistema de compensación de movimiento es la identificación
de las partes de una imagen que incluyen algún tipo de modificación entre dos cuadros
de una secuencia de vídeo (bien consecutivos, o bien distanciados entre sí un cierto
intervalo temporal), con el fin de transmitir exclusivamente la información referente a
dicho cambio, no transmitiendo nada de las zonas que no han experimentado ninguna
modificación. El receptor, pues, reconstruye la imagen a partir de la información de los
cuadros anteriores, ya disponibles en recepción, y de la información recibida respecto a
los cambios, representada por los vectores de desplazamiento y el error de predicción.
El procedimiento habitual para compensar movimiento es por bloques: se dividen
las imágenes de la secuencia de vídeo en bloques de tamaño regular y prefijado (típicamente 8 × 8). Para cada uno de los bloques de la imagen actual It se realiza
una búsqueda para encontrar el bloque más parecido en una imagen anterior It−n
(estimación de movimiento hacia adelante) o en una imagen posterior It+n (estimación de movimiento hacia atrás), utilizadas como referencia (imagen de referencia).
Obviamente, la búsqueda se realiza en un entorno limitado y cercano a la posición
del bloque bajo análisis, ya que la probabilidad de que el bloque haya sufrido un gran
desplazamiento es muy baja (trabajando a 50 o 60 Hz de velocidad de refresco), y el
coste computacional se eleva de manera muy importante a medida que se aumenta
la zona de búsqueda.
En codificación MPEG, la zona de búsqueda es, precisamente, el macrobloque.
Una vez obtenido el bloque más parecido, el desplazamiento se indica mediante un
26
Lab. de Tecnologías de Audio y Vídeo. SSR-ETSIT-UPM
PRÁCTICA 3. CODIFICACIÓN DE VÍDEO EN FORMATO MPEG-1
vector de desplazamiento (también denominado vector de movimiento). Con ello, se
logra codificar toda la información de un bloque mediante dos valores enteros: las dos
coordenadas del vector, cuyas cifras son enteras al indicar, simplemente, el número
de filas y columnas en que se ha desplazado.
El tamaño de la zona de búsqueda de los vectores de desplazamiento se puede
hacer variar, persiguiendo con ello mejorar la calidad de la imagen codificada. Para
una tasa binara fija dada, el aumentar o disminuir la zona de búsqueda puede permitir
compensar mejor el movimiento, logrando con ello reducir la cantidad de información
necesaria para codificar el error de predicción y, con ello, una posible mayor calidad
de la imagen decodificada.
3.5.
Procedimiento a seguir en la práctica
Cada grupo dispondrá de una secuencia de vídeo, en formato AVI, sin comprimir.
Dicha secuencia ha sido digitalizada según la recomendación UIT-R BT.601, con
formato de muestreo 4:4:4 y 8 bits/muestra en cada componente (24 bits/píxel en
total), con 25 cuadros/segundo y reducida en tamaño posteriormente a cuadros de
352 × 288 (formato SIF – Source Input Format).
Se pretende evaluar la dependencia de la calidad obtenida en el proceso de codificación en formato MPEG-1 en función de la estructura de GOP prefijada, y del
tamaño del área de búsqueda de los vectores de movimiento. Para ello, se va a hacer
uso de la aplicación LSX-MPEG Encoder, capaz de codificar secuencias originales
AVI, generando como salida secuencias en formato MPEG-1. La aplicación permite
especificar algunos de los parámetros del codec, suministrando cierta información de
la calidad media y mínima alcanzada en la secuencia codificada final.
Los pasos a seguir en la práctica son los siguientes:
1. Arrancar la aplicación LSX-MPEG Encoder. Para ello, seleccionar en el menú
Inicio la opción Programas – LSX-MPEG Encoder – LSX-MPEG Encoder. En
la pantalla de presentación pulse Try Now.
2. Definir el perfil con el que se va a realizar la codificación. Para lograrlo, seleccionar en el menú File la opción Profile Manager. Aparecerá una nueva ventana,
con el gestor de perfiles de codificación, en el que es necesario seleccionar la
opción MPEG-1 (Recommended for SIF, 352×288 PAL). Dicho perfil genera
un flujo de datos de 1519 kbs, divididos en 1280 kbs para vídeo y 224 kbs para
audio. A continuación, pulsar Load Profile.
3. Seleccionar el fichero de entrada, en formato AVI, que va a ser codificado en
MPEG-1. Para ello, pulsar Browse de la opción INPUT FILE:. Se mostrará una
ventana que permite seleccionar el fichero AVI con la secuencia asignada al
grupo. Una vez seleccionada, se puede visualizar pulsando el botón situado a
la izquierda del nombre de la secuencia, con un triángulo verde.
Lab. de Tecnologías de Audio y Vídeo. SSR-ETSIT-UPM
27
3.5. PROCEDIMIENTO A SEGUIR EN LA PRÁCTICA
4. En la ventana OUTPUT FILE: se muestra el lugar donde se sugiere el almacenamiento del fichero codificado en MPEG-1 resultante. Modifique esta opción
para que el fichero resultante se guarde en el directorio asignado al grupo. Pulse, para ello, Browse de la opción OUTPUT FILE: y seleccione el directorio de
destino y el nombre que se asignará al fichero. Por defecto, la aplicación asigna
el mismo nombre del fichero original, sustituyendo su extensión por m1v.
5. Pulse el botón Advanced. Aparecerá una ventana donde se muestran varias
pestañas que permiten seleccionar diferentes opciones de codificación. Para
esta práctica, sólo se van a modificar las opciones Sequence, para especificar la
estructura del GOP, y Motion Vectors, para especificar el tamaño del área de
búsqueda de los vectores de movimiento.
6. Seleccione la pestaña Sequence. Se mostrará la estructura de GOP sugerida,
que se compone de 3 cuadros P en el GOP, y 2 cuadros B entre cada par de
cuadros P. Acepte esta sugerencia, pulsando Aceptar. A continuación, seleccione
en el menú Action la opción START Encoding (la codificación también se puede
lanzar pulsando el icono de rápido acceso que contiene una flecha verde).
Durante el proceso de codificación, se mostrará la secuencia en proceso de
codificación. Bajo esta ventana, se muestra una barra azul que indica la progresión de la codificación y, bajo esta barra, se muestran otras dos barras verdes
que suministran información de la calidad media e instantánea que se va obteniendo en la secuencia resultante. El parámetro de calidad Q suministrado por
la aplicación LSX-MPEG Encoder está relacionado con la PSNR mediante la
expresión:
PSNR = k log
100
; Q ∈ ; Q ⊂ (0, 100)
100 − Q
Tras codificar completamente la secuencia, se muestran en una ventana algunos
datos finales del fichero obtenido. Anotar los siguiente valores:
Calidad media.
Calidad mínima.
Grado de compresión alcanzado.
7. Repetir los dos puntos anteriores, incrementando en una unidad el número de
cuadros P presentes en el GOP.
Repita el proceso, hasta que observe que la calidad media de la secuencia
resultante no mejora al incrementar en número de cuadros P. Dibuje en una
gráfica la evolución conjunta de la calidad media, calidad mínima y grado de
compresión en función del número de cuadros P presentes en el GOP.
28
Lab. de Tecnologías de Audio y Vídeo. SSR-ETSIT-UPM
PRÁCTICA 3. CODIFICACIÓN DE VÍDEO EN FORMATO MPEG-1
¡Nota importante: No es necesario que guarde en fichero
independiente cada una de las secuencias codificadas con
diferentes valores de número de cuadros P. Simplemente,
anote los valores de calidad media y mínima, y el grado de
compresión alcanzado.!
8. Una vez determinado el número óptimo de cuadros P en la estructura del GOP,
incremente en una unidad el número de cuadros B entre cada dos P.
Repita el proceso, hasta que observe que la calidad media de la secuencia
resultante no mejora al incrementar en número de cuadros B entre cada dos P.
Dibuje en una gráfica la evolución conjunta de la calidad media, calidad mínima
y grado de compresión en función del número de cuadros B entre cada dos P
para el valor de número de cuadros P óptimo averiguado.
9. Una vez determinado el número óptimo de cuadros P y B para la secuencia de
trabajo, se debe proceder a determinar el tamaño óptimo de área de busqueda
de los vectores de movimiento. Para ello, pulsar Advanced y seleccionar la
pestaña Motion Vectors. Anotar los valores de calidad media, mínima y grado
de compresión alcanzado cuando se trabaja con un área de búsqueda de N ×N,
con N =, 8, 16, 24, . . . , 56, 64 simultáneamente tanto en los cuadros P como en
los B. Dibuje en una gráfica la evolución conjunta de la calidad media, calidad
mínima y grado de compresión en función del valor de N. ¿Observa algún efecto
en el proceso de codificación al aumentar el tamaño del área de búsqueda?
10. Almacene en un fichero la secuencia codificada en MPEG-1 para el valor óptimo
de número de cuadros P y B, así como para el tamaño óptimo del área de
búsqueda de los vectores de movimiento. Sobre dicha secuencia, codificada
pseudo-óptimamente, se va a proceder a analizar la evolución del parámetro
PSNR sobre los cuadros que componen la secuencia.
Escriba un programa MATLAB que, para cada cuadro, determine el valor de
PSNR de la señal de luminancia Y . Dado que MATLAB es incapaz de decodificar fichero con formato MPEG-1, es necesario, previamente, convertir el
fichero MPEG-1 en AVI. Para ello, utilice la aplicación Adobe Premiere, capaz
de realizar dicha conversión, mediante los siguientes pasos:
Modifique la extensión *.m1v de la secuencia a *.mpg para que la aplicación Adobe Premiere sea capaz de leer la secuencia codificada en MPEG-1.
Arranque la aplicación Adobe Premiere. Para ello, seleccione en el menú
Inicio la opción Programas – Adobe – Premiere 6.5 – Adobe Premiere
6.5. Al arrancar, la aplicación mostrará un menú de posibles plantillas de
Lab. de Tecnologías de Audio y Vídeo. SSR-ETSIT-UPM
29
3.5. PROCEDIMIENTO A SEGUIR EN LA PRÁCTICA
codificación, en el que es necesario seleccionar DV - Pal — Standard 48
kHz.
Importe la secuencia de vídeo a la barra de tiempos. Para ello, en la ventana
Project, pulse el botón derecho y seleccione en el menú de Import la opción
File. Seleccione la secuencia a convertir, y posteriormente colóquela en la
pista Video 1A.
En el menú File, seleccione Export Timeline – Movie. Aparece una ventana
para asignar un nombre y directorio a la secuencia que se va a crear.
Una vez asignado nombre y directorio, pulse el botón Settings. Aparecerá
una nueva ventana denominada Export Movie Settings. En dicha ventana,
seleccionar:
•
•
•
•
•
File Type: Microsoft AVI.
Embedding Options: None.
Verificar que la casilla Export video está marcada.
La casilla Export audio NO es necesario que esté marcada.
En el desplegable donde pone General, seleccionar Video. En la nueva
ventana, seleccionar:
◦ Compressor: None.
◦ Depth: Millions.
◦ Frame Size: escribir el tamaño original de la secuencia codificada
en MPEG-1.
• Pulsar OK.
• Pulsar Guardar para que se genere la secuencia AVI.
• Salir de la aplicación Adobe Premiere.
El programa MATLAB realizado debe mostrar la evolución del PSNR de la señal
de luminancia de cada cuadro en una gráfica PSNR [dB]-tiempo[mseg]. Dado
que las imágenes están almacenadas en formato true-colour (24 bits/píxel), con
8 bits por cada primario de color RGB, es necesario hacer uso de la ecuación:
Y = 0, 3R + 0, 59G + 0, 11B
Para manejar las secuencias AVI (tanto la secuencia original como la codificada),
MATLAB dispone de funciones que permiten averiguar datos de la secuencia,
leer cuadros de imagen específicos, y acceder a valores concretos de puntos de
la imagen. El siguiente código muestra un ejemplo de líneas de programa que
manejan secuencias AVI:
function ejemploLTAV(NomSecuCod)
%Ejemplo de funcion que lee informacion de una secuencia,
30
Lab. de Tecnologías de Audio y Vídeo. SSR-ETSIT-UPM
PRÁCTICA 3. CODIFICACIÓN DE VÍDEO EN FORMATO MPEG-1
%verifica que su longitud es superior a 10 cuadros y que su tipo
%es TrueColor, calcula y muestra la imagen de luminancia de toda la
%secuencia.
InfoCod = aviinfo (NomSecuCod);
if InfoCod.NumFrames < 10
error (’Secuencia menor de 10 cuadros’);
end
if InfoCod.ImageType ~= ’truecolor’
error (’La secuencia codificada no es TrueColor’);
end
for i=1:InfoCod.NumFrames
fprintf (’Procesando cuadro %d de %d \r’, i, InfoCod.NumFrames);
SecuCod = aviread (NomSecuCod,i);
ImaCod = SecuCod.cdata;
% Y = 0,3 R + 0,59 G + 0,11 B
Luminancia = 0.3.*double(ImaCod(:,:,1)) + 0.59.*double(ImaCod(:,:,2))
+ 0.11.*double(ImaCod(:,:,3));
imshow (uint8(Luminancia));
end
Para calcular la gráfica del parámetro PSNR puede hacer uso de la función
siguiente, que proporciona el valor de PSNR para dos imágenes (original y
codificada) que se le suministra (asumiendo 8 bits/píxel):
function [psnr] = Calcula_psnr(ImaOrigY, ImaCodY)
[fil,col] = size (ImaOrigY);
error = abs (ImaOrigY-ImaCodY);
error2 = error.^2;
errorsum = sum ((sum(error2))’);
psnr = 10 * log10 ((fil*col*255*255)/(errorsum));
11. Explique la evolución del PSNR a la vista de la gráfica obtenida, y vincúlela a
la estructura de GOP que ha utilizado en la codificación.
12. A la vista de los valores de PSNR obtenidos, y teniendo en cuenta los valores de
Q medio y mínimo anotados para la secuencia analizada, ¿se puede determinar
el valor de k en la relación PSNR-Q?
Lab. de Tecnologías de Audio y Vídeo. SSR-ETSIT-UPM
31
Descargar