Академический Документы
Профессиональный Документы
Культура Документы
Autor:
Mauricio Villegas Santamara
Directores:
Juan Ramn Torregrosa Snchez
Jaime Riera Guasp
A mi pap,
Agradecimientos
Primero que todo agradezco ms que nadie a mis padres, que me han dado todo
en esta vida y me han hecho la persona que soy ahora. Y en general a mi familia,
que siempre me ha apoyado para conseguir mis metas. Sin ellos no habra podido
venir a Espaa, hacer mi proyecto de fin de carrera y finalmente graduarme como
ingeniero.
A mis amigos les agradezco por la buena amistad, por los buenos momentos, por
entenderme, y por haberme enseado tanto. Sin duda las cosas ms importantes
de la vida no se aprenden en un saln de clase.
Tambin agradezco a todas las personas que en el pasado han sido mis profesores
y de una forma u otra han contribuido en mi formacin y por lo tanto sus
lecciones se vern reflejadas en todos los trabajos que hago. Gracias a la
Universidad Santo Toms y a la Universidad Politcnica de Valencia, las
instituciones que han hecho esto posible.
Por ltimo quiero agradecer especialmente a los profesores D. Juan Ramn
Torregrosa Snchez y D. Jaime Riera Guasp por darme la oportunidad de trabajar
con ellos en este proyecto. Espero que mi trabajo y mi esfuerzo hayan cumplido
las expectativas que tenan, y que mi contribucin les sea de gran utilidad.
ndice
ACRNIMOS
INTRODUCCIN
OBJETIVOS
CAPTULO 1.
1.1.
1.1.1.
1.1.2.
1.1.3.
1.2.
1.2.1.
1.3.
1.3.1.
1.4.
FUNDAMENTOS MATEMTICOS
4
5
5
6
7
8
8
10
11
12
13
2.1.
2.1.1.
2.1.2.
2.2.
2.2.1.
2.2.2.
2.3.
2.4.
2.4.1.
2.5.
CAPTULO 3.
AFMT
ii
36
36
41
44
APLICACIN
58
CONCLUSIONES
79
BIBLIOGRAFA
81
ANEXO A.
83
DEMOSTRACIONES MATEMTICAS
PROGRAMAS EN MATLAB
87
IM2LOGPOL.M
F_AFMT.M
AFMT_DESCRIPTORS.M
IMDISTANCE.M
OBMODE.M (SOLO LA PARTE EN QUE SE DETERMINAN LAS POSICIONES)
iii
87
89
91
93
94
ANEXO C.
C.1.
C.2.
C.3.
C.4.
C.5.
C.6.
C.7.
C.8.
C.9.
C.10.
96
96
98
100
102
104
106
108
110
112
114
iv
Acrnimos
AFMT
CHF
FFT
FMT
Fourier-Mellin Transform
(Transformada de Fourier-Mellin)
FT
Fourier Transform
(Transformada de Fourier)
IAFMT
MT
Mellin Transform
(Transformada de Mellin)
Introduccin
A medida que pasa el tiempo y que la poblacin mundial aumenta, cada vez se
requieren nuevos aparatos que nos ayuden en nuestras. Hasta el momento la
tecnologa ha permitido que se construyan mquinas que hacen cosas imposibles
para una persona, pero se necesita que sean cada vez ms inteligentes para que
sean capaces de hacer tareas ms especficas con poca o ninguna intervencin
humana. De esta necesidad surgen temas como la informtica, la inteligencia
artificial y la robtica, que son los campos de la ciencia llamados a solventar esas
deficiencias.
Una diferencia muy grande entre los seres humanos y las maquinas que creamos,
es que nosotros somos capaces de interpretar y analizar rpidamente todas las
imgenes que reciben nuestros ojos. Para cualquier persona es muy fcil
identificar la especie de un animal con solo mirarlo un momento y no importa
que tan diferente fuera de los que haba visto antes. Lo importante es que el
animal tenga las caractersticas que tienen todos los de su especie. Por otro lado,
programar un ordenador para que identifique la especie de un animal es una tarea
tremendamente complicada y los resultados se asemejan a la capacidad humana.
Aunque en el momento es imposible lograr que un ordenador analice una imagen
de la forma que lo hace una persona, si se han desarrollado muchas tcnicas cuyo
objetivo es extraer de ellas cierta informacin muy especfica. Esto se hace
usando el procesamiento digital de imgenes y lleva el nombre de anlisis de
imgenes digitales. La informacin que se extrae de las imgenes puede ser de
cualquier tipo dependiendo de los requerimientos que se tienen pero cabe
mencionar entre estos el reconocimiento de formas que pretende identificar un
objeto o patrn particular.
En la actualidad existe mucho inters en la Transformada de Fourier-Mellin
Analtica como herramienta para el reconocimiento de formas. Esta transformada
permite extraer fcilmente unos descriptores que identifican un objeto
independientemente del tamao o la orientacin que tengan. Esa caracterstica
permite bastante flexibilidad en las imgenes que se toman de los objetos. Un
ejemplo de una aplicacin de esta transformada es en la identificacin o
autenticacin de personas mediante huellas dactilares.
Aunque la Transformada de Fourier-Mellin Analtica ya se usa en diferentes
aplicaciones, sus caractersticas tan particulares pueden servir para otros
Objetivos
Captulo 1.
Fundamentos matemticos
M f (k , v ) =
1
2
f (r , )r
jv
e jk d
0 0
dr
r
(k , v ) Z R
que son armnicos de e jx. Esta representacin de una funcin se conoce como la
Serie de Fourier Compleja, y para una funcin peridica con respecto a la
variable y con periodo 2, esta serie es [3]
f ( ) = ck e jk .
kZ
1
2
f ( )e jk d .
f k (r ) =
kZ
1
2
f (r , )e jk d .
M f (v ) = f (r )r jv
0
dr
.
r
Omitimos la deduccin de esta frmula porque el objetivo de este proyecto es usar la Transformada de
Fourier-Mellin Analtica.
1
M f (k , v ) =
2
f (r, )r
jv jk
0 0
dr
r
(k , v ) Z R
Para que la integral converja, la constante debe ser un valor real positivo
diferente de cero. En la mayora de los textos sobre el tema, esta constante se
asume igual a 0,5. Al igual que todas las transformadas, existe una frmula para
invertir la AFMT, que es la siguiente.
f (r , ) =
M (k , v )e
kZ
jk
r + jv dv
(r , ) R+* S 1
M f (k , v ) = M f ( k ,v ) ,
( )
I f (k , v ) = f
+ jv
jk f
)
M f (k , v ) .
f = M f (0,0 )
f = arg M f (1,0 )
1+ j
I f (k , v ) = M f (0,0 )
}
M f (k , v )
jk arg M f (1, 0 )
(k , v ) Z R
Estos ya son unos descriptores invariantes a los cambios de escala y rotacin, que
adems son nicos para cada grupo de funciones con similitud plana. Para
entender que ocurre al aplicar esta frmula a una transformada AFMT podemos
mencionar un experimento [5], que consiste en aplicar la AFMT inversa a los
descriptores. El resultado es la misma funcin, pero con una escala y rotacin
diferentes que se podra decir que son los naturales de la funcin.
10
Por ltimo, hay una propiedad que es totalmente necesaria para que los
descriptores AFMT puedan ser usados para determinar la posicin de un objeto.
El requerimiento es que los descriptores no pueden ser invariantes a la traslacin,
ya que eso significara que no contienen informacin de la posicin. La traslacin
en coordenadas cartesianas se define como h(x,y) = f(x-xo,y-yo), por lo tanto para
xo 0, yo 0 se requiere que
I h (k , v ) I f (k , v )
11
d I f , I g = I f (k , v ) I g (k , v ) dv
kZ
1
2
La distancia entre formas se puede definir de muchas otras maneras, por ejemplo
teniendo ms en cuenta ciertos valores de k o v. Haciendo esto es posible lograr
que la comparacin de los objetos sea ms discriminatoria. Pero para beneficiarse
de estas ventajas se debe saber por adelantado ciertas caractersticas del objeto
que se va a detectar, por lo tanto esas distancias se deben definir para una
aplicacin especfica y no en general.
12
13
f (r, )r
jv jk
0 0
dr
,
r
= 2s d = 2ds .
lim =
lim = 0
0
lim = 1
14
Remplazando obtenemos
M f (k , v ) =
1
2
1
2
f (r , )r
0 0
dr
r
jv
)( )
f e 2t ,2s e 2t
e jk (2s ) 2ds
0
1
= 2
jv jk
f (e
2t
2e 2t dt
e 2t
As pues
1
M f (k , v ) = 2
[e
2t
)]
)]
m=0 n=0
2n N1
= 2 e f e 2nt ,2ms
m =0 n =0
M 1 N 1
j 2 km M1 +vn N1 1 1
e .
M N
Por tanto
2
M f (k , v ) =
MN
n
2
N
f e 2nt ,2ms
e
m = 0 n =0
M 1 N 1
vn
+
j 2 km
M N
,
e
es decir
n
2
M f (k , v ) =
FFT2 D e N f e n , m
MN
16
de la regin que se muestrea, los valores deben ser cercanos a cero. Si no ocurre
esto tendremos discontinuidades al recortar la funcin, y la AFMT no
corresponder bien a la funcin original.
Otra consecuencia inevitable de usar un ordenador para calcular la AFMT es que
solo es una aproximacin y por lo tanto el resultado nunca ser exacto. Al definir
una distancia de similitud entre objetos se debe saber que para funciones con
similitud plana ya no se obtendr el valor de cero. Las distancias sern cercanas a
cero y no se puede saber con antelacin cuales son los valores que corresponden
al mismo objeto.
17
En las coordenadas de imagen la posicin de cada pxel se define mediante dos enteros, donde el primer
pxel es (1,1) y es el que se encuentra en la esquina superior izquierda. La primera coordenada define la
posicin vertical y la segunda la posicin horizontal.
18
2.2.1. Ejemplo 1
Como primer ejemplo convertiremos a coordenadas log-polares la imagen de una
mariposa usando los cuatro mtodos de interpolacin disponibles. La imagen a
utilizar es la siguiente.
19
>>
>>
>>
>>
subplot(1,4,1),
subplot(1,4,2),
subplot(1,4,3),
subplot(1,4,4),
imshow(nearest)
imshow(linear)
imshow(cubic)
imshow(spline)
20
(a)
(b)
(c)
(d)
Para los otros tres mtodos no es muy fcil ver la diferencia ya que en todos se
observa una imagen suave. Pero en trminos reales, mientras se interpole
teniendo en cuenta ms puntos, mas se debera aproximar el resultado al objeto
original. Sin embargo, esta diferencia se refleja en el tiempo de clculo, como ya
se mencion. En promedio, los tiempos de ejecucin3 de im2logpol.m para este
ejemplo se observan en la siguiente tabla.
Tiempos de ejecucin medidos en un ordenador Toshiba Satellite Pro M30 con procesador Intel
Centrino 1.5 GHz, sistema operativo Windows XP Profesional y Matlab versin 6.5. El programa con el
que se calcularon estos tiempos es ejemplo1_ medicion_de_tiempos_de_ejecucion.m.
21
Mtodo de interpolacin
Tiempo de ejecucin
[segundos]
0,0483
0,0641
0,1375
0,9436
Nearest
Linear
Cubic
Spline
Como nos podemos dar cuenta, los tiempos de ejecucin son muy diferentes para
cada uno de los tipos de interpolacin. Spline es muchsimo mas lento que los
otros, por eso es que no se usa en imgenes. Cubic es la ms usada en
aplicaciones de imagen, como por ejemplo para cambiar el tamao (en cantidad
de pxeles) de una imagen. Pero para este proyecto, es muy importante que los
tiempos de clculo sean muy pequeos, por eso lo mejor es usar nearest o linear.
2.2.2. Ejemplo 2
Como segundo ejemplo se tomar la imagen de un caballito de mar y se
convertir variando el tamao de la imagen log-polar de salida. La imagen del
caballito de mar se observa en la siguiente figura.
22
Siguiendo el mismo procedimiento del ejemplo anterior, para este caso el rea de
la imagen a convertir es un disco con el centro en las coordenadas x = 126, y =
138 y radio igual a 118. Nuevamente esta regin se observa delimitada en la
figura.
23
(a)
(b)
(c)
(a)
(b)
(c)
Para este ejemplo tambin hay grandes diferencias en los tiempos de ejecucin,
los cuales se encuentran en tabla4. Como es de esperarse, mientras mas pequea
es la imagen que toca calcular, menor es el tiempo de ejecucin.
4
Tiempos de ejecucin medidos en un ordenador Toshiba Satellite Pro M30 con procesador Intel
Centrino 1.5 GHz, sistema operativo Windows XP Profesional y Matlab versin 6.5. El programa con el
que se calcularon estos tiempos es ejemplo2_ medicion_de_tiempos_de_ejecucion.m.
24
Tamao de la imagen
[pxeles]
200x200
100x100
50x50
Tiempo de ejecucin
[segundos]
0,0628
0,0243
0,0159
25
26
2.4.1. Ejemplo 3
Para este ejemplo usaremos la imagen de un pez y calcularemos la AFMT y los
descriptores invariantes usando el programa Afmt_descriptors.m. Despus
graficaremos los resultados para poder analizarlos y compararlos.
En este caso, el rea esta delimitado por una circunferencia de radio 115 y
centrado en las coordenadas x = 130, y = 123. La transformada se calcular para
K = 10 y V = 10. El cdigo en Matlab se encuentra a continuacin.
>> ejemplo3 = im2double(rgb2gray(imread('ejemplo3.bmp')));
>> [Iejemplo3,Mejemplo3,ejemplo3_logpolar] = Afmt_descriptors(ejemplo3, ...
>> [10 10],'Area',[130 123 115],'Size',256);
>> figure, imshow(ejemplo3_logpolar)
>>
>>
>>
>>
absMejemplo3
argMejemplo3
absIejemplo3
argIejemplo3
=
=
=
=
abs(Mejemplo3);
angle(Mejemplo3);
abs(Iejemplo3);
angle(Iejemplo3);
27
Primero se lee la imagen para que quede como una variable en el workspace de
Matlab en escala de grises, y posteriormente se calculan los descriptores
invariantes AFMT. Lo siguiente es desplegar los resultados. En la Figura 10(b)
se observa la imagen en coordenadas log-polares.
(a)
(b)
Figura 10. (a) Regin de la imagen de un pez para la cual se va a calcular la AFMT y los
descriptores invariantes en el ejemplo 3. (b) Imagen del pez en coordenadas log-polares.
28
Figura 11. Grfica del mdulo de la AFMT calculado para la imagen de un pez en el
ejemplo 3.
29
Figura 12. Grfica del mdulo de los descriptores AFMT calculados para la imagen de
un pez en el ejemplo 3.
30
(a)
(b)
31
d I f , Ig
2 2
V K
= I f (k , v ) Ig (k , v )
v = V k = K
2.5.1. Ejemplo 4
Como ejemplos conviene calcular la distancia primero para imgenes que
representan objetos diferentes. Despus se calcula para imgenes que representan
el mismo objeto pero con un tamao e inclinacin diferentes. Usaremos la
imagen del pez del ejemplo anterior, el mismo pez pero rotado 50 y un tamao
del 64%, y la imagen del caballito de mar. Las tres imgenes se pueden observar
en la figura.
32
(a)
(b)
(c)
Figura 14. Imgenes usadas en el ejemplo 4. (a) La misma imagen del ejemplo 3. (b) La
imagen del ejemplo 3 pero rotada 50 y con un tamao de 64% del original. (c) La misma
imagen del ejemplo 2.
Los comandos para calcular las distancias de similitud en Matlab son los
siguientes
>> ejemplo2 = im2double(rgb2gray(imread('ejemplo2.bmp')));
>> ejemplo3 = im2double(rgb2gray(imread('ejemplo3.bmp')));
>> ejemplo4 = im2double(rgb2gray(imread('ejemplo4.bmp')));
>> Iejemplo2 = Afmt_descriptors(ejemplo2,[10 10],'Area',[126 138 118],'Size',256);
>> Iejemplo3 = Afmt_descriptors(ejemplo3,[10 10],'Area',[130 123 115],'Size',256);
>> Iejemplo4 = Afmt_descriptors(ejemplo4,[10 10],'Area',[132.5 133 73.6],'Size',256);
>> d32 = imdistance(Iejemplo3,Iejemplo2)
>> d34 = imdistance(Iejemplo3,Iejemplo4)
>> d24 = imdistance(Iejemplo2,Iejemplo4)
entre la distancia del mismo objeto y objetos diferentes es del orden de doce
veces menor. Con este tipo de resultados se puede concluir que la distancia
euclidea basada en los descriptores AFMT es muy robusta en trminos de
reconocimiento de formas.
Para este ejemplo conviene medir los tiempos de ejecucin ya que nos dan una
referencia para poder predecir cuanto tardan los programas que calculan
distancias entre formas. Estos tiempos se encuentran en la siguiente tabla5.
Comando
Tiempo de ejecucin
[segundos]
0,1380
0,1389
0,1386
1 x 10-4
1 x 10-4
1 x 10-4
Iejemplo2
Iejemplo3
Iejemplo4
d32
d34
d24
Tiempos de ejecucin medidos en un ordenador Toshiba Satellite Pro M30 con procesador Intel
Centrino 1.5 GHz, sistema operativo Windows XP Profesional y Matlab versin 6.5. El programa con el
que se calcularon estos tiempos es ejemplo4_ medicion_de_tiempos_de_ejecucion.m.
34
Captulo 3.
35
3.1.1. Ejemplo 5
36
37
x =
68
y =
193
tiempo_de_ejecucion =
1.0411e+003
38
39
40
para r = [0 ,R ], = [0 ,2 ]
otros casos
La AFMT se debe separar para los casos de k igual a cero y diferente de cero.
Para k 0
M f (k , v ) =
=
1
2
1
2
f (r , )r
jv jk
0 0
R 2
Lr
jv jk
0 0
dr
r
dr
r
2
r jv 1 jk
e
0
jv 0 jk
jv
j 2k
jL R
e
1
=
2k jv
L
=
2
=0
Para k = 0
1
M f (0, v ) =
2
=
1
2
f (r , )r
jv jk
0 0
R 2
Lr
jv
0 0
dr
r
dr
r
L r jv
2
=
[ ]0
2 jv 0
41
e j 2k = 1 para todo k
R jv
(2 )
jv
R jv
=L
jv
=
L
2
R jv
L
M f (k , v ) = jv
0
para k = 0
otros casos
M f (1,0 ) = 0
=>
v
L
1+ j
(
)
M
0
,
0
f
=
=>
[e
jk arg M f (1, 0 )
]= 1
1+ j
R + jv
Para k 0
I f (k , v ) = 0
Para k = 0
I f (0, v )
= M f (0,0 )
1+ j
}
M f (k , v )
jk arg M f (1, 0 )
v
1+ j
L
R jv
+ jv
[1]L
=
R
jv
L
=
jv
42
L
1
I f (k , v ) = 1 j v
para k = 0
otros casos
v
I f (k , v ) = 1 j
para k = 0
otros casos
Figura 18. Grfica del mdulo de los descriptores AFMT de un disco centrado en el
origen.
43
3.2.1. Ejemplo 6
Para estar seguros que ste es un buen modelo para los descriptores AFMT de un
fondo casi negro, lo podemos comparar con una imagen real. En la Figura 19
estn los descriptores AFMT calculados a partir del mismo fondo negro que se
encuentra en el fotograma del ejemplo 5. El cdigo para generar las grficas de la
Figura 18 y la Figura 19 es el siguiente.
>>
>>
>>
>>
>>
>>
>>
Idisco = zeros(21,21);
for v = [-10:10]
Idisco(11,v+11) = 1/(1-i*(v/0.5));
end
absIdisco = abs(Idisco);
[K,V] = meshgrid([-10:10]);
figure, plot3(K,V,absIdisco'), grid on, xlabel('k'), ylabel('v')
>>
>>
>>
>>
>>
fotograma = im2double(rgb2gray(imread('ejemplo5_fotograma.bmp')));
Ifondo = Afmt_descriptors(fotograma,[10 10],'Area',[128 128 50],'Size',256);
absIfondo = abs(Ifondo);
[K,V] = meshgrid([-10:10]);
figure, plot3(K,V,absIfondo'), grid on, xlabel('k'), ylabel('v')
>> imdistance(Idisco,Ifondo)
Figura 19. Grfica del mdulo de los descriptores AFMT de un fondo casi negro.
44
Comparando las grficas, son tan parecidas que se podra pensar que son la
misma pero en realidad se obtuvieron de fuentes muy diferentes. Pero s se
alcanza a ver que en la grfica de los descriptores del fondo negro las curvas para
k diferente de cero no son perfectamente rectas como si ocurre en la otra. Como
en este proyecto se defini una distancia de similitud entre formas, tambin se
puede aplicar para estos descriptores, y es de slo 0,0033. Es coincidencia que
esta distancia de similitud sea tan pequea porque depende del valor de la
intensidad del disco L que por conveniencia lo tomamos igual a . Sin embargo
este pequeo experimento demuestra que la hiptesis sobre el problema del
fondo es correcta.
Por ltimo debemos mencionar que para k = 0 los descriptores de este ejemplo
tambin son bastante similares a los del ejemplo 3. Esto puede ser consecuencia
del fondo que rodea todos los objetos en una imagen como se mencionaba
anteriormente. Pero tambin es un comportamiento innato de los descriptores
AFMT comenzando por el hecho de que para k = 0, v = 0 siempre se tiene un
valor constante de uno.
45
Como no se tiene esta propiedad, contrarrestar el efecto del fondo puede ser una
operacin matemtica bastante compleja y esto se traduce en un gran incremento
en el tiempo de clculo. Una solucin mucho mas simple es ignorar los valores
para k = 0, ya que como se comprob estos son los que definen el fondo.
3.3.1. Ejemplo 7
Para entender esa nueva definicin para la distancia de similitud entre formas
podemos calcular nuevamente la distancia de similitud para el ejemplo del coche
de juguete.
>> objeto = im2double(rgb2gray(imread('ejemplo5_objeto.bmp')));
>> fotograma = im2double(rgb2gray(imread('ejemplo5_fotograma.bmp')));
>> Iobjeto = Afmt_descriptors(objeto,[10 10],'Area',[128 118 80],'Size',32);
>> Iobjeto(21,:) = zeros(1,21);
>> dzero = imdistance(Iobjeto,zeros(21,21))
>> [Y,X] = size(fotograma);
>> for x = 1:X
>>
for y = 1:Y
>>
Ifotograma = Afmt_descriptors(fotograma,[10 10],'Area',[x y 40],'Size',32);
>>
Ifotograma(K+1,:) = zeros(1,21);
>>
d(y,x) = imdistance(Iobjeto,Ifotograma);
>>
end
>> end
>> dmin = min(min(d))
>> [y,x] = find(d==dmin)
>> figure, imshow(d,[]), colormap(jet), colorbar, pixval
46
48
49
50
Una vez definidos los dos algoritmos que dependen de la velocidad del objeto, se
puede explicar bien cual es la diferencia entre un objeto que se mueve lentamente
de otro que se mueve rpido. Para el algoritmo de movimiento lento, el objeto se
puede mover hasta la velocidad mxima que se puede cambiar arbitrariamente.
Pero mientras mayor sea la velocidad mxima, ms tiempo durar la
determinacin de la posicin del objeto. Por lo tanto mientras menor sea el
movimiento, mejor, y no hay un umbral que separa los dos tipos de movimiento.
Con el algoritmo de movimiento rpido se tiene un requisito, y es que la imagen
debe cambiar significativamente. Para estar seguros de que el cambio sea
suficiente, el objeto se debe mover para quedar totalmente por fuera de su
posicin anterior. Con esto ya se puede definir cual es el umbral, si un objeto se
mueve mas que su propio radio se dice que es un movimiento rpido de lo
contrario es uno lento.
3.4.3.1. Ejemplo 8
Un ejemplo de una mascara generada usando este algoritmo se encuentra en la
Figura 21. Son tres fotogramas de un vdeo de una bola en cada libre, y se
genera la mscara para el tercer fotograma. Claramente se observa que en la
mscara, la zona blanca es donde se encuentra la bola en el tercer fotograma.
51
(a)
(b)
(c)
(d)
(e)
(f)
Figura 21. Ejemplo de la creacin de una mscara con el algoritmo de movimiento rpido.
(a) Fotograma 1. (b) Fotograma 2. (c) Fotograma 3. (d) Diferencia entre los fotogramas 2 y
3, diferencia. (e) Valores grandes de la diferencia, temporal1. (f) Mascara para el
fotograma 3, mascara{3}.
n = 2;
diferencia = abs( fotograma{n-1} - fotograma{n} );
maximo_diferencia = max( max( diferencia ) );
temporal1 = diferencia > maximo_diferencia/2;
temporal2 = temporal1 & mascara{n-1};
mascara{n} = temporal1 - temporal2;
>>
>>
>>
>>
>>
>>
n = 3;
diferencia = abs( fotograma{n-1} - fotograma{n} );
maximo_diferencia = max( max( diferencia ) );
temporal1 = diferencia > maximo_diferencia/2;
temporal2 = temporal1 & mascara{n-1};
mascara{n} = temporal1 - temporal2;
Para este algoritmo sucede lo mismo que para el anterior, no funciona para el
primer fotograma. En ambos casos es necesario tratar independiente la posicin
52
inicial del objeto, y ese es el tema que se trata en la siguiente seccin. Por esta
razn, en el ejemplo la mscara para el primer fotograma se tomo como todo
ceros.
53
(a)
(b)
(c)
(d)
3.4.4.1. Ejemplo 9
Como se puede observar en la Figura 22, la mascara generada se compone de
solo una regin y une todas las partes que se movieron del objeto. La forma no es
circular, igual que la bola, porque en los fotogramas una parte del objeto estaba
oculto. Sin embargo la regin si incluye la posicin central del objeto, y sta
puede ser determinada satisfactoriamente.
54
se = strel('disk',15);
temporal2 = imclose(temporal1,se);
se = strel('square',5);
mask{1} = imopen(temporal2,se);
55
Inicio
No
Si
Se suministr
posicin inicial?
No
Es este el ltimo
fotograma?
Si
Fin
Sumar mscaras.
56
Si la cmara de vdeo no se mueve, sera posible generar una imagen que slo
incluya el fondo. Esto se puede lograr por ejemplo haciendo un promedio de las
imgenes para una gran cantidad de fotogramas, pero tambin se puede tomar
una foto cuando no hay ningn objeto. Con esa imagen se puede eliminar el
fondo para cada fotograma usando la misma tcnica de restar imgenes (el fondo
y el fotograma) y en esta ocasin generar una mascara para los objetos que hay
sobre el fondo. Con esto, eliminar el fondo slo es cuestin de multiplicar el
fotograma por la mscara. Esta solucin para el problema del fondo funciona
bien en pocas situaciones. No funcionara por ejemplo si la cmara se encuentra
al aire libre, el fondo cambiar mucho dependiendo de la hora del da y del clima
que se tenga. La iluminacin cambia dependiendo de la posicin del sol, si hay
muchas o pocas nubes, o si esta lloviendo o nevando.
Otra solucin para el problema del fondo es reducir al mximo el rea del fondo
que se incluye en la regin circular que contiene al objeto. Esto se lograra si el
radio de esa regin es igual al radio del crculo ms pequeo que contiene al
objeto. Esto se puede incluir en el algoritmo de la seccin anterior. Despus de la
determinacin de la posicin de objeto, se calcula la distancia de similitud para
una regin centrada en ese punto pero con diferentes radios. Para el siguiente
fotograma se detecta la posicin del objeto usando el radio que gener la mnima
distancia de similitud.
57
Captulo 4.
Aplicacin
58
59
medicin tendra que ser cada cierto periodo de tiempo, por ejemplo cada
minuto.
Para que las mediciones sean en coordenadas celestes y sean bien precisas
primero se debe saber exactamente hacia que punto apunta la cmara de vdeo.
Para saber esto convendra montar la cmara en un trpode del tipo que se usan
en los telescopios. Tambin es necesario saber que tamao tiene la imagen del
cielo, o mejor dicho cual es el rea que cubre. Esta informacin no es fcil de
determinar ya que depende del sistema ptico de la cmara que genera la imagen
y no podemos asumir que se sabe como es. Una alternativa es medirlo
experimentalmente que se podra hacer tomando como referencia las estrellas.
El algoritmo para determinar la posicin de la luna se debe modificar un poco
comparado con el que ya se propuso para objetos que se mueven lentamente.
Este sistema no sera muy preciso si la posicin slo puede ser en cada pxel.
Como se mencionaba en captulos anteriores, los descriptores AFMT se pueden
calcular para una regin que no necesariamente tiene que estar centrada en un
pxel. Por lo tanto la precisin simplemente depende de cada cuanto se calculan
los descriptores, claro que mientras mas puntos se procesen, mas tardar el
clculo. Un algoritmo eficiente para esta aplicacin sera primero determinar la
posicin del mnimo de la funcin de similitud usando el algoritmo de
movimiento lento. Despus se toma el mnimo de la funcin y los ocho puntos
ms cercanos y se calculan las distancias de similitud para los puntos
intermedios. Se busca el mnimo y se repite el proceso anterior. Mientras mas se
repita ese ciclo mayor es la precisin. En la siguiente figura se observa una
explicacin grfica para este algoritmo.
60
61
62
Una vez se ejecuta el programa aparece una ventana vaca con tres mens
Archivo, Proyecto y Ayuda, como se observa en la siguiente figura.
63
64
Proyecto. Aparece una ventana para abrir el archivo, que para imgenes si se
pueden usar muchos formatos entre los que estn BMP, JPG, JPEG, GIF que son
los ms usados en Windows y en Internet.
Una vez definida la imagen de donde se va a definir el objeto, sta aparece en la
ventana y el cursor cambia a una cruz que sirve para seleccionar el centro del
objeto. El centro y el radio de la regin que define el objeto se puede modificar
con el teclado. Sobre la imagen en color verde claro, se observa un crculo y el
centro como se definieron, sta es una gran ayuda para definir el objeto. Ya
definido el objeto, otras opciones que se pueden configurar son los parmetros K
y V de la AFMT, el tamao del objeto en coordenadas log-polares y el mtodo de
interpolacin que se usar. En la figura se observa un objeto definido del quinto
fotograma del vdeo que estamos usando de ejemplo.
Para terminar la definicin del objeto se pulsa sobre el botn Listo, y quedan
disponibles tres opciones. La primera, es ver la imagen con o sin el crculo que
define el objeto. Segundo se puede observar el objeto convertido a coordenadas
log-polares. Y por ltimo se puede observar la grfica del modulo de los
descriptores AFMT que se encuentra en la Figura 28 para el presente ejemplo.
65
Figura 28. Visualizacin del mdulo de los descriptores AFMT del un objeto definido
en el programa ObMoDe.
67
68
69
Figura 31. Primer fotograma del vdeo de una calle usado como ejemplo.
70
no es posible andar muy rpido. Adems los fotogramas son slo cada 0,04
segundos, por lo tanto se puede concluir que el movimiento es solamente de tipo
lento. Como velocidad mxima del objeto vamos a asumir 5 pxeles. Una
caracterstica de estos videos es que la velocidad de los objetos es mayor cuando
estn ms cerca de la cmara lo que complica un poco la decisin de la velocidad
mxima.
Otros parmetros que se configuran son: K y V que se tomaron iguales a 10; el
tamao del objeto en coordenadas log-polares que se tom como 32; y el mtodo
de interpolacin que se uso principalmente fue nearest.
Con respecto a las otras opciones restantes que se pueden configurar, se hicieron
pruebas para cada caso: especificando la posicin inicial; sin especificar la
posicin inicial; con radio variable. Todos los resultados que se obtuvieron, se
encuentran en el Anexo C.
71
(a)
(b)
Figura 32. Primera prueba con el vdeo de la calle. (a) Coche seleccionado que define
el objeto en el primer fotograma. (b) Posicin del coche en el ltimo fotograma con la
traza de su movimiento.
72
(a)
(b)
Figura 33. Segunda prueba con el vdeo de la calle. (a) Coche seleccionado que define
el objeto en el primer fotograma. (b) Posicin del coche en el ltimo fotograma con la
traza de su movimiento.
Las dos pruebas presentadas aqu tardaron 6 minutos 30,67 segundos y 6 minutos
29,25 segundos respectivamente. En promedio esto es 14,369 segundos que no es
tanto considerando que el ordenador en que se hicieron las pruebas no es el ms
indicado. La prueba que se realiz con interpolacin bilineal tard 0,78 segundos
adicionales que comparado con los varios minutos que tarda todo el proceso la
diferencia no es muy significativa.
73
Figura 34. Tercera prueba con el vdeo de la calle, funcin de distancia de similitud
para el primer fotograma cuando no se especifica la posicin inicial.
74
(a)
(b)
Figura 35. Cuarta prueba con el vdeo de la calle. (a) Coche seleccionado que define el
objeto en el primer fotograma. (b) Posicin del coche en el ltimo fotograma con la
traza de su movimiento.
Para poder analizar si el uso del radio variable produce unos resultados mejores
como es de esperarse segn la teora, debemos comparar las distancias de
similitud mnimas para cada fotograma. Como el objeto es el mismo para la
primera y cuarta prueba, sus distancias de similitud se pueden comparar
directamente. Mientras ms pequeas sean las distancias de similitud, mejor es el
algoritmo. En la Tabla 4 estn esos valores que estn graficados en la Figura 36.
Fotograma
No.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
0,0738973
0,0785066
0,0800082
0,0780053
0,0622099
0,0772506
0,0928553
0,1020470
0,0886841
0,1018540
0,0985513
0,0588717
0,0498945
0,0545915
0,0540716
0,0424731
0,0455587
0,0565428
0,0518470
0,0416545
0,0382121
0,0673734
8.00E-02
6.00E-02
4.00E-02
Radio variable
28
25
Fotograma
22
19
16
13
10
0.00E+00
2.00E-02
1
Distancia de
similitud
1.00E-01
Radio fijo
Figura 36. Grfica de la distancia de similitud mnima para cada fotograma (Tabla 4).
76
(a)
(b)
Figura 37. (a) Imagen digitalizada en formato MPEG del formato anlogo VHS con
entrelazado. (b) La misma imagen (a) digitalizada sin compresin y procesada para
compensar el entrelazado.
77
78
Captulo 5.
Conclusiones
79
Otra conclusin es que para usar la AFMT es muy importante que la calidad de la
imagen sea buena. Se tiene bastante flexibilidad, pero mientras peor sea la
resolucin o si se tiene mucho ruido o distorsiones, menos fiables sern los
resultados. Particularmente en el caso de los vdeos, los formatos digitales mas
usados, emplean mtodos de compresin en los que se pierde mucha informacin
y por lo tanto calidad de la imagen. La compresin elimina todos los detalles que
el ojo humano no percibe. Esto nos lleva a concluir que para aplicar las tcnicas
basadas en la AFMT en vdeos, no se pueden usar compresiones en que haya
perdida de informacin, y mientras mayor sea la calidad de la imagen, mejores
resultados se tendrn.
Adems de los resultados que se obtuvieron, los programas desarrollados en
Matlab son una gran herramienta para poder experimentar y desarrollar
algoritmos especiales para cada aplicacin. Esta puede ser la base para trabajos
futuros, y la posible implementacin de algunas de las aplicaciones que se
propusieron.
80
Bibliografa
[1] http://www-gap.dcs.st-and.ac.uk/~history/Mathematicians/Fourier.html
[2] http://www-gap.dcs.st-and.ac.uk/~history/Mathematicians/Mellin.html
[3] CARLSON, A. Bruce. Communication Systems. McGraw-Hill, Third Edition
1986.
[4] MLLER, Roberto; SNCHEZ, Hugo; SNCHEZ, Edmundo. Image
Recognition Using the Fourier-Mellin Transform. GSPx 2003 Papers.
[5] DERRODE, Stphane. Reprsentation de formes planes niveaux de gris par
diffrentes approximations de Fourier-Mellin analytique en vue d'indexation de
bases d'images. Thse ou HDR soutenue le 15/12/1999 Enst-Bretagne.
[6] DERRODE, Stphane; GHORBEL, Faouzi. Robust and efficient FourierMellin transform approximations for gray-level image reconstruction and
complete invariant description. Computer Vision and Image Understanding,
2001, Volume 83, No. 1, p. 57-78.
[7] GHORBEL, Faouzi. A complete invariant description for gray-level images
by the harmonic analysis approach. Pattern Recognition Letters, October 1994,
Volume 15 Issue 10.
[8] DERRODE, Stphane; GHORBEL, Faouzi. Shape analysis and symmetry
detection in gray-level objects using the analytical Fourier-Mellin
representation. Signal Processing, January 2004, Volume 84, Issue 1, p. 25-39.
[9] Columbia Object Image Library (COIL-20).
[10] CASTLEMAN, Kenneth R. Digital Image Processing. Prentice-Hall, 1996.
[11] WANG, Yiwei; VAN DYCK, Robert E.; DOHERTY, John F. Tracking
Moving Objects In Video Sequences. Proc. CISS , Princeton, NJ, Mar. 2000.
81
[12] MEIER, Esther B.; ADE, Frank. Tracking Cars in Range Images Using the
Condensation Algorithm. IEEE/IEEJ/JSAI International Conference on
Intelligent Transportation Systems ITSC'99. Tokyo, Japan, 5th-8th October 1999,
p. 129-134.
[13] STEFANO, Luigi; VIARANI, Enrico. Vehicle Detection and Tracking
Using the Block Matching Algorithm. Recent Advances in Signal Processing and
Communications. N. Mastorakis Editor, World Scientific and Engineering
Society Press, 1999.
82
Anexo A.
Demostraciones matemticas
1
2
1
2
g (r , )r
jv jk
0 0
f (r , + )r
dr
r
jv jk
0 0
dr
r
R = r dR = dr
= + d = d
1
2
2 +
jv jk ( )
f (R, )(R )
+ jv
jk
1
2
f (R, )R
jv jk
0 0
(dR )
(R )
dR
R
Y finalmente obtenemos
M g (k , v ) = + jv e jk M f (k , v )
83
1
2
f (r, )r
jv jk
0 0
dr
r
1
2
1
2
1
2
1
2
1
2
f (r , )r
j ( v ) j ( k )
0 0
f (r, + )r
dr
r
r jv e jk d
dr
r
r jv e jk d
dr
r
r jv e jk d
0 0
2
f (r, + )r
0 0
f (r, + )r
0 0
f (r, + )r
jv jk
0 0
dr
r
dr
r
= M f (k , v )
M f ( k ,v ) = M f ( k ,v )
84
Para este tipo de funciones recordamos que la relacin entre sus AFMTs est
dada por el teorema de traslacin en coordenadas log-polares
M g (k , v ) = + jv e jk M f (k , v )
I g (k , v ) = M g (0,0)
(
= (
}
M g (k , v )
jk arg M g (1, 0 )
1+ j
= + j (0 )e j (0 ) M f (0,0)
1+ j
M f (0,0 )
1+ j
= jv M f (0,0 )
1+ j
= M f (0,0 )
1+ j
= M f (0,0 )
} + jv jk
e M f (k , v )
jk arg + j ( 0 )e j (1 ) M f (1, 0 )
} + jv jk
e M f (k , v )
} + jv jk
e M f (k , v )
jk arg e j M f (1, 0 )
jk arg e j M f (1, 0 )
( {
} ) jk
e M f (k , v )
jk arg M f (1, 0 ) +
}
M f (k , v )
jk arg M f (1, 0 )
= I f (k , v )
I f (k , v ) = I g (k , v )
El resultado es que los descriptores son los mismos para f que para g. Como f y g
se relacionan por una similitud plana, esto demuestra que los descriptores si son
invariantes para cualquier otra funcin con la misma similitud.
85
1
2
h(x, y )(x + jy )
(x
+ y2
k 2 + jv
2
dxdy
Por otra parte, dos funciones f y g relacionadas por una traslacin se expresan
h( x , y ) = f ( x x o , y y o )
M h (k , v ) =
1
2
1
2
f ( x xo , y y o )(x + jy )
(x
k 2 + jv
2
+ y2
h(x, y )(x + jy )
(x
dxdy
+ y2
1
2
k 2 + jv
2
dxdy
X = x x o dX = dx
Y = y y o dY = dy
f ( X , Y )[( X + xo ) + j (Y + y o )]
[( X + x )
o
+ (Y + y o )
k 2 + jv
2
dX dY
Esa expresin no se puede simplificar de tal forma que sea igual a la AFMT de la
funcin f.
1
2
f ( X , Y )[ X + jY ]
[X
+Y2
k 2 + jv
2
dX dY
M h (k , v ) M f (k , v )
86
Anexo B.
Programas en Matlab
B.1. im2logpol.m
function logpolar = im2logpol(varargin)
% Convierte una imagen de coordenadas cartesianas a coordenadas log-polares
%
% LOGPOLAR = im2logpol(IMAGE,'PropertyName',PropertyValue,...)
%
%
LOGPOLAR es una matriz que representa una imagen en escala de grices
%
con coordenadas log-polares, obtenida de la imagen original IMAGE. Las
%
siguientes propiedades opcionales se pueden modificar:
%
%
----------------------------------------------------------------%
| PropertyName
| PropertyValue
|
%
----------------------------------------------------------------%
| 'Area'
| [X0 YO R], vector de tres elementos que
|
%
|
|
especifica el centro y el radio del area
|
%
|
|
circular de la imagen que sera convertida. |
%
----------------------------------------------------------------%
| 'Size'
| [M N], especifica el tamao de la imagen
|
%
|
|
log-polar de salida. M y N se refieren a |
%
|
|
las coordenadas de angulo y log-radio
|
%
|
|
respectivamente. Si solo se especifica M |
%
|
|
la salida es cuadrada de tamao M.
|
%
----------------------------------------------------------------%
| 'Method'
| Cadena de caracteres con el nombre del
|
%
|
| metodo de interpolacion.
|
%
|
| 'nearest' - nearest neighbor interpolation |
%
|
| 'linear' - bilinear interpolation
|
%
|
| 'cubic'
- bicubic interpolation
|
%
|
| 'spline' - spline interpolation
|
%
----------------------------------------------------------------%
% Version: 4-A Fecha: 08/07/2004
%
% Mauricio Villegas Santamaria
if nargin == 0
error('Hacen falta argumentos de entrada.');
end
cartesian = varargin{1};
[Y,X] = size(cartesian);
AreaCentreX = (X-1)/2+1;
AreaCentreY = (Y-1)/2+1;
AreaRadius = sqrt(((X-1)^2)+((Y-1)^2))/2;
M = max([X Y]);
N = M;
Method = 'linear';
if nargin > 1
for index = 2:2:nargin
if nargin == index
break
end
switch varargin{index}
case 'Area'
Area = varargin{index+1};
% Si se especifica Area
% Cambiar las coordenadas del centro y el
87
% Si se especifica Size
% Cambiar el tamao de la imagen log-polar
% Si se especifica Method
% Cambiar metodo de interpolacion
theta = [0:2*pi/M:2*pi-2*pi/M];
rho = transpose(logspace(0,log10(AreaRadius),N));
x = rho*cos(theta)+AreaCentreX;
y = rho*sin(theta)+AreaCentreY;
logpolar = interp2(cartesian,x,y,Method);
mask = (x>X) | (x<1) | (y>Y) | (y<1);
logpolar(mask) = 0;
% Hacer la interpolacion
% Si las muestras estaban por fuera
del area original de la imagen
ponerlas como negro
88
B.2. F_Afmt.m
function [Mf,logpolar] = F_Afmt(varargin)
% Transformada de Fourier-Mellin Analitica (AFMT) de una imagen usando el algoritmo
rapido
%
% [AFMT,LOGPOLAR] = F_Afmt(IMAGE,[K V],IM2LOGPOL_PROPERTIES)
%
%
Donde IMAGE es una matriz que representa una imagen en escala de grises;
%
K, V, son los parametros de la transformada; IM2LOGPOL_PROPERTIES son
%
las propiedades opcionales que pueden ser especificadas para la transformacion
%
a log-polar, vea HELP IM2LOGPOL.
%
%
AFMT es la Transformada de Fourier-Mellin Analitica calculada usando el
%
algoritmo rapido; y LOGPOLAR es la imagen convertida a coordenadas log-polares.
%
% Version: 3-A Fecha: 08/07/2004
%
% Mauricio Villegas Santamaria
if nargin == 0
error('Hacen falta argumentos de entrada.');
end
f = varargin{1};
[Y,X] = size(f);
% Obtener el tamao de la imagen
Area = [(X-1)/2+1, (Y-1)/2+1, sqrt(((X-1)^2)+((Y-1)^2))/2]; % Area predeterminada
Size = max([X Y]);
% Tamao de la imagen log-polar predeterminado
Method = 'linear';
% Metodo de interpolacion predeterminado
sigma = 0.5;
% Sigma = 0.5 predeterminado
if nargin > 2
for index = 3:2:nargin
if nargin == index
break
end
switch varargin{index}
case 'Area'
Area = varargin{index+1};
case 'Size'
Size = varargin{index+1};
case 'Method'
Method = varargin{index+1};
case 'Sigma'
sigma = varargin{index+1};
end
end
end
if nargin == 1
K = floor((min(Size)-1)/2);
V = K;
else
K = varargin{2}(1);
V = varargin{2}(2);
end
% Si se especifica Area
% Cambiar las coordenadas del centro y el radio
del area de la imagen
% Si se especifica Size
% Cambiar el tamao de la imagen log-polar
% Si se especifica Method
% Cambiar metodo de interpolacion
% Si se especifica Sigma
% Cambiar sigma
%
%
%
%
%
K predeterminado
V predeterminado
Si los parametros AFMT se especifican
Cambiar K
Cambiar V
logpolar = im2logpol(f,'Area',Area,'Size',Size,'Method',Method);
f = logpolar;
% Convertir la imagen de coordendas cartesianas a log-polares:
%
%
2*pi*n/N
%
f(e
, 2*pi*m/M)
M = size(f,2);
N = size(f,1);
a = 2*pi*sigma/N;
89
90
B.3. Afmt_descriptors.m
function [If,Mf,logpolar] = Afmt_descriptors(varargin)
% Familia completa de descriptores AFMT de una imagen invariantes a cambios de tamao y
rotacion
%
% [AFMTD,AFMT,LOGPOLAR] = AFMT_descriptors(IMAGE,[K V],IM2LOGPOL_PROPERTIES)
%
%
Donde IMAGE es una matriz que representa una imagen en escala de grises;
%
K, V, son los parametros de la transformada; IM2LOGPOL_PROPERTIES son
%
las propiedades opcionales que pueden ser especificadas para la transformacion
%
a log-polar, vea HELP IM2LOGPOL.
%
%
AFMT es la Transformada de Fourier-Mellin Analitica calculada usando el
%
algoritmo rapido; y LOGPOLAR es la imagen convertida a coordenadas log-polares.
%
%
AFMTD es una matriz con los descriptores basados en la Transformada de
%
Fourier-Mellin Analitica (AFMT) invariantes a cambios de tamao y rotacion;
%
AFMT es la Transformada de Fourier-Mellin Analitica calculada usando el
%
algoritmo rapido; y LOGPOLAR es la imagen IMAGE convertida a coordenadas
%
log-polares.
%
% Version: 5-A Fecha: 18/08/2004
%
% Mauricio Villegas Santamaria
if nargin == 0
error('Hacen falta argumentos de entrada.');
end
f = varargin{1};
[Y,X] = size(f);
% Obtener el tamao de la imagen
Area = [(X-1)/2+1, (Y-1)/2+1, sqrt(((X-1)^2)+((Y-1)^2))/2]; % Area predeterminada
Size = max([X Y]);
% Tamao de la imagen log-polar predeterminado
Method = 'linear';
% Metodo de interpolacion predeterminado
sigma = 0.5;
% Sigma = 0.5 predeterminado
if nargin > 2
for index = 3:2:nargin
if nargin == index
break
end
switch varargin{index}
case 'Area'
Area = varargin{index+1};
case 'Size'
Size = varargin{index+1};
case 'Method'
Method = varargin{index+1};
case 'Sigma'
sigma = varargin{index+1};
end
end
end
if nargin == 1
K = floor((min(Size)-1)/2);
V = K;
else
K = varargin{2}(1);
V = varargin{2}(2);
end
% Si se especifica Area
% Cambiar las coordenadas del centro y el radio
del area de la imagen
% Si se especifica Size
% Cambiar el tamao de la imagen log-polar
% Si se especifica Method
% Cambiar metodo de interpolacion
% Si se especifica Sigma
% Cambiar sigma
%
%
%
%
%
K predeterminado
V predeterminado
Si los parametros AFMT se especifican
Cambiar K
Cambiar V
logpolar = im2logpol(f,'Area',Area,'Size',Size,'Method',Method);
f = logpolar;
% Convertir la imagen de coordendas cartesianas a log-polares:
%
%
2*pi*n/N
91
f(e
, 2*pi*m/M)
M = size(f,2);
N = size(f,1);
a = 2*pi*sigma/N;
for n = 0:N-1
b = a*n;
for m = 0:M-1
f(n+1,m+1) = exp(b)*f(n+1,m+1);
end
end
% Calcular:
2*pi*sigma*n/N
2*pi*n/N
%
e
* f(e
, 2*pi*m/M)
Mf = (2*pi/(N*M)).*fftshift(fft2(f));
% Calcular: 2*pi M-1 N-1
2*pi*sigma*n/N
2*pi*n/N
-j2*pi*(km/M+vn/N)
%
---- sum sum e
* f(e
, 2*pi*m/M) * e
%
MN m=0 n=0
Mf = Mf((N/2+1-V):(N/2+1+V),(M/2+1-K):(M/2+1+K));
% Si los parametros K y V son suministrados, decartar el resto de los resultados
Mf = transpose(Mf);
M00 = Mf(K+1,V+1);
argM10 = angle(Mf(K+2,V+1));
% Guardar Mf(0,0)
% Guardar arg{Mf(1,0)}
if M00 ~= 0
for k = -K:K
% Para todos los valores de k=[-K,K] y v=[-V,V]
for v = -V:V
If(k+K+1,v+V+1) = (M00^((i*v-sigma)/sigma))*exp(-i*k*argM10)*Mf(k+K+1,v+V+1);
end
end
% Calcular:
(jv-sigma)/sigma
-jk*arg{Mf(1,0)}
%
Mf(0,0)
* e
* Mf(k,v)
else
If = Mf;
end
92
B.4. imdistance.m
function d = imdistance(I1,I2)
% Distancia de similitud entre dos imagenes invariante a cambios de tamao y rotacion
(AFMT)
%
% DISTANCIA = imdistance(AFMT_DESCRIPTORS1,AFMT_DESCRIPTORS2)
%
%
Donde AFMT_DESCRIPTORS1 y AFMT_DESCRIPTORS2 son los descriptores AFMT invariantes
%
a cambios de tamao y rotacion calculados usando AFMT_DESCRIPTORS.M. DISTANCIA es
%
un escalar que represente la similitud entre las dos imagenes.
%
% Version: 2-A Fecha: 18/08/2004
%
% Mauricio Villegas Santamaria
if nargin < 2
error('Hacen falta argumentos de entrada.');
elseif nargin > 2
error('Demasiados argumentos de entrada.');
end
d = I1-I2;
d = abs(sum(sum(d.*conj(d))));
93
94
95
Anexo C.
Posiciones:
1
2
3
4
5
6
7
8
9
10
281
279
279
279
279
279
279
279
280
280
39
40
50
75
114
167
233
312
405
503
dmin
0.330927
0.21683
0.026887
0.00824656
0.00814286
0.00721438
0.00479522
0.0134195
0.00853141
0.287115
96
si
si
si
si
si
si
si
si
si
si
97
Posiciones:
1
2
3
4
5
6
7
8
9
10
281
279
279
279
279
279
279
279
280
280
39
40
49
75
114
167
233
312
405
503
dmin
0.330927
0.21683
0.0138467
0.00824656
0.00814286
0.00721438
0.00479522
0.0134195
0.00853141
0.287115
Posicion confiable:
dcero = 1.44423
1
2
3
4
5
6
7
si
si
si
si
si
si
si
98
si
si
si
99
Posiciones:
1
2
3
4
5
6
7
8
9
10
281
280
283
281
281
279
279
279
280
280
39
41
44
69
110
167
233
312
405
503
dmin
0.330927
0.198684
0.179918
0.179082
0.139775
0.0211565
0.00479522
0.0134195
0.00853141
0.287115
Posicion confiable:
100
dcero = 1.44423
1
2
3
4
5
6
7
8
9
10
si
si
si
si
si
si
si
si
si
si
101
Posiciones:
1
2
3
4
5
6
7
8
9
10
284
284
279
279
279
279
279
279
280
282
39
40
50
75
114
167
233
312
405
409
dmin
0.214646
0.151945
0.0226691
0.00554445
0.00674421
0.00475231
0.00292301
0.011144
0.00410605
0.0417353
Posicion confiable:
dcero = 0.0460686
1
2
3
4
5
6
no
no
si
si
si
si
102
si
si
si
no
103
Posiciones:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
420
420
421
420
419
419
418
419
419
419
420
418
418
418
418
416
420
418
418
418
416
250
248
246
244
242
240
238
236
234
232
230
229
226
225
223
222
220
219
217
215
213
dmin
1.53003e-031
0.00296411
0.00870912
0.00807683
0.0205116
0.0216639
0.0215698
0.0205504
0.0223157
0.0265931
0.040893
0.0605591
0.0463159
0.0496616
0.0601548
0.0569771
0.06102
0.0738973
0.0785066
0.0800082
0.0780053
104
417
419
418
414
418
418
414
212
210
209
207
205
204
202
0.0622099
0.0772506
0.0928553
0.102047
0.0886841
0.101854
0.0985513
Posicion confiable:
dcero = 1.55347
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
105
Posiciones:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
465
465
464
464
463
463
462
462
461
461
460
460
460
459
459
458
458
458
457
458
457
228
226
224
223
222
220
218
216
215
213
212
210
208
207
205
204
202
201
199
198
196
dmin
1.26679e-031
0.00666422
0.0171151
0.0181771
0.0171718
0.0159431
0.0154979
0.0180648
0.025794
0.023035
0.0267353
0.0303597
0.025723
0.0295593
0.0378323
0.0386289
0.0390489
0.044309
0.0398885
0.0418932
0.0454168
106
457
457
456
456
456
455
455
195
194
193
191
190
188
188
0.0407611
0.0432201
0.0454939
0.0430412
0.0530836
0.0550204
0.0457099
Posicion confiable:
dcero = 1.61185
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
107
Posiciones:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
420
420
421
420
419
419
418
419
419
419
420
418
418
418
418
416
420
418
418
418
416
417
250
248
246
244
242
240
238
236
234
232
230
229
226
225
223
222
220
219
217
215
213
212
dmin
1.53003e-031
0.00296411
0.00870912
0.00807683
0.0205116
0.0216639
0.0215698
0.0205504
0.0223157
0.0265931
0.040893
0.0605591
0.0463159
0.0496616
0.0601548
0.0569771
0.06102
0.0738973
0.0785066
0.0800082
0.0780053
0.0622099
108
419
418
414
418
418
414
210
209
207
205
204
202
0.0772506
0.0928553
0.102047
0.0886841
0.101854
0.0985513
Posicion confiable:
dcero = 1.55347
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
109
110
Posiciones:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
420
420
421
420
419
419
418
419
419
419
419
420
418
418
418
416
420
418
418
417
416
417
418
419
415
418
416
414
250
248
246
244
242
240
238
236
234
232
230
228
226
225
223
222
220
219
217
215
213
212
210
208
206
205
203
201
dmin
1.53003e-031
0.00296411
0.00870912
0.00807683
0.0205116
0.0216639
0.0215698
0.0205504
0.0192589
0.0364965
0.0172947
0.0439194
0.0234795
0.0322467
0.0632376
0.0569771
0.06102
0.0588717
0.0498945
0.0545915
0.0540716
0.0424731
0.0455587
0.0565428
0.051847
0.0416545
0.0382121
0.0673734
Posicion confiable:
dcero = 1.55347
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
111
Posiciones:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
420
420
420
419
419
419
419
419
418
419
418
418
418
418
418
416
418
418
417
250
248
246
244
242
240
238
236
234
232
230
229
227
225
223
221
220
219
217
dmin
1.43864e-031
0.00682935
0.00884323
0.00917912
0.0152779
0.0178657
0.0187988
0.0196352
0.0215433
0.0303127
0.0304038
0.0388993
0.039214
0.042547
0.047115
0.0528559
0.0474957
0.0532026
0.0501531
112
416
416
416
417
417
417
415
415
417
215
213
211
210
208
206
205
203
202
0.0624397
0.0620621
0.0721109
0.0688744
0.0689072
0.0807965
0.0784683
0.0831674
0.0856042
Posicion confiable:
dcero = 1.52753
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
113
C.10.
Posiciones:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
420
420
419
419
418
418
418
419
418
419
418
419
418
417
417
416
417
417
417
250
248
246
244
242
240
238
236
234
232
230
228
227
225
223
221
220
219
217
dmin
4.76442e-032
0.00320878
0.00962361
0.00946262
0.0180781
0.0187868
0.0189941
0.020658
0.0203819
0.0243617
0.0286942
0.0377882
0.0401915
0.0413421
0.045174
0.0491888
0.0460469
0.0523431
0.0473538
114
416
416
415
417
417
415
415
416
417
215
213
211
210
208
207
205
203
202
0.060895
0.0572296
0.0675528
0.063721
0.067468
0.0772211
0.073373
0.0795433
0.0806659
Posicion confiable:
dcero = 1.52425
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
si
115