Professional Documents
Culture Documents
1. Captura de imagenes 11
1.1. Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.2. Desarrollo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.3. Resultados de la practica . . . . . . . . . . . . . . . . . . . . . . . . 11
3. Operadores puntuales 29
3.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.2. Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.3. Desarrollo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.3.1. Conversion a niveles de gris . . . . . . . . . . . . . . . . . . . 30
3.3.2. Posterizacion . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.3.3. Cambios de brillo y contraste . . . . . . . . . . . . . . . . . . 32
3.3.4. Desplazamientos . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.3.5. Rotaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.4. Resultados de la practica . . . . . . . . . . . . . . . . . . . . . . . . 36
4. Operadores Locales 39
4.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.2. Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.3. Conceptos teoricos previos . . . . . . . . . . . . . . . . . . . . . . . . 39
4.3.1. Filtros FIR digitales . . . . . . . . . . . . . . . . . . . . . . . 39
4.3.2. Propiedad de separabilidad . . . . . . . . . . . . . . . . . . . 41
4.4. Desplazamiento en frecuencia . . . . . . . . . . . . . . . . . . . . . . 43
4.5. Desarrollo de la practica . . . . . . . . . . . . . . . . . . . . . . . . . 44
3
4 INDICE GENERAL
5. Operadores globales 49
5.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5.2. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5.3. Desarrollo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
5.3.1. Visualizacion de la informacion contenida en la FFT . . . . . 50
5.3.2. Eliminacion de componentes frecuenciales . . . . . . . . . . . 52
5.3.3. Eliminacion de componentes suavizada . . . . . . . . . . . . . 52
5.3.4. Filtrado a partir de una respuesta en frecuencia . . . . . . . . 53
5.4. Resultados de la practica . . . . . . . . . . . . . . . . . . . . . . . . 53
6. Diezmado e interpolacion 55
6.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
6.2. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
6.3. Desarrollo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
6.3.1. Diezmado de imagenes . . . . . . . . . . . . . . . . . . . . . . 56
6.4. Interpolacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
6.5. Resultados de la practica . . . . . . . . . . . . . . . . . . . . . . . . 57
7. Interfaces de comunicacion 59
7.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
7.2. Objetivos y motivacion . . . . . . . . . . . . . . . . . . . . . . . . . . 60
7.3. Forma de evaluacion . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
7.4. Plan de actividades . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
7.4.1. Recomendacion UIT-R BT.656 . . . . . . . . . . . . . . . . . 61
7.4.2. Formato del tren de datos comun a los dos interfaces . . . . . 61
7.4.3. Recomendacion UIT-R BT.799 . . . . . . . . . . . . . . . . . 67
7.4.4. Recomendacion UIT-R BT.1120 . . . . . . . . . . . . . . . . 70
7.4.5. Resumen comparativo de los diferentes interfaces . . . . . . . 74
7.5. Bibliografa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
7.5.1. Bibliografa basica . . . . . . . . . . . . . . . . . . . . . . . . 75
7.5.2. Bibliografa complementaria . . . . . . . . . . . . . . . . . . . 75
9. Compensacion de movimiento 85
9.1. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
9.2. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
9.3. Desarrollo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
9.3.1. Codificacion de una imagen P . . . . . . . . . . . . . . . . . . 86
INDICE GENERAL 5
7
8 INDICE DE FIGURAS
Indice de tablas
9
10 INDICE DE TABLAS
Practica 1
Captura de imagenes
1.1. Objetivo
El objetivo de esta practica es comprobar lo habitual y cotidiano que es la imagen
digital y el video digital en el entorno tecnologico en el que nos movemos actual-
mente. Para ello, por una parte se buscaran aplicaciones y sistemas relacionados con
la imagen digital y por otra, se obtendra todo aquel material de vdeo e imagenes
que se utilizara en las practicas de procesado de imagenes a lo largo de todo el
cuatrimestre. Todo este material se podra grabar en el dico duro del servidor tele-
co.uclm.es disponible en el laboratorio de imagen, aunque no esta de mas disponer
de un disquete o PenDrive para transportar los algoritmos o las imagenes que se
desee para la realizacion de las memorias.
1.2. Desarrollo
La primera parte de esta practica consiste en realizar un analisis de los posibles
sistemas y aplicaciones relacionadas con la imagen y el vdeo digital. Los alumnos
haran una lista de aplicaciones y sistemas que obtengan o utilicen en su funciona-
miento imagenes o secuencias digitales, comentandolos muy brevemente.
En segundo lugar, se trata de obtener algunas imagenes digitales con el fin de
utilizarlas en las practicas relacionadas con el procesado digital de imagenes a lo
largo del cuatrimestre. Para dichas practicas, se necesitara el siguiente material:
Los alumnos deberan conseguir este material de la forma que estimen oportuna.
Es aconsejable utilizar tamanos de imagenes del orden de 640x480, tamanos mas
grandes seran mas lentos de procesar, aunque tambien se puede trabajar con ellos.
11
12 PRACTICA 1. CAPTURA DE IMAGENES
En primer lugar, una lista con las formas de adquirir imagenes y secuencias
de vdeo digitales y las aplicaciones y sistemas que las utilicen comentandolas
brevemente.
2.1. Objetivos
MATLAB es un software orientado al calculo matricial. En esta practica se van
repasar sus caractersticas mas destacables y su manejo basico, tratando de poner
de manifiesto cuales son las aplicaciones en las que resulta mas adecuada su utili-
zacion. Dentro de estas aplicaciones aparece el desarrollo de algoritmos orientados
al procesamiento digital de imagenes, aunque como veremos no su fase de imple-
mentacion. Asimismo, en esta practica se hara un repaso de su forma de uso con el
fin de facilitar el desarrollo de las practicas de esta asignatura relacionadas con el
procesamiento de imagenes.
2.2. Introduccion
La herramienta de calculo matricial MATLAB es, probablemente, la aplicacion
matematica mas utilizada en las fases iniciales del tratamiento digital de senales.
En esta introduccion se apuntan las caractersticas mas importantes que han hecho
posible este exito.
MATLAB esta orientado al calculo eficiente basado en vectores y matrices de
cualquier tamano. Al ser posible representar las senales digitales como vectores y las
imagenes como matrices, se hace muy directo su procesamiento mediante algorit-
mos matematicos en este entorno. El propio MATLAB, ademas, contiene una gran
cantidad de funciones matematicas ya implementadas dispuestas para realizar proce-
samientos complejos. Estas funciones no sera necesario mas que aplicarlas a nuestras
variables matriciales y vectoriales para observar rapidamente sus resultados. Estas
funciones ya implementadas se encuentran organizadas en libreras denominadas
Toolbox.
Ademas de las funciones incluidas en el programa, MATLAB permite al usuario
escribir sus propias funciones para realizar las operaciones que desee. Para ello,
MATLAB utiliza un lenguaje de programacion de muy alto nivel, muy alejado del
lenguaje de la maquina, pero muy sencillo de interpretar por nosotros y por tanto
muy potente y flexible, capaz de expresar en una sola sentencia procesamientos muy
complejos.
Pero MATLAB, a pesar de todas estas ventajas, no es la panacea de los progra-
mas de procesamiento de imagenes. De hecho, este programa es muy poco eficiente
13
14 PRACTICA 2. TRATAMIENTO DE IMAGENES CON MATLAB
2.3. Desarrollo
A continuacion se van a ofrecer una serie de nociones sobre la utilizacion de
MATLAB. Estas nociones seran de cinco tipos fundamentales:
Eficiencia computacional.
Ejercicio:
(a) Definir una variable de matlab que contenga la raiz cuadrada de 27016839424
(para ello puede consultarse la ayuda de la funcion de Matlab sqrt()).
Ejercicios:
(a) Convertir el fichero armario.bmp a una variable de matlab y obtener el
tamano de la matriz resultado mediante la funcion size() (ver la ayuda de
Matlab).
Ejercicios:
Para conocer el contenido de las matrices asociadas a imagenes en color se rea-
lizaran las siguientes pruebas:
(b) Como se ha visto en la seccion 2.3.4 las imagenes en color estan compuestas
por tres planos. En este ejercicio se pondran a cero los planos 2 y 3 de la
variable obtenida en el ejercicio (a), y se visualizara el resultado mediante la
funcion imshow().
(c) De la misma manera que en el ejercicio (b), poner a cero los planos 1 y 3 de
la variable obtenida en el ejercicio (a) y visualizar el resultado mediante la
funcion imshow().
2.3. DESARROLLO 19
Ejercicios:
Por su parte, en la figura 2.8 aparece un detalle del editor que permite ver el
valor de las variables simplemente superponiendo el cursor en ellas.
Finalmente, en la figura 2.9 podemos observar el detalle de la implementacion de
una funcion con parametros en el editor y su utilizacion en la ventana de comandos.
Ejercicios:
(a) Una imagen es el negativo de otra cuando los pxeles homologos de cada una de
ellas tienen colores complementarios. A partir del ejercicio (a) realizado en el
apartado 2.3.6, implementar una funcion que llamaremos negativo(). Dicha
funcion tendra el formato matriz_negativo = negativo(matriz_imagen).
En esta funcion, el parametro matriz_imagen es una variable matricial de
MATLAB que representa a una imagen leda previamente con la funcion
22 PRACTICA 2. TRATAMIENTO DE IMAGENES CON MATLAB
Figura 2.8: Detalle del editor de Matlab. Al detener el cursor del raton sobre una
variable, el programa nos muestra el valor de dicha variable o su tamano.
(b) Igualmente, a partir del ejercicio (b) del apartado 2.3.6, implementar una fun-
cion que llamaremos cambiacolor() que tenga como entradas, cuatro parame-
tros: en primer lugar una matriz imagen fichero de imagen, y los tres siguientes
los tres factores que se aplicaran a cada uno de los planos de la matriz de entra-
da. Esta funcion devolvera a la salida una matriz imagen visualizable mediante
imshow().
Figura 2.10: El negativo de una imagen se consigue mediante un operador que de-
nominaremos puntual.
El comando if comprueba una condicion para elegir entre dos grupos de sen-
tencias a ejecutar. La condicion se expresa en base a operadores logicos, como
, , =, ==, =, &, etc. Todos estos y mas pueden encontrarse
en la ayuda. Un ejemplo es el siguiente:
if I == J
A(I,J) = 2;
elseif abs(I-J) == 1
A(I,J) = -1;
else
A(I,J) = 0;
end
24 PRACTICA 2. TRATAMIENTO DE IMAGENES CON MATLAB
Ejercicio:
(a) Mejorar la funcion cambiacolor() del apartado anterior de manera que, cuan-
do la matriz de entrada sea en color realice el procesamiento encomendado, y
cuando la matriz de entrada sea en niveles de gris (blanco y negro) devuelva la
misma imagen que se paso como entrada sin aplicarle ningun procesamiento.
Esta funcion se debera llamarcambiacolor2().
2.3. DESARROLLO 25
300
X
y= ai x[i]
i=1
y=0;
for i = 1:300
y = y + (a(i) * x(i));
end
Ejercicios:
(a) Ejecutar la funcion eficiencia_no2.m y anotad el tiempo requerido para su
ejecucion.
(b) Analizar la operacion que se esta realizando a partir del listado de la misma.
(c) Ejecutar la funcion eficiencia_no1.m y anotad el tiempo requerido para su
ejecucion.
(d) Analizar lo que ha cambiado respecto a eficiencia_no2.m a partir de los
listados de las funciones.
(e) Ejecutar la funcion eficiencia_no.m y anotad el tiempo requerido para su
ejecucion.
(f) Analizar lo que ha cambiado respecto a eficiencia_no1.m a partir de los
listados de las funciones.
(g) Ejecutar la funcion eficiencia_si.m y anotad el tiempo requerido para su
ejecucion.
(h) Analizar lo que ha cambiado respecto a eficiencia_no.m a partir de los lis-
tados de las funciones.
% ---------------------------------------------------------------
% La entrada a esta funcion es un nombre de fichero de imagen con
% el formato nombre_fich.ext.
%
% ESTE FICHERO NO SE DEBE MODIFICAR BAJO NINGUN CONCEPTO.
% SE DEBEN ADAPTAR LAS FUNCIONES PARA QUE FUNCIONEN CON ESTE
% FICHERO TAL Y COMO ESTA.
%----------------------------------------------------------------
matriz = imread(fichero_imagen);
subplot(1,2,2);
imshow(negativo(matriz));
title(Negativo)
% Cambio de colores
figure(2);
subplot(2,2,1);
imshow(cambiacolor(matriz, 100, 100, 100));
title(R=100, V=100, A=100)
subplot(2,2,2);
imshow(cambiacolor(matriz, 200, 100, 100));
title(Rojo=200, V=100, A=100)
subplot(2,2,3);
imshow(cambiacolor(matriz, 100, 150, 100));
title(R=100, Verde=150, A=100)
subplot(2,2,4);
imshow(cambiacolor(matriz, 100, 100, 50));
title(R=100, V=100, Azul=50)
28 PRACTICA 2. TRATAMIENTO DE IMAGENES CON MATLAB
Practica 3
3.1. Introduccion
Para el procesamiento digital de imagenes podemos utilizar diferentes funciones
que se clasifican como: operadores puntuales, operadores locales, operadores por
bloques, y operadores globales. De todas estas los mas sencillos son los operadores
puntuales.
Los operadores puntuales, como puede apreciarse en la figura 3.1 producen en
la salida una imagen en las que cada pxel es funcion exclusivamente de un pxel
de la imagen de entrada. Con estas operaciones son posibles transformaciones de
intensidad y de geometra. Ejemplos de transformaciones de intensidad que se pueden
hacer con este tipo de operadores son: el calculo del el negativo de una imagen,
modificar el brillo y el contraste, el cambio de la profundidad del color (operacion
que en algunos programas se denomina posterizacion). Por su parte algunas de
las transformaciones geometricas pueden ser traslaciones, giros y deformaciones.
3.2. Objetivo
El objetivo de esta practica es aplicar diversos operadores puntuales a alguna
de las imagenes obtenidas en la practica 1. Con ello, se persigue, ademas, el conoci-
miento de las posibilidades que ofrecen estos operadores tan sencillos.
3.3. Desarrollo
Las funciones que se piden durante el desarrollo de esta practica tendran un
nombre de funcion y un formato especfico. Dicho formato debe ser respetado escru-
29
30 PRACTICA 3. OPERADORES PUNTUALES
pulosamente, ya que las funciones seran probadas todas y cada de ellas una mediante
otra funcion de MATLAB que las ira ejecutando, y mostrara sus resultados de forma
automatica. Dicha funcion de prueba, que para esta practica se llama puntuales()
estara disponible en la pagina web de la asignatura, con el fin de que los alumnos
comprueben el funcionamiento de sus algoritmos antes de entregar los resultados
para su correccion.
Por otra parte, deben disenarse las funciones para que procdesen las imagenes
con independencia del tamano de la matriz de entrada. En aquellos casos en los que
sea necesario conocer el tamano para realizar algun procesamiento, dicho tamano se
obtendra con la funcion size().
Partimos de imagenes compuestas por tres planos, plano de rojo, plano de verde
y plano de azul, en las que el margen dinamico de cada uno de los colores primarios
va desde 0 a 255, correspondiendo 0 al nivel de intensidad mas bajo, y 255 al mas
alto. A partir de esta informacion hemos de extraer el nivel de brillo de cada pxel
multiplicamdo el nivel de intensidad de cada color primerio por el factor correspon-
diente y sumando. Como expresion que relaciona el nivel de brillo de un pxel con los
niveles de intensidad de cada primario se puede utilizar la que aparece en la norma
UIT-R BT.601, que es la suguiente:
Y = 0, 45 R + 0, 37 G + 0, 11 B
Ejercicio:
(a) Implementar una funcion con el formato siguiente:
matriz_gris = gris(matriz_imagen)
tamano NxM, que represente a la misma imagen pero en niveles de gris. Debe
tenerse en cuenta que la matriz de salida debe estar compuesta por elementos
enteros sin signo de longitud 8 (ver funcion uint8()) para poder ser visuali-
zada con la funcion imshow().
3.3.2. Posterizacion
La posterizacion permite disminuir el numero de niveles de tono (colores), o
valores de luminosidad para la imagen a procesar. Por ejemplo, si se escogen dos
niveles tonales en una imagen RGB, se limita la profundidad de color a ocho colores:
000-Negro, 001-Azul, 010-Verde, 011-Cian, 100-Rojo, 101-Magenta, 110-Amarillo y
111-Blanco.
Este procesamiento es util para crear efectos especiales como areas grandes y
planas en una fotografa. Los efectos de este comando resultan mas evidentes si se
reduce el numero de niveles de gris en una imagen de escala de grises. Sin embargo,
tambien se puede utilizar este comando para producir algunos efectos interesantes
en imagenes en color.
Basicamente lo que hace la posterizacion es cuantificar los niveles de intensidad
de cada color con menos bits; de forma que los colores y los niveles de intensidad se
reducen dependiendo de dicha cuantificacion. Algoritmicamente puede entenderse el
proceso ilustrandolo con la figura 3.3.
donde Salida es cada uno de los valores de los pxeles de salida, V Smax es el
valor de salida maximo posible, N Smax es el numero de niveles discretos posibles a
la salida (numero de niveles de cuantificacion), Entrada es cada uno de los valores
de los pxeles de entrada y V Emax es el valor maximo a la entrada.
Ejercicios:
(a) Implementar una funcion con el formato siguiente:
(b) Comprobar que para un valor de 2 niveles en la imagen de salida solo apa-
recen los ocho colores posibles vistos en parrafos anteriores.
(c) Analizar para que valor mnimo de niveles deja de apreciarse claramente el
efecto porducido por la perdida de profundidad de color.
Figura 3.4: Los cambios de brillo y contraste se consiguen con funciones de transfe-
rencia lineales.
Las ecuaciones que definen la relacion entre la entrada y la salida en esta grafica
es la siguiente:
3.3. DESARROLLO 33
y = ya + m (x xa )
Donde m es la pendiente de la recta y (xa , ya ) es un punto contenido en dicha
recta. En la figura 3.5 puede verse el resultado de aumentar el contraste a una
imagen, y en la figura 3.6 la disminucion del mismo.
Figura 3.5: Al aumentar el contraste en una imagen se hacen mas evidentes los
contornos de los objetos.
Ejercicios:
(a) En este apartado se implementara una funcion de cambio de brillo y contraste
con el formato: matriz_contraste = contraste(matriz_imagen, m, Y_a);
donde m es la pendiente de la funcion de transferencia entrada/salida e Ymed
es el valor de salida que corresponde con la entrada Xmed=128 de la grafica.
Con ellos se configurara la curva que aumentando m.aumentara el contraste
sin variar el brillo y aumentando Ymed aumentara el brillo sin afectar al con-
traste. Debe tenerse en cuenta que la matriz de salida debe estar compuesta
por elementos enteros sin signo de longitud 8 (ver funcion uint8()) para poder
ser visualizada con la funcion imshow().
(c) Comprobar que para valores de Y med = 192 e Y med = 64 con valores de
m = 1 aumenta y disminuye respectivemente el brillo sin afectar al contraste..
3.3.4. Desplazamientos
Hasta ahora, las funciones que hemos disenado trabajaban siempre sin que los
pxeles sufrieran ningun cambio de posicion. Las transformaciones geometricas van
a afectar unicamente a dichas posiciones, sin tener porque cambiar niveles de inten-
sidad.
La transformacion de desplazamiento es la transformacion geometrica mas sen-
cilla. Simplemente consiste en cambiar las posiciones de los pxeles en una cantidad
fija tanto en la direccion x como en la y. En la figura 3.7 puede verse algunose
ejemplos de desplazamientos en cada una de las direcciones.
Ejercicios:
(a) En este apartado se va a implementar una funcion que ofrezca a la salida
la misma imagen pasada como parametro a la entrada, pero desplazada una
cierta cantidad en las direcciones x e y. El formato de esta funcion sera este:
matriz_desplaza = desplaza(matriz_imagen, desp_x, desp_y); donde la
variable matriz_imagen es la variable matricial asociada a la imagen a proce-
sar, y desp_x y desp_y son los desplazamientos dados en pxeles. Debe tenerse
en cuenta que los desplazamientos de x positivos seran hacia la derecha, y los
desplazamiento de y positivos seran hacia abajo.
3.3.5. Rotaciones
De forma general para implementar una rotacion de una imagen, la primera
idea que se nos puede ocurrir es transformar las coordenadas cartesianas en polares,
anadir el angulo de rotacion al angulo de cada pixel, y volver a coordenadas car-
tesianas de nuevo para representar. Este proceso, que conceptualmente es sencillo,
matematicamente tiene algunas complicaciones; por ello, no vamos a implementar
una transformacion de giro general. A cambio de esto vamos a utilizar directamente
algunas funciones de MATLAB que nos realizan algunos giros concretos.
36 PRACTICA 3. OPERADORES PUNTUALES
Ejercicios:
Asi pues se escribiran cuatro funciones con los siguiente formatos:
(a) matriz_salida = voltea_h(matriz_imagen);
(b) matriz_salida = voltea_v(matriz_imagen);
(c) matriz_salida = trasponer(matriz_imagen):
(d) matriz_salida = rotacion90(matriz_imagen);
Cada una de estas funciones solo necesitaran aplicar las funciones originales de
MATLAB a cada canal de la imagen.
matriz = imread(ficheroImagen);
% Rotacion
figure(11);
subplot(1,2,1);
imshow(matriz);
title(Original)
subplot(1,2,2);
imshow(rotacion90(matriz));
title(rotacion90)
figure(10);
subplot(1,2,1);
imshow(matriz);
title(Original)
subplot(1,2,2);
imshow(trasponer(matriz));
title(traspuesta)
figure(9);
subplot(1,2,1);
imshow(matriz);
title(Original)
subplot(1,2,2);
imshow(voltea_v(matriz));
title(voltea v => flipud)
figure(8);
subplot(1,2,1);
imshow(matriz);
title(Original)
subplot(1,2,2);
imshow(voltea_h(matriz));
title(voltea h => fliplr)
% Desplazamientos
figure(7);
subplot(2,2,1);
imshow(desplaza(matriz, 100, 100));
title(x=100, y=100)
subplot(2,2,2);
imshow(desplaza(matriz, -100, 100));
title(x=-100, y=100)
subplot(2,2,3);
imshow(desplaza(matriz, 100, -100));
title(x=100, y=-100)
38 PRACTICA 3. OPERADORES PUNTUALES
subplot(2,2,4);
imshow(desplaza(matriz, -100, -100));
title(x=-100, y=-100)
% Contraste
figure(6);
subplot(2,2,1);
imshow(matriz);
title(Original)
subplot(2,2,2);
imshow(contraste(matriz, 1, 192));
title(m=1, Ymed=192)
subplot(2,2,3);
imshow(contraste(matriz, 4, 128));
title(m=4, Ymed=128)
subplot(2,2,4);
imshow(contraste(matriz, 0.25, 128));
title(m=125, Ymed=128)
% Posterizacion
figure(5);
subplot(2,2,1);
imshow(matriz);
title(Original)
subplot(2,2,2);
imshow(posteriza(matriz, 64));
title(Posterizada 64)
subplot(2,2,3);
imshow(posteriza(matriz, 16));
title(Posterizada 16)
subplot(2,2,4);
imshow(posteriza(matriz, 2));
title(Posterizada 2)
subplot(1,2,2);
imshow(gris(matriz));
title(gris)
Practica 4
4.1. Introduccion
Una vez conocidos los operadores puntuales dentro del procesamiento digital de
imagenes, en esta practica, nos vamos a centrar en una serie de operadores algo mas
complejos, que son los operadores locales. Mediante estos operadores, cada pxel
de la imagen de salida es funcion de varios pxeles, pero no todos, de la imagen
de entrada. Dentro de estos operadores podemos considerar la convolucion para la
aplicacion de filtros FIR.
4.2. Objetivo
El objetivo de esta practica es conocer y aplicar operaciones locales a alguna de
las imagenes obtenidas en la practica 1. Mediante esta practica, se tomara contacto
con diferentes algoritmos de filtrado digital de senales, y su aplicacion en el ambito
de las imagenes.
39
40 PRACTICA 4. OPERADORES LOCALES
Y f
H() = A
2fca
Y su respuesta al impulso la podremos calcular a partir de la Transformada De
Fourier Inversa, que es el conocido sinc
Figura 4.2: El Efecto Gibbs es evidente en filtrados paso bajo implementados con
enventanados rectangulares.
As pues si queremos filtrar una imagen mediante un filtro paso bajo bidimensio-
nal rectangular con frecuencias de corte conocidas seguiremos el siguiente proceso:
Primero calculamos, aplicando la propiedad de separabilidad de la Transfor-
mada de Fourier la respuesta impulsional de cada filtro digital unidimensional
en las direcciones x e y.
Despues tomamos las respuestas al impulso para cada direccion, y las multi-
plicamos entre s resultando una respuesta al impulso matricial como esta.
hx [1] hy [1] hx [2] hy [1] ... hx [n] hy [1]
hx [1] hy [2] hx [2] hy [2] ... hx [n] hy [2]
h[n1 , n2 ] = .. .. .. ..
. . . .
hx [1] hy [m] hx [2] hy [m] . . . hx [n] hy [m]
Si hx [n] y hy [n] son vectores columna, como suele ser habitual, esta matriz se
conseguira mediante el producto matricial siguiente.
En cuanto al tamano de la senal de salida filtrada, para cada una de las dimen-
siones se cumple la relacion
Este metodo para pasar de un filtro paso bajo a uno paso alto es muy comodo,
ya que ej = 1 y as
ejn = (1)n
lo que implica, simplemente, cambiar de signo las muestras impares de la res-
puesta impulsional.
44 PRACTICA 4. OPERADORES LOCALES
Al implementar un filtro paso alto a partir de un filtro paso bajo hemos de tener
en cuenta lo que pasa con la frecuencia de corte al desplazar el espectro en 0,5. Esto
queda patente en la figura 4.7.
La frecuencia de corte del filtro paso alto fca resultante de este desplazamiento
no tiene el valor fcb , sino que cumple la expresion fca = 0, 5 fcb . Esta expresion
debe tenerse en cuenta para el diseno del filtro paso bajo inicial.
La implementacion de un filtro paso banda o banda eliminada puede tambien
hacerse de forma directa o mediante combinaciones de filtros paso bajo y paso alto
del orden deseado.
Cuestion:
(a) Buscar el valor mnimo de frecuencia de corte de un filtro paso bajo que,
aplicado simultaneamente en horizontal y en vertical, hace perder la calidad
de la imagen de manera evidente.
A continuacion se implementara el mismo filtro paso alto, pero en este caso utilizan-
do para ello el enventanado triangular. As mismo, se implementara tambien otra
funcion con el formato:
Cuestiones:
(a) Comparar los resultados obtenidos con una misma imagen de entrada, con
las funciones fpa_rect() y fpa_tria() utilizando las frecuenicas de corte
fcd = 0, 01, fcd = 0, 015 y fcd = 0, 025 y con tamanos de respuesta al impulso
de T amx = T amy = 41. Indicar si se detecta algun resultado extrano en
alguno de los casos.
(b) Buscar el valor mnimo de frecuencia de corte de un filtro paso alto que, apli-
cado simultaneamente en horizontal y en vertical, hace perder la calidad de
la imagen de manera evidente y comparar este valor con el obtenido en las
cuesiones del apartado 4.5.2. Puede sacarse alguna conclusion de este hecho.
function locales(n_fichero)
matriz = imread(n_fichero);
figure(15);
imshow(fpa_tria(matriz, .015, 0, 41, 41));
title(Filtro Paso Alto: fcx=0,02, fcy=0, Tamx=Tamy=41)
figure(14);
imshow(fpa_tria(matriz, 0, .015, 41, 41));
title(Filtro Paso Alto: fcx=0, fcy=0.02, Tamx=Tamy=41)
figure(13);
imshow(fpa_rect(matriz, .05, .05, 41, 41));
title(Filtro Paso Alto: fcx=fcy=0.05, Tamx=Tamy=41)
figure(12);
imshow(fpa_rect(matriz, .025, .025, 41, 41));
title(Filtro Paso Alto: fcx=fcy=0.025, Tamx=Tamy=41)
figure(11);
imshow(fpa_rect(matriz, .015, .015, 41, 41));
title(Filtro Paso Alto: fcx=fcy=0.015, Tamx=Tamy=41)
figure(10);
imshow(fpa_rect(matriz, .01, .01, 41, 41));
title(Filtro Paso Alto: fcx=fcy=0.01, Tamx=Tamy=41)
figure(9);
imshow(fpb_hann(matriz, .1, .1, 41, 41));
title(Hanning: fcx=fcy=0.1, Tamx=Tamy=41)
figure(8);
imshow(fpb_hamm(matriz, .1, .1, 41, 41));
title(Hamming: fcx=fcy=0.1, Tamx=Tamy=41)
figure(7);
imshow(fpb_tria(matriz, .1, .1, 41, 41));
title(Triangular: fcx=fcy=0.1, Tamx=Tamy=41)
figure(6);
imshow(fpb_rect(matriz, .1, .1, 41, 41));
title(Rectangular: fcx=fcy=0.1, Tamx=Tamy=41)
figure(5);
imshow(fpb_rect(matriz, .1, .001, 41, 41));
title(Rectangular: fcx=0.1, fcy=0.001, Tamx=41, Tamy=41)
figure(4);
imshow(fpb_rect(matriz, .001, .1, 41, 41));
title(Rectangular: fcx=0.001, fcy=0.1, Tamx=41, Tamy=41)
t0 = clock;
figure(2);
imshow(fpb_rect(matriz, .01, .01, 41, 41));
title(Rectangular: fcx=fcy=0.01, Tamx=Tamy=41)
T41 = etime(clock,t0)
figure(1);
imshow(matriz);
title(Original)
Practica 5
5.1. Introduccion
La utilizacion de la convolucion para tareas de filtrado es una solucion teorica-
mente correcta, pero en la practica la cantidad de calculos necesarios con respuestas
impulsionales relativamente largas, hacen que este tipo de filtrado sea costoso en
tiempo de proceso. Para acelerar en lo posible el proceso de filtrado, se recurre a
dominios transformados en los que la cantidad de calculos a realizar disminuye, y
con ello el tiempo de procesamiento.
En el caso de las imagenes se recurre al dominio de la frecuencia. Este trabajo
en el dominio de la frecuencia implica el calculo de la Transformada de Fourier Bi-
dimensional de la imagen que queramos procesar. Dicha Transformada de Fourier es
una funcion continua, que necesita ser discretizada para poder utilizarla en el orde-
nador. De esta manera, se hace necesario el desarrollo de la Transformada Discreta
de Fourier (DFT - Discrete Fourier Transform).
Para el calculo de la DFT de secuencias, se han desarrollado algoritmos de calculo
rapido que forman un conjunto al que se llama globalmente Transformada Rapida de
Fourier (FFT - Fast Fourier Transform). La utilizacion de la FFT con secuencias de
duracion infinita tiene algunas complicaciones, puesto que para calcular la FFT de
una secuencia debemos conocer toda ella, o en su caso trocearla, y trabajar con los
trozos independientemente. Estas complicaciones no vienen al caso en esta practica,
ya que nosotros vamos a tratar con imagenes de tamano finito, de las que conocemos
todos sus pxeles.
Como la FFT son algoritmos en los que el calculo de cada coeficiente de la
transformada se hace a partir de toda la informacion a transformar, su uso esta den-
tro de lo que llamamos operadores globales en el ambito del tratamiento digital de
imagenes.
5.2. Objetivos
Los objetivos de esta practica son, por un lado, analizar la informacion que
contiene la FFT de una imagen, y por otro aplicar esta transformada como operador
global a alguna de las imagenes obtenidas en la practica 1. En esta practica, tambien
se trataran diferentes procesos de filtrado digital de imagenes.
49
50 PRACTICA 5. OPERADORES GLOBALES
5.3. Desarrollo
Esta practica, esta dividida en dos partes. En la primera no habra que desa-
rrollar ningun algoritmo, sino que se tratara exclusivamente de visualizar diferentes
informaciones, y sacar conclusiones a partir de ellas. En la segunda parte, habra que
desarrollar alguna funcion de MATLAB para filtrar imagenes en el dominio de la fre-
cuencia. Para esta segunda parte, como ya estamos acostumbrados, se dispondra de
una funcion de test para comprobar que todas las funciones estan hechas de acuerdo
con los formatos pedidos. El listado de esta funcion de test aparece en el anexo de
este enunciado. Ademas, alguna de las funciones pedidas se podran reutilizar en la
siguiente practica sobre diezmado e interpolacion.
De nuevo se insiste en la necesidad de disenar las funciones con independencia
del tamano de la imagen de entrada, y en aquellos casos en los que sea necesario
conocer el tamano para procesar, este se obtendra mediante la funcion "size()".
function cont_fft(n_fichero)
matriz = imread(n_fichero);
tam = size(matriz);
mat_fft=fft2(matriz);
figure(5);
elimina_modulo = mat_fft ./ abs(mat_fft);
imagen = ifft2(elimina_modulo);
imagen_normalizada = imagen / max(max(max(imagen)));
imagen_positiva = max(0, real(imagen_normalizada));
imagen_final = contraste(imagen_positiva*255, 0, 5, 0, 255);
imshow(real(imagen_final));
title(Imagen obtenida de la fase de la FFT: CONTRASTE REALZADO);
figure(4);
imagen = ifft2(abs(mat_fft));
imshow(uint8(real(imagen)));
title(Imagen obtenida a partir del modulo de la FFT);
figure(3);
imagen = ifft2(imag(mat_fft));
imshow(uint8(real(imagen)));
title(Imagen obtenida a partir de la parte imaginaria de la FFT);
figure(2);
imagen = ifft2(real(mat_fft));
imshow(uint8(real(imagen)));
title(Imagen obtenida a partir de la parte real de la FFT);
5.3. DESARROLLO 51
figure(1);
x=linspace(0,1,tam(2));
y=linspace(0,1,tam(1));
mesh(x, y, log10(abs(mean(mat_fft, 3))));
title(Visualizacion del log10 del modulo de la FFT2 de la imagen);
Ejercicios:
(c) Observa la figura 2, y trata de explicar el resultado obtenido. Para ello se debe
tener en cuenta las propiedades de simetra de la Transformada de Fourier, y
que
1
Re X(ej ) = X(ej ) + X (ej )
2
(d) Observa la figura 5, e indica que informacion esta contenida sobre todo en la
fase de una imagen. Se debe tener presente que errores en la fase impleicaran
errores en dicha informacion.
Ejercicio:
donde los valores de las transiciones entre la banda de paso y la atenuada en cada
direccion tranx y trany estan dados en tanto por uno del margen frecuencial res-
pectivamente en horizontal y vertical. Estas transiciones estan colocadas de manera
que la frecuencia de corte del filtro caiga en el centro de la zona de transicion, por lo
tanto el valor maximo de las transiciones debe ser menor que dos veces la frecuencia
de corte utilizada. El listado de esta funcion se ofrece en un fichero aparte.
Ejercicio:
(a) Comentar en la memoria final los resultados obtenidos al aplicar esta funcion
con diferentes frecuencias de corte y diferentes tamanos de transicion.
5.4. RESULTADOS DE LA PRACTICA 53
function globales(n_fichero)
matriz = imread(n_fichero);
figure(5);
imshow(fpb_fft_tria(matriz, .1, .1, 11, 11));
title(Filtrado en frecuencia: enventanado triangular tama~
no 11.);
54 PRACTICA 5. OPERADORES GLOBALES
figure(4);
imshow(fpb_fft_tria(matriz, .1, .1, 41, 41));
title(Filtrado en frecuencia: enventanado triangular tama~
no 41.);
figure(3);
imshow(fpb_fft_tria(matriz, .1, .1, 141, 141));
title(Filtrado en frecuencia: enventanado triangular tama~
no 141.);
figure(1);
imshow(fpb_fft_abr(matriz, .1, .1));
title(Filtrado en la frecuencia con corte abrupto.);
Practica 6
6.1. Introduccion
En las dos practicas anteriores se ha analizado la problematica existente en el
filtrado de imagenes, y en esta trabajaremos con algunos de los filtros disenados
hasta aqu aplicandolos a los procesos de diezmado e interpolacion.
El diezmado trata de reducir la frecuencia de muestreo asociada a una secuencia
de muestras, dividiendola por un factor entero. Para entender mejor este proceso, lo
mejor es verlo a traves de un ejemplo. Si queremos reducir la frecuencia de mues-
treo fs por un factor entero M , lo que tendremos que hacer es eliminar de nuestra
secuencia M 1 de cada M muestras. Con ello conseguiremos otra secuencia, que
representara a la misma senal analogica que la anterior, pero como si la hubiesemos
muestreado a una frecuencia
fs
fs0 =
M
En el proceso de diezmado, de la misma manera que en el proceso de muestreo,
hemos de evitar que en la secuencia obtenida aparezca el efecto del solapamiento
espectral. Es decir, hemos de tener cuidado que fs0 2 B, donde B es el ancho de
banda de la senal analogica. En el caso que esto no sea cierto, tendremos que aplicar
a la entrada del diezmador un filtro paso bajo digital.
La interpolacion es el proceso contrario del diezmado en el sentido que, lo que
tratamos es de aumentar la frecuencia de muestreo por un valor entero, obteniendo
a la salida un numero de muestras L veces mayor que en la entrada; donde L es
el factor de interpolacion. Si lo queremos ver a traves de un ejemplo, lo que tenemos
que hacer es insertar L1 muestras entre cada dos de la secuencia original. Con ello,
estamos obteniendo una nueva secuencia que representa a la misma senal analogica
pero como si la hubieramos tomado con una frecuencia de muestreo fs0 = L fs .
Al tener una frecuencia de muestreo mayor a la salida de interpolador, podemos
asegurar que en el proceso de interpolacion nunca se produce solapamiento espectral.
El proceso de interpolacion se divide conceptualmente en dos partes: una primera
en la que se introducen L 1 muestras de valor cero entre cada dos muestras de
entrada, y una segunda parte que es un filtrado paso bajo con frecuencia de corte
1
fcd =
2L
y ganancia en amplitud G = L.
55
56 PRACTICA 6. DIEZMADO E INTERPOLACION
6.2. Objetivos
Esta practica tiene dos objetivos. El primero es reconocer, mediante visualizacion
en el dominio espacial, la existencia de solapamiento espectral despues de realizar un
proceso de diezmado sobre una imagen. En segundo lugar se aplicara la tecnica de
interpolacion a la implementacion de un zoom digital sencillo aplicable a imagenes.
6.3. Desarrollo
En esta practica se implementaran en Matlab los algoritmos de diezmado e in-
tepolacion y se reutilizaran las funciones de filtrado implementadas en las practicas
anteriores. Como siempre, se dispondra de una funcion de test para comprobar que
todas estan hechas de acuerdo con los formatos pedidos. El listado de esta funcion
de test aparece en el apartado final de esta practica.
Asimismo, se recuerda la necesidad de disenar las funciones con independencia
del tamano de la imagen de entrada, y en aquellos casos en los que sea necesario
conocer el tamano de dicha imagen para procesarla, este se obtendra mediante la
funcion size().
Ejercicio:
El segundo bloque es un filtro paso bajo que para imagenes sera bidimensional
y que tendra como frecuencias de corte
1
fcx = fcy =
2L
y como ganancia en amplitud, recordando que estamos interpolando en las dos
direcciones, tendremos G = L2 .
function interpola(n_fichero)
matriz = imread(n_fichero);
tam = size(matriz);
figure(6)
imshow(zoom(matriz, 8));
title(Imagen ampliada por 8.);
58 PRACTICA 6. DIEZMADO E INTERPOLACION
figure(5)
imshow(zoom(matriz, 5));
title(Imagen ampliada por 5.);
figure(4)
imshow(zoom(matriz, 4));
title(Imagen ampliada por 4.);
figure(3)
imshow(zoom(matriz, 2));
title(Imagen ampliada por 2.);
figure(2);
filtrada = fpb_tria(matriz, .05, .05, 41, 41);
recorte = filtrada(21:20+tam(1), 21:20+tam(2), :);
subplot(1,2,1);
imshow(diezma(recorte, 10));
title(Imagen diezmada por 10 con filtro fcd=0,5/M.);
subplot(1,2,2);
imshow(diezma(matriz, 10));
title(Imagen diezmada por 10 sin filtro.);
figure(1);
imshow(matriz);
title(Imagen original.);
Practica 7
Interfaces de comunicacion a
nivel de estudio
7.1. Introduccion
Con posterioridad a la aplicacion de la tecnologa digital en diversas tareas del
campo de la television, se hizo necesario conformar un modo de transmision digital
del vdeo. De esta manera, la comunicacion entre los equipos de estudio se realizara
tambien en el dominio digital; evitando la cascada de conversiones D/A y A/D que
existan en la cadena de produccion, considerando la transmision analogica. As,
en 1986 la Union Internacional de Telecomunicaciones publico la recomendacion
UIT-R BT.656. En ella se defina el interfaz paralelo, para la transmision digital
de informacion de vdeo codificado segun la norma 4:2:2, dentro de los estudios. En
esta primera version de la recomendacion, ademas se describio la estructura del tren
de datos asociado a este interfaz. Anos mas tarde se anadira a esta recomendacion
la definicion del interfaz serie. Este presenta como ventajas fundamentales el bajo
coste del cable, y la posibilidad de cubrir distancias mucho mas grandes, a cambio
de una ligera complicacion en la electronica asociada.
Dentro del tren de datos definido en la recomendacion UIT-R BT.656 se habla
de determinados espacios libres que estan asociados a los espacios de sincronismo del
vdeo analogico. Estos espacios pueden ser utilizados para transmitir, opcionalmente,
informacion de sonido u otras informaciones auxiliares, aprovechando as dichos
huecos. Para ello, la UIT elaboro en 1997 las recomendaciones UIT-R BT.1305,
y 1364, en las que se plasma el formato que deben tener los datos a multiplexar
con la informacion de video. No obstante, dentro de un estudio es habitual que la
informacion de vdeo y audio dentro de los estudios viaje por vas independientes,
puesto que ademas llevan consigo procesos tambien distintos.
Posteriormente, la definicion de la television digital de alta definicion, que lleva
consigo un cambio en el formato de la pantalla y una mejora en la resolucion de
la imagen, hizo necesaria la especificacion de unos interfaces de comunicacion apro-
piados. Estos interfaces, se definieron en la recomendacion UIT-R BT.1120. Para
este caso de television de alta definicion tambien se definio el formato de las infor-
maciones auxiliares, como el audio, que se transmitiran por multiplexacion en el
tiempo, junto con la informacion de video. Esta definicion aparece a su vez en la
recomendacion UIT-R BT.1365.
Las recomendaciones UIT-R BT.1305, 1364 y 1365 no van a ser objeto de nuestro
estudio, pero su conocimiento puede ser interesante en diversas aplicaciones y por
59
60 PRACTICA 7. INTERFACES DE COMUNICACION
(L) 3.- Que tipo de informacion binaria pueden transportar estos interfaces?
62 PRACTICA 7. INTERFACES DE COMUNICACION
Inicio Fin
Campo 1 Supresion Lnea 1
Vdeo activo
Supresion Lnea 312
Campo 2 Supresion Lnea 313
Vdeo activo
Supresion Lnea 625
(L) 6.- Indica a que velocidad se transmiten los datos, y de que manera se mul-
tiplexan en el tiempo.
(L) 8.- Indica la estructura general en bits de estos codigos para interfaces de 10
bits.
(R) 9.- Rellena la tabla 7.2 indicando en que lugares se situan las distintas
combinaciones de los bits F, V, y H.
(R) 11.- Que sentido puede tener enviar codigos 80h, 10h, 80h, 10h durante la
supresion de trama.
64 PRACTICA 7. INTERFACES DE COMUNICACION
Interfaz paralelo
Se trata en la parte 2 de esta recomendacion.
(L) 12.- Que estructura debe tener el medio de transmision (cable y conectores)
que utiliza este interfaz?
(R) 14.- El apartado 3 hace referencia a posibles variaciones en la fase del reloj y
establece un lmite maximo para el funcionamiento efectivo del interfaz. Sabras de-
cir porque este lmite maximo no es adecuado para la temporizacion de la conversion
D/A o la conversion serie-paralelo?
7.4. PLAN DE ACTIVIDADES 65
(L) 16.- El apartado 5 habla de detalles mecanicos del conector, pero solo nos
vamos a detener en el tipo de conector que se utiliza en el interfaz paralelo. Cual
es?
Interfaz serie
Se describe en la parte 3 de esta recomendacion.
(L) 17.- En el apartado 5 se describe el medio de transmision. Que estructura
debe tener el medio de transmision que utiliza este interfaz?
66 PRACTICA 7. INTERFACES DE COMUNICACION
(R) 19.- Indica a que frecuencia de bit se envan los datos mediante este interfaz.
(L) 3.- Que senales de vdeo se pueden transmitir por los interfaces a los que se
refiere esta norma?
68 PRACTICA 7. INTERFACES DE COMUNICACION
(L) 5.- Comenta las similitudes que veas en los codigos de referencia de tempo-
rizacion respecto del interfaz descrito en la recomendacion 656.
Interfaz paralelo
Se describe en la parte 2 de esta recomendacion
(L) 6.- Una caracterstica propia de este interfaz es la relacion de temporizacion
entre los dos enlaces, que aparece en el apartado 3. Indica el retardo maximo que se
permite entre ambos.
(L) 7.-Comenta las similitudes que encuentres en la senal de reloj respecto del
interfaz descrito en la recomendacion 656.
7.4. PLAN DE ACTIVIDADES 69
Interfaz serie
Se describe en la parte 3 de esta recomendacion.
(L) 8.- Tambien en el interfaz serie se especifica la relacion de temporizacion
entre los dos enlaces en el apartado 2. Cual es el retardo maximo que se permite?.
70 PRACTICA 7. INTERFACES DE COMUNICACION
(L) 2.- Comenta las similitudes que observes en los codigos de referencia de
temporizacion SAV y EAV, respecto de los interfaces anteriores.
7.4. PLAN DE ACTIVIDADES 71
(L) 4.- Describe el funcionamiento del reloj en cada uno de los casos.
(L) 8.- Describe el tipo de cable y los conectores del interfaz electrico segun el
apartado 4.3.
7.4. PLAN DE ACTIVIDADES 73
(L) 10.- Comenta las diferencias que observes en los codigos de referencia de
temporizacion SAV y EAV respecto de los interfaces anteriores.
(L) 12.- Describe el tipo de cable y los conectores del interfaz paralelo segun el
apartado 3.3.
(L) 15.- Describe el tipo de cable y los conectores del interfaz electrico segun el
apartado 4.3.
7.5. Bibliografa
7.5.1. Bibliografa basica
Recomendacion UIT-R BT.656-4. Interfaces para las senales de vdeo con com-
ponentes digitales en sistemas de television de 525 lneas y 625 lneas que
funcionan en el nivel 4:2:2 de la recomendacion UIT-R BT.601 (parte A).
Recomendacion UIT-R BT.799-3. Interfaces para las senales de vdeo con com-
ponentes digitales en sistemas de television de 525 y 625 lneas que funcionan
en el nivel 4:4:4 de la recomendacion UIT-R BT.601 (parte A).
Potencial de compresion de la
DCT en imagenes estaticas
8.1. Objetivo
Comprobar en la practica algunas de las propiedades de la Transformada Discreta
del Coseno (DCT), que hacen posible conseguir la compresion subjetivamente sin
perdidas en secuencias de vdeo. Se va a analizar la importancia de los distintos
coeficientes de la DCT, con el fin de considerar su eliminacion, consiguiendo as la
compresion intracuadro. Tambien se aplicara una matriz de cuantificacion real, de
las utilizadas por el metodo de compresion JPEG, para comprobar sus resultados
8.2. Introduccion
La gran cantidad de informacion digital que aparece a partir del muestreo de
secuencias de vdeo hace necesaria su compresion, para poder almacenar o transmitir
dicha informacion con un coste razonable. Esta compresion es posible debido a la
existencia de informacion redundante en las secuencias de vdeo y que por tanto se
puede eliminar para volver a recuperarla en recepcion a partir de la informacion
real.
Podemos clasificar la informacion redundante segun su naturaleza en tres cate-
goras. La redundancia espacial aparece dentro de cada fotograma, y hace referencia
a que los objetos poseen una cierta continuidad. Esta continuidad hace que en los
fotogramas existan grandes superficies en las que los pxeles son casi identicos. La re-
dundancia temporal se estudia entre fotogramas consecutivos. Se fundamenta en que
en el tiempo en que se toman dos fotogramas consecutivos (habitualmente 40ms.), no
existen grandes cambios entre las imagenes. Esto hace que en la mayora de los casos
dos pxeles homologos de dos fotogramas consecutivos sean practicamente iguales.
Por ultimo, la redundancia estadstica trata de aprovechar la distinta frecuencia con
que aparecen los smbolos a codificar, para ahorrar unos cuantos bits en aquellos
smbolos que aparecen con mayor frecuencia.
Los metodos de compresion tratan de detectar esta informacion redundante y
eliminarla, codificando exclusivamente y de forma adecuada, la informacion mnima
para recuperar con un nivel de calidad apropiado. Existen varias formas de codifica-
cion para minimizar cada tipo de redundancia, consiguiendo niveles de compresion
moderados. Sin embargo, el uso de un dominio transformado en vez del dominio
77
78 PRACTICA 8. POTENCIAL DE COMPRESION DE LA DCT
8.3. Desarrollo
Los algoritmos de compresion son bastante complejos de desarrollar. No obstante,
en esta practica se han elegido, de todos los aspectos involucrados en la compresion
de vdeo, aquellos que son mas representativos, y cuya dificultad no es excesiva, de
forma que el desarrollo de esta no lleve mas tiempo del disponible en una sesion.
Los cuatro aspectos que se van a analizar son estos:
infoDCT(matriz_entrada);
%----------------------------------------------------------------
% La funcion aplicaDCT, tal y como esta codificada, devuelve a la
% salida la misma matriz que se le ha pasado como parametro de
% entrada. No obstante, aunque operativamente no se obtiene de
% ella ningun resultado, esta preparada para que a partir de ella
% se puedan realizar diferentes pruebas relativas a la
% codificacion intracuadro que se utiliza en los metodos de
% compresion JPEG y MPEG-1 y 2.
%
% Esta funcion divide la variable matriz de entrada en
% submatrices de tama~no 8x8, calcula, de todas ellas, su DCT
% bidimensional y abre la posibilidad de jugar con los
% coeficientes de estas DCTs segun las necesidades.
% Posteriormente vuelve a convertir las matrices DCT al dominio
% espacial mediante la DCT inversa, y recompone la imagen para
% comprobar los efectos de los cambios que se hayan podido
% realizar en los coeficientes.
%----------------------------------------------------------------
Ejercicios:
Las operaciones a realizar con las matrices de coeficientes pueden realizarse to-
mando como base la propia funcion aplicaDCT() y generando a partir de ella las
distintas versiones aplicaDCTn(). Cada una de las pruebas a realizar son indepen-
dientes debiendo partir en cada caso del listado original.
16 11 10 16 24 40 51 61
12 12 14 19 26 58 60 55
14 13 16 24 40 57 69 56
14 17 22 29 51 87 80 62
JP EG =
18 22 37 56 68 109 103 77
24 35 55 64 81 104 113 92
49 64 78 87 103 121 120 101
72 92 95 98 112 100 103 99
8 16 19 22 26 27 29 34
16 16 22 24 27 29 34 37
19 22 26 27 29 34 34 38
22 22 26 27 29 34 37 40
M P EG =
22 26 27 29 32 35 40 48
26 27 29 32 35 40 48 58
26 27 29 34 38 46 56 69
27 29 35 38 46 56 69 83
matriz_entrada = imread(fichero_entrada);
tam=size(matriz_entrada);
if (tam(1)+tam(2) < sum(tam))
matriz_gris = rgb2gray(matriz_entrada);
else
matriz_gris = matriz_enttrada;
end
figure(8);
imshow(aplicaDCT6(matriz_gris));
title(Matriz de cuantificacion habitual MPEG-2.)
figure(7);
imshow(aplicaDCT5(matriz_gris));
title(Matriz de cuantificacion por defecto en JPEG.)
figure(6);
imshow(aplicaDCT4(matriz_gris));
title(Cuantificacion de coeficientes DC: Efecto "bloque".)
figure(5);
imshow(aplicaDCT3(matriz_gris));
title(Nueve coeficientes de mas baja frecuencia. Factor 64:9)
figure(4);
imshow(aplicaDCT2(matriz_gris));
title(Cuatro coeficientes de mas baja frecuencia. Factor 16:1)
figure(3);
imshow(aplicaDCT1(matriz_gris));
title(Solo coeficientes DC. Factor 64:1.)
figure(2);
imshow(aplicaDCT(matriz_gris));
title(Resultado de aplicaDCT(). Imagen original)
figure(1);
infoDCT(matriz_gris);
84 PRACTICA 8. POTENCIAL DE COMPRESION DE LA DCT
Practica 9
Compensacion de movimiento y
compresion intercuadro
9.1. Objetivos
El objetivo principal de esta practica es acercarnos al proceso de compresion in-
tercuadro de MPEG-2. Este acercamiento se hara observando las diferentes tecnicas
que se llevan a cabo en este tipo de compresion.
9.2. Introduccion
La maxima potencia de compresion en secuencias de vdeo se produce, no por la
codificacion intracuadro de cada fotograma, sino debido a la aplicacion de procesos
intercuadro que tratan de minimizar la redundancia temporal. Estos procesos inter-
cuadro se basan en trabajar sobre una prediccion de la imagen actual, a partir de
una imagen anterior y/o una imagen siguiente.
Como sabemos, en MPEG-2 existen tres tipos de imagenes: imagenes intracuadro
(I), imagenes de prediccion (P), e imagenes bidireccionales (B). Las imagenes que
utilizan compresion intercuadro son las P y B, con la diferencia que las imagenes
P solo toman como referencia para calcular la prediccion la imagen I o P anterior,
mientras que las imagenes B toman como referencia de prediccion indiferentemente
la imagen I o P anterior o siguiente.
85
86 PRACTICA 9. COMPENSACION DE MOVIMIENTO
Hemos de tener en cuenta que las secuencias de vdeo tratan de mantener una
cierta continuidad en la accion, de manera que el ojo perciba un movimiento cons-
tante. Por ello, en el periodo de tiempo que transcurre entre dos fotogramas, y salvo
un cambio de plano, las diferencias que se producen en las imagenes se deben a lige-
ros movimientos entre los objetos, o en todo caso a movimientos de la camara, que
en definitiva se reflejan tambien en desplazamientos de partes de la imagen. Estos
movimientos trata de contrarrestarlos la compensacion de movimiento. El resultado
de detectar y contrarrestar en parte esos desplazamientos es una prediccion de la
imagen actual, que simplemente se codifica mediante los vectores de movimiento de
los macrobloques.
La imagen de prediccion, resultante de la aplicacion de la compensacion de mo-
vimiento, se diferencia respecto de la imagen actual en el error de prediccion. Este
error de prediccion sera lo que necesitara el decodificador, junto con los vectores
de movimiento, para regenerar la imagen actual al final de la cadena. Pero no es
necesario almacenar todo el error de prediccion, a este tambien podemos aplicar-
le la compresion intracuadro. Por otra parte, el error de prediccion suele ser muy
pequeno, de manera que su codificacion intracuadro con la utilizacion de tecnicas
RLC y VLC se realizara con muy pocos bits, aumentando el factor de compresion
considerablemente, y sin merma de la calidad.
En esta practica se estudiaran los procesos involucrados en la compresion inter-
cuadro. Debido a la dificultad de programacion de estos procesos en el escaso tiempo
disponible, se partira de dos funciones ya codificadas; se analizara su funcionamiento
y posteriormente se evaluaran los resultados que producen.
9.3. Desarrollo
Para esta practica se han preparado dos algoritmos diferentes; uno para las
imagenes P y otro para las imagenes B; a pesar de que como se comprobara las
diferencias son pequenas.
tam = size(matrizI);
9.3. DESARROLLO 87
% Reconstruccion de la imagen
salida = zeros(size(matrizMacroBP));
9.3. DESARROLLO 89
for n=1:n_celdasX
for m=1:n_celdasY
salida((m-1)*16 + 1 : m*16, (n-1)*16 + 1 : n*16) = ...
listaMacroBP(:,:,n + (m-1)*n_celdasX);
end
end
Ejercicios:
Sobre este listado se tratara de dar respuesta a las siguientes preguntas en la
memoria:
tam = size(matrizI1);
n_celdasY = ceil(tam(1)/16);
listaMacroBI = zeros(16, 16, 2 * n_celdasX * n_celdasY);
listaMacroBB = zeros(16, 16, n_celdasX * n_celdasY);
matrizMacroBI1 = zeros(n_celdasY * 16, n_celdasX * 16);
matrizMacroBI2 = zeros(n_celdasY * 16, n_celdasX * 16);
matrizMacroBB = zeros(n_celdasY * 16, n_celdasX * 16);
matrizMacroBI1(1:tam(1), 1:tam(2)) = matrizI1;
matrizMacroBI2(1:tam(1), 1:tam(2)) = matrizI2;
matrizMacroBB(1:tam(1), 1:tam(2)) = matrizB;
for i= 1:n_celdasX*n_celdasY
if maximo(i) >= 0.7 % intercuadro
macroBloque = listaMacroBB(:,:,i) - ...
listaMacroBI(:,:,resulta_correla(i));
% division en bloques
listaBloques(:, :, 1) = macroBloque(1:8, 1:8);
listaBloques(:, :, 2) = macroBloque(1:8, 9:16);
listaBloques(:, :, 3) = macroBloque(9:16, 1:8);
listaBloques(:, :, 4) = macroBloque(9:16, 9:16);
for k=1:4
% calculo de las DCTs
listaDCT(:,:,k) = dct2(listaBloques(:,:,k));
% cuantificacion mediante matriz
listaDCT(:,:,k) = round(listaDCT(:,:,k)./ ...
cuantif_MPEG).*cuantif_MPEG;
%DCT inversa
listaBloques(:, :, k) = idct2(listaDCT(:, :, k));
end
% reconstruccion MacroB
macroBloque(1:8, 1:8) = listaBloques(:, :, 1);
macroBloque(1:8, 9:16) = listaBloques(:, :, 2);
macroBloque(9:16, 1:8) = listaBloques(:, :, 3);
macroBloque(9:16, 9:16) = listaBloques(:, :, 4);
listaMacroBB(:, :, i) = ...
macroBloque + listaMacroBI(:,:,resulta_correla(i));
else
macroBloque = listaMacroBB(:,:,i);
% division en bloques
listaBloques(:, :, 1) = macroBloque(1:8, 1:8);
listaBloques(:, :, 2) = macroBloque(1:8, 9:16);
listaBloques(:, :, 3) = macroBloque(9:16, 1:8);
listaBloques(:, :, 4) = macroBloque(9:16, 9:16);
for k=1:4
% calculo de las DCTs
listaDCT(:,:,k) = dct2(listaBloques(:,:,k));
% cuantificacion mediante matriz
listaDCT(:,:,k) = round(listaDCT(:,:,k)./ ...
cuantif_JPEG).*cuantif_JPEG;
%DCT inversa
listaBloques(:, :, k) = idct2(listaDCT(:, :, k));
end
% reconstruccion Macrobloques
macroBloque(1:8, 1:8) = listaBloques(:, :, 1);
macroBloque(1:8, 9:16) = listaBloques(:, :, 2);
macroBloque(9:16, 1:8) = listaBloques(:, :, 3);
macroBloque(9:16, 9:16) = listaBloques(:, :, 4);
listaMacroBB(:, :, i) = macroBloque;
end
end
92 PRACTICA 9. COMPENSACION DE MOVIMIENTO
% Reconstruccion de la imagen
salida = zeros(size(matrizMacroBB));
for n=1:n_celdasX
for m=1:n_celdasY
salida((m-1)*16 + 1 : m*16, (n-1)*16 + 1 : n*16) = ...
listaMacroBB(:,:,n + (m-1)*n_celdasX);
end
end
Ejercicios:
Sobre esta funcion al igual que en el caso anterior se respondera a las siguientes
preguntas en la memoria
(c) La funcion imagenB() debera probarse con tres fotogramas consecutivos de una
secuencia. Estos fotogramas tambien se consiguieron en la primera practica que
se realizo en el curso.
9.3. DESARROLLO 93