Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Resumen
Esta tarea contiene de un conjunto de ejercicios que permiten adquirir familiaridad con herramientas basicas de vision computacional empleando Matlab.
En la pagina del curso ME704 se encuentra disponible un conjunto de archivos de Matlab e imagenes para su procesamiento. Todo esto en el archivo
comprimido MaterialTareaUno.zip. La tarea se basa en un conjunto de
ejercicios de laboratorio de dise
nados por Tony Lindeberg.
0.1.
Leyendo im
agenes: Formatos
0.2.
Desplegando im
agenes: Discretizaci
on y
tablas de colores
La funcion image de Matlab permite visualizar matrices. Existen muchsimas alternativas para codificar el color y naturalmente no existe una correspondencia fija entre los n
umeros en una matriz y colores en la pantalla.
Para esto en Matlab se dispone de una tabla de colores (color table) representada por una matriz de tres columnas, cada cual con valores en el intervalo
[0, 1]. Dichas columnas representan respectivamente las componentes de color
rojo, verde y azul, al llamar al comando
image(Canoe)
se emplean los valores de los elementos de la matriz imagen Canoe como
ndices de la tabla. Los valores de punto flotante se redondean al entero mas
proximo. Aquellos valores que caen fuera del area definida por la tabla se
reemplazan por el valor de frontera mas cercano. Es posible determinar el
tama
no de la tabla de colores mediante el comando size(colormap,1),
que retorna el n
umero de filas de la matriz.
Notar que uno puede mostrar los elementos de la tabla de colores con
el comando colormap. Para visualizar la tabla de colores es posible usar
plot(colormap), que tiene como resultado el despliegue de tres curvas, una
para cada componente.
Matlab dispone de varias tablas de colores ya definidas. Es posible ver el
listado con el comando help graph3D. Es deseable que experimentes con distintas tablas, como por ejemplo plot(hsv) o plot(copper(16)), etc. Notar
que es posible ajustar el largo de la tabla de colores.
Veamos un ejemplo. Carga el archivo de imagen Canoe empleando las instrucciones indicadas al comienzo de esta tarea. Para no re-escalar los valores
de pxeles al intervalo [0, 5; 64,5] nosotros simplemente empleamos una tabla
de colores de 256 niveles
colormap(gray(256))
Pregunta 1 Que sucedera si no se hace esto?
Tu podras ver la imagen con
image(Canoe)
3
Al mostrar una imagen es frecuente buscar que los elementos se desplieguen cuadraticamente. En Matlab esto se logra con el siguiente comando
axis equal
Al trabajar con imagenes de distinto tipo existe el inconveniente de tener
que verificar constantemente si el dominio de la tabla de colores es consistente
con el intervalo de valores de pxeles.
Para evitar dicho inconveniente se entrega la funcion showgrey en la
librera adjunta. Por defecto la funcion calcula el valor maximo y mnimo de
una imagen y luego transforma el intervalo de niveles de gris al intervalo de
una tabla de colores de 64 niveles. Tambien es posible indicar el largo de la
tabla de colores, as como tambien el intervalo de valores a mostrar. Para
mayor informacion sobre esta u otras funciones usar
help showgrey
tambien puedes verificar si una funcion pertenece originalmente a Matlab
o a la librera del curso con el comando
which showgrey
Ahora observa la imagen Canoe con
showgrey(Canoe)
y modifica el n
umero de niveles de color al cambiar el segundo argumento
de la funcion en potencias pares de dos del intervalo [2, 256]
showgrey(Canoe, 256)
.
.
.
showgrey(Canoe, 2)
Esta tecnica permita simular el resultado de discretizar una imagen con
un numero variado de bits. Intenta aplicar el metodo a la siguiente imagen
phone = phonecalc256;
Pregunta 2 Por que aparece un patron en el fondo al rededor del telefono?
Cuantos niveles de gris se necesitan para obtener un resultado aceptable
(cualitativamente) en este caso?
4
0.3.
Sub-muestreo
(1)
0.4.
0.4.1.
Matlab dispone de muchsimas funciones directamente aplicables al primer metodo (ver help elfun). Dichas funciones pueden emplearse con el
nombre de la imagen como una variable
neg1 = - Canoe;
showgrey(neg1);
neg2 = 255 - Canoe;
showgrey(neg2);
nallo = nallo256;
showgrey(nallo.(1/3));
showgrey(cos(nallo/10));
Explora el histograma de las primeras dos imagenes con
hist(neg1(:))
hist(neg2(:))
Pregunta 9 Son los resultados esperables? Comenta
0.4.2.
Look-up tables
El segundo tipo de transformaciones requiere del empleo de look-up tables. Ejemplos tpicos son transformaciones que requieren de muchos computos para cada elemento de la imagen o bien casos en que no existe una formula
cerrada para expresar la transformacion.
En el caso de las look-up tables, los valores de la imagen se emplean
como ndices de una tabla de valores ya calculados. Naturalmente, dicha
tecnica esta disponible solo para imagenes de valores enteros o cuando la
aproximacion a enteros resulta razonable.
Se ha dispuesto de la rutina compose que implementa la composicion de
una imagen de entrada inpic y una tabla previamente calculada lookuptable:
outpic = compose(lookuptable, inpic)
0.4.3.
Manipulaci
on de tablas de color
Como vimos, cada tabla de color tambien opera como una transformacion
de niveles de gris. Luego resulta posible crear una imagen de contraste reverso
simplemente manipulando tablas de colores. Luego de que has mostrado la
imagen Canoe con
image(Canoe + 1)
tu puedes crear una funcion afn que decrementa desde el valor 1,0 al 0,0
en 256 pasos al escribir
negcolormapcol = linspace(1, 0, 256);
y luego emplear esto para preparar la tabla de color con
colormap([negcolormapcol negcolormapcol negcolormapcol])
Empleando una notacion mas compacta uno tambirn puede emplear showgrey
para implementar el mismo tipo de operacion
showgrey(Canoe, linspace(1, 0, 256), 0, 255)
9
0.5.
Stretching of grey-levels
10
0.6.
Compresi
on logartmica
(2)
a la imagen nallo256float
Pregunta 12
Cuales son los efectos de esta operaci
on?
Por que se necesita el par
ametro y como afecta los resultados? Cual es
un valor adecuado para ? Muestra los resultados.
Explica las caractersticas de la transformaci
on logartmica, para que tipo de
im
agenes resulta apropiada y por que resulta a menudo un buen modelo?
0.7.
Ecualizaci
on de histograma
Combina el comando hist y el comando cumsum para generar la transformacion tabulada de niveles de gris eqtransf que ecualiza el histograma
de la imagen nallo sobre la base de una transformacion discreta razonable
equivalente a
T (z) =
z
=0
p()d
(3)
donde p() es la funcion de frecuencia normalizada (histograma normalizado) de la imagen. Junta los comandos que tu has empleado y escribe una
funcion de Matalab:
function pixels = histeq(image, nacc, verbose)
La funcion debe aceptar cualquier imagen como entrada junto con el
n
umero de acumuladores nacc empleado para generar el histograma. Naturalmente, la salida es la imagen ecualizada por el histograma. Si el argumento
verbose tiene un valor positivo debera mostrarse el histograma anterior y
posterior al proceso de ecualizacion, como texto y graficamente. Puedes ver
11
0.8.
Operadores de diferencias
0.8.1.
0.8.2.
Detecci
on de bordes basada en geometra diferencial
(4)
(5)
donde
1 (x2 +y2 )/(2t)
e
(6)
2t
Para expresar la definicion anterior de borde en terminos de derivadas
parciales de la funcion de intensidad suavizada L con respecto a direcciones
cartesianas escribimos el vector gradiente en un punto arbitrario (x0 , y0 ) como
g(x, y; t) =
L =
Lx
Ly
cos
sin
|(x0 ,y0 )
(7)
En terminos de
cos = q
Lx
L2x + L2y
sin = q
Ly
L2x + L2y
(8)
(9)
14
(10)
Lvvv
(11)
0.8.3.
(12)
C
omputo de descriptores de geometra diferencial
1/2
x = (1/2, 0, 1/2) y = 0
1/2
(13)
2
=
(14)
15
(15)
(16)
xn (xn ) = n!
(17)
xn+k (xn ) = 0
(18)
xn (y k ) = 0
(19)
16
y muestra el resultado de
showgrey(Lvvvtilde(discgaussfft(tools, skala), same) < 0)
para los mismos valores de skala.
Pregunta 15 Cual es el efecto de la condici
on de signo en esta expresi
on
diferencial?
Pregunta 16 Agrupa los resultado de este experimento en un collage ilustrativo empleando el comando subplot de Matlab. Resume tus observaciones
y conclusiones.
17