Está en la página 1de 55

Tratamiento de Imagenes en Movimiento

usando Wavelets de Cuaternios


Proyecto de Investigaci on
Licenciatura en Computaci on
Jes us Barrera Mendez 200215071
Leonardo Traversoni Domnguez
Asesor
Alfonso Martnez Martnez
Coordinador de la licenciatura
Mexico D.F. a 1 de febrero del 2007.

Indice general
1. Curvas de cuaternios 4
1.1. Cuaternios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2. B-splines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3. Interpolacion de cuaternios duales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.3.1. Interpolacion de la parte rotacional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.3.2. Metodo TR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.3.3. Metodo TRT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.3.4. Implantacion de los metodos de interpolacion . . . . . . . . . . . . . . . . . . . . . . . 12
1.4. Aplicacion de ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2. Reconstruccion 3D 23
2.1. Obtencion de las imagenes de prueba . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.2.

Algebra geometrica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.2.1. Geometra de las imagenes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.2.2.

Algebra geometrica de tres dimensiones (
3,0,0
. . . . . . . . . . . . . . . . . . . . . . . 28
2.2.3.

Algebra geometrica de cuatro dimensiones (
1,3,0
. . . . . . . . . . . . . . . . . . . . . 29
2.3. Operaciones algebraicas de incidencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.3.1. Bracket y dualidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.3.2. Interseccion de entidades geometricas . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.3.3. Aspectos de implementacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.4. Funciones elaboradas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3. Transformada Wavelet 34
3.1. Transformada Wavelet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.2. Transformada Wavelet Discreta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.3. Tipos de wavelets mas conocidos y su aplicacion con Matlab . . . . . . . . . . . . . . . . . . . 35
3.3.1. Principales funciones de Matlab para trabajar con la transfomada wavelet . . . . . . . 35
3.3.2. Wavelet de Haar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.3.3. Daubechies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.3.4. Programas de ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.4. Analisis Multiresolucion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.5. Aplicacion de muestra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
3.6. Codigo de las funciones elaboradas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
1
Dedicatoria
A mis padres y hermanos.
2
Agradecimientos
Agradezco al profesor Leonardo Traversoni por su paciencia y por todas las facilidades recibidas, pero sobre
todo por la oportunidad de dedicarme un tiempo a descubrir y estudiar estos temas que tanto me gustaron.
Tambien agradezco a mis compa neros Salma, Maricela, Andres y Mario por hacer mas agradable la estancia
en el laboratorio. Por su apoyo y amistad.
3
Captulo 1
Curvas de cuaternios
1.1. Cuaternios
Un cuaternio Q es un n umero hipercomplejo que depende de cuatro unidades 1, i, j, k:
Q = c
0
+c
1
i +c
2
j +c
3
k (1.1)
donde los c
i
(i = 1, 2, 3) son n umeros reales llamados componentes de Q.
El conjunto de cuaternios se representa por H. Otra representacion mas practica de Q es (c
0
, c
1
, c
2
, c
3
).
La suma y la resta de cuaternios se realizan componente a componente. La multiplicacion de dos cuaternios
es distributiva con respecto a la suma y se dene por las siguientes reglas de multiplicacion de las unidades:
i
2
= j
2
= k
2
= 1
jk = kj = i
ki = ik = j
ij = ji = k
Entonces el producto Q Q

esta dado por:


Q Q

= (c
0
+c
1
i +c
2
j +c
3
k) (c

0
+c

1
i +c

2
j +c

3
k)
= (c
0
c

0
c
1
c

1
c
2
c

2
c
3
c

3
) + (c
0
c

1
+c
1
c

0
+c
2
c

3
c
3
c

2
)i (1.2)
+(c
0
c

2
+c
2
c

0
+c
3
c

1
c
1
c

3
)j + (c
0
c

3
+c
3
c

0
+c
1
c

2
c
2
c

1
)k
El conjugado de un cuaternio Q = c
0
+ c
1
i + c
2
j + c
3
k se representa por

Q y se dene como

Q =
c
0
c
1
i c
2
j c
3
k. El producto Q

Q es igual a c
2
0
+ c
2
1
+ c
2
2
+ c
2
3
y se conoce como la norma N(Q) del
cuaternio Q . Cuando la norma de un cuaternio es igual a 1 se dice que es un cuaternio unitario.
Cuando la primera componente de un cuaternio es igual a cero se dice que se tiene un cuaternio vectorial
o puro Q = (0, c
1
, c
2
, c
3
).
Una propiedad de los cuaternios unitarios es que pueden ser escritos en la forma:
Q = (cos , xsin , y sin , z sin ) = (cos , v sin ) (1.3)
donde v = (x, y, z), esta forma es muy util cuando los cuaternios se usan para representar rotaciones.
La rotacion de un punto p = (p
x
, p
y
, p
z
) alrededor del eje v = (v
x
, v
y
, v
z
) por un angulo se puede realizar
por medio de un producto de cuaternios, dicho producto es:
P

= Q P

Q (1.4)
4
CAP

ITULO 1. CURVAS DE CUATERNIOS 5


donde P = (0, p) y P

= (0, p

). El punto p

= (p

x
, p

y
, p

z
) es el resultado de la rotacion del punto p.
Ademas, el cuaternio Q utilizado es unitario y esta dado por:
Q = (cos

2
, v sin

2
) (1.5)
Entonces existe una correspondencia entre un cuaternio unitario Q = (c
0
, c
1
, c
2
, c
3
) y las matrices de
rotacion en R
3
. Esta relacion esta dada por:
(c
0
, c
1
, c
2
, c
3
)
_
_
c
2
0
+c
2
1
c
2
2
c
2
3
2(c
0
c
3
+c
1
c
2
) 2(c
0
c
2
+c
1
c
3
)
2(c
0
c
3
+c
2
c
1
) c
2
0
c
2
1
+c
2
2
c
2
3
2(c
0
c
1
+c
2
c
3
)
2(c
0
c
2
+c
1
c
3
) 2(c
0
c
1
+c
2
c
3
) c
2
0
c
2
1
c
2
2
+c
2
3
_
_
(1.6)
Por lo tanto, el punto rotado p

se puede obtener como:


p

= Up (1.7)
donde U se obtiene de la forma descrita a partir de cuaternio Q utilizado en (1.4).
Si lo que se necesita es representar movimientos que incluyan traslacion, se puede recurrir a los cuaternios
duales. Un cuaternio dual tiene la forma:
Q = Q
0
+Q

(1.8)
donde Q
0
y Q

son cuaternios normales conocidos como parte real Re(Q) y parte dual Du(Q) de Q, respec-
tivamente, y el smbolo , llamado unidad dual, cumple con:

2
= 0 (1.9)
El conjunto de cuaternios duales re representa por H[]. Las operaciones de suma y resta de cuaternio
duales se realiza por componentes, el producto solo tiene que tomar en cuenta la relacion (1.9), y la conjugacion
se realiza obteniendo el conjugado de las partes real y dual.
Un cuaternio dual que representa una traslacion tiene la forma:
Q = (2v
0
,

0) +(0, v) (1.10)
donde v
0
,= 0. La traslacion correspondiente a este cuaternio esta dada por el vector
1
v0
v.
Al multiplicar un cuaternio como el anterior con uno normal, en ese orden, se tiene un cuaternio dual
que caracteriza completamente un movimiento en el espacio. Es decir, un cuaternio dual Q asociado a una
traslacion por
1
v0
v y una rotacion dada por el cuaternio R = (cos

2
, wsin

2
) tiene la forma:
Q = Q
0
+Q

= ((2v
0
,

0) +(0, v)) (cos



2
, wsin

2
)
= (2v
0
cos

2
, 2v
0
wsin

2
) +(v wsin

2
, v cos

2
+v wsin

2
) (1.11)
Este cuaternio dual satisface la relacion de Pl ucker:
Du(Q

Q) = 0 (1.12)
Por otro lado, si se tiene un cuaternio dual que cumple con (1.12) y cuya parte real no sea cero, entonces
dicho cuaternio Q describe un movimiento. Las partes traslacional y rotacional de dicho movimiento Q se
pueden calcular como:
Trasl(Q) = Q

Q
0
y Rot(Q) =
Q
0
N(Q)
(1.13)
CAP

ITULO 1. CURVAS DE CUATERNIOS 6


1.2. B-splines
Los splines polinomiales son curvas polinomiales a trozos de cierto grado n jo, que son muy utiles en
diversas aplicaciones. Estas funciones pueden ser representadas como combinaciones lineales de la base de
polinomios formada por las funciones B-spline de grado n.
La denicion de las funciones B-spline de orden p utiliza una secuencia de n umeros reales U = u
0
, . . . , u
m

donde u
i
u
i+1
para i = 0, . . . , m1. Cada elemento de U se conoce como nudo y U como vector de nudos.
La formula que dene a los B-spline de grado p es:
N
i,0
(u) =
_
1 si u
i
u < u
i+1
0 en otro caso
N
i,p
(u) =
u u
i
u
i+p
u
i
N
i,p1
(u) +
u
i+p+1
u
u
i+p+1
u
i+1
N
i+1,p1
(u) (1.14)
Como la secuencia de nudos solo tiene que ser no decreciente, puede ocurrir una division entre cero al
aplicar directamente la formula interior. Cuando esto ocurre, se toma al cociente
x
0
como 0.
A modo de ejemplo, la gura 1.1 muestra las funciones B-spline de grado 3 generadas por el vector de
nudos U = 0, 0, 0, 0, 0.1667, 0.3333, 0.5, 0.6667, 0.83333, 1, 1, 1, 1.
Figura 1.1: En este conjunto de funciones B-spline puede verse que cada una de ellas toma valores distintos
de cero unicamente en intervalos bien denidos. Tambien se nota que los nudos determinan la terminacion o
el inicio de las funciones.
La dependencia de las funciones B-spline del vector de nudos U se reeja tanto en la forma de las funciones
resultantes como en la continuidad de las curvas que pueden representar mediante su combinacion en forma
CAP

ITULO 1. CURVAS DE CUATERNIOS 7


lineal. Sin embargo, el patron basico del vector U que permite obtener curvas como las de la gura 1.1, es
decir, con una continuidad C
p1
, con p el grado de los B-splines, es:
U = 0, . . . , 0
. .
p+1
, u
1
, . . . , u
k
. .
k
, 1, . . . , 1
. .
p+1
(1.15)
donde k se encuentra relacionado con el n umero de funciones B-spline de grado p obtenidas. La relacion
es la siguiente:
k = Numero de Funciones p 1 (1.16)
y los nudos u
i
, 1 i k, son mayores que 0, menores que 1, y se encuentran uniformemente espaciados entre
estos dos valores.
Como puede verse, el n umero de funciones B-spline de grado p generadas por un vector de nudos U,
depende de la cantidad de elementos en este vector. Esta es una ventaja enorme de este tipo de funciones
con respecto a los polinomios de Bernstein, a saber, que la cantidad de puntos a interpolar no determina de
forma unica el grado de las funciones base utilizadas. Esto tiene como consecuencia que cuando se interpolan
muchos puntos usando B-splines, se puedan obtener curvas con menos oscilaciones que cuando se utiliza
interpolacion de Bezier. De esta forma, es com un usar B-splines de grado 3, ya que con estas funciones se
pueden formar curvas con continuidad C
2
.
Una vez que se tiene un conjunto de funciones B-spline con las caractersticas deseadas, se pueden utilizar
para representar curvas C(t) de la siguiente manera:
C(t) =
n

i=0
N
i,p
(t)C
i
(1.17)
Los puntos C
i
se conocen como puntos de control de C(t) y denen la forma de la curva obtenida. Si
lo que se necesita es interpolar un conjunto de n + 1 puntos P
i
, los puntos de control se pueden obtener
resolviendo el siguiente sistema de ecuaciones:
n

j=0
N
j,p
(t
i
)C
j
= P
i
(i = 0, 1, . . . , n) (1.18)
lo que requiere que se tenga un conjunto de n+1 funciones B-spline de alg un grado p, usualmente igual a 3.
1.3. Interpolacion de cuaternios duales
Dado que un desplazamiento espacial, rotacion y traslacion, puede ser representado por un cuaternio
dual, una funcion de cuaternios duales Q(t) : [0, 1] H[] representa un movimiento continuo con parametro
t. Podemos contruir una curva de este tipo se tenemos una serie de cuaternios de referencia P
i
, con sus
respectivos parametros t
i
, y llevamos a cabo una interpolacion con ellos.
Planteando mejor el problema, se tienen m+1 desplazamientos, representados por los cuaternios duales:
P
i
= ((2,

0) +(0, s
i
)) (cos

2
, r
i
sin

2
) (s
i
, r
i
R
3
) (1.19)
con los parametros de tiempo t
i
R, 0 = t
0
< t
1
< . . . < t
m
= 1 (i = 0, 1, . . . m).
CAP

ITULO 1. CURVAS DE CUATERNIOS 8


Entonces, la curva que deseamos obtener debe cumplir con la condicion:
Q(t
i
) =
i
P
i
(i = 0, . . . , m) (1.20)
Los factores
i
son arbitrarios, ya que la multiplicacion de un cuaternio de la forma (1.19) por una
constante no altera el movimiento que representa, ademas, los metodos que se describen a continuacion
siempre resultan en constantes
i
=1.
Los metodos siguientes, el TR y el TRT, para la interpolacion de cuaternios duales, se basan en la
resolucion de un sistema lineal de ecuaciones, lo que los hace muy sencillos de programar usando Matlab. Sin
embargo, si se desean curvas con otras caractersticas, se pueden usar metodos como los descritos en [19] o
[22]. De igual forma, ambos metodos realizan primero una interpolacion de la parte rotacional de los puntos
(1.19), es decir, de los cuaternios R
i
= (cos

2
, r
i
sin

2
).
La diferencia radica en la forma en la que esta curva rotacional es combinada con las partes traslacionales.
1.3.1. Interpolacion de la parte rotacional
En [17] se describen tres metodos para la interpolacion de cuaternios simples, los metodos afn, elptico y
proyectivo, sin embargo, el mas intuitivo y con mejores caractersticas es el elptico.
El primer paso para la interpolacion de los cuaternios R
i
(i = 0, 1, . . . , m) es elegir los signos de forma
adecuada para cada uno de ellos. Esto se debe a que los cuaternios Q y Q representan la misma rotacion,
pero sus distancias euclidianas con respecto a alg un otro cuaternio por lo general son diferentes, en este
caso elegimos los signos de forma tal que las distancias euclidianas entre dos cuaternios consecutivos sean las
menores. En otros terminos, si el cuaternio R
i+1
cumple
(R
i
R
i+1
) (

R
i


R
i+1
) (R
i
+R
i+1
) (

R
i
+

R
i+1
) (1.21)
entonces se mantiene inalterado, si no cumple con esta desigualdad, se cambia por R
i+1
. El signo de R
0
es
arbitrario.
Una vez que se tiene la secuencia R
i
con los signos correctos, se plantea y resuelve el sistema de ecuaciones:
m

j=0
N
j,p
(t
i
)C
j
= R
i
(i = 0, 1, . . . , m) (1.22)
que desarrollado queda
_
_
_
_
_
N
0,p
(t
0
) N
1,p
(t
0
) . . . N
m,p
(t
0
)
N
0,p
(t
1
) N
1,p
(t
1
) . . . N
m,p
(t
1
)
.
.
.
.
.
.
.
.
.
.
.
.
N
0,p
(t
m
) N
1,p
(t
m
) . . . N
m,p
(t
m
)
_
_
_
_
_
_
_
_
_
_
C
0
C
1
.
.
.
C
m
_
_
_
_
_
=
_
_
_
_
_
R
0
R
1
.
.
.
R
m
_
_
_
_
_
(1.23)
y entonces la curva de cuaternios que describe la parte rotacional queda:
Q
rot
(t) =
m

i=0
N
i,p
(t)C
i
(1.24)
Aunque hay que se nalar que esta curva rotacional tiene que ser normalizada antes de poder ser utilizada
en alguna aplicacion, ya que en general la norma de Q(t
k
) para alg un t
k
diferente de los parametros del
movimiento no tiene norma unitaria, aunque si es muy cercana a 1.
CAP

ITULO 1. CURVAS DE CUATERNIOS 9


1.3.2. Metodo TR
Este metodo construye la curva de cuaternios duales Q(t) componiendo la curva rotacional Q
rot
(t) con
una traslacional Q
trasl
(t) de la siguiente forma:
Q(t) = Q
trasl
(t) Q
rot
(t) (1.25)
donde
Q
trasl
(t) = (2,

0) +
_
0,
m

i=0
N
i,p
(t) p
i
_
(1.26)
entonces, la expresion

m
i=0
N
i,p
(t) p
i
tiene que interpolar a las cantidades s
i
de los desplazamientos (1.19),
es decir, se requiere resolver el sistema de ecuaciones:
m

j=0
N
j,p
(t
i
) p
j
= s
i
(i = 0, 1, . . . , m) (1.27)
Una caracterstica de este metodo radica en que las partes rotacional y traslacional son completamente
independientes y por lo tanto se evita el uso de las expresiones (1.13).
1.3.3. Metodo TRT
Este metodo es mucho mas elaborado que el anterior ya que realiza la combinacion de Q
rot
(t) con dos
segmentos traslacionales Q
(1)
trasl
(t) y Q
(2)
trasl
(t) de la siguiente forma:
Q(t) = Q
(1)
trasl
(t) Q
rot
(t) Q
(2)
trasl
(t) (1.28)
donde
Q
(1)
trasl
(t) = (2,

0) +
_
0,
l1

j1=0
N
j1,p
(t) p
(1)
j1
_
(1.29)
Q
(2)
trasl
(t) = (2,

0) +
_
0,
l2

j2=0
N
j2,p
(t) p
(2)
j2
_
(1.30)
o simplicando la notacion
Q
(1)
trasl
(t) = 2 +
l1

j1=0
N
j1,p
(t) p
(1)
j1
(1.31)
Q
(2)
trasl
(t) = 2 +
l2

j2=0
N
j2,p
(t) p
(2)
j2
(1.32)
CAP

ITULO 1. CURVAS DE CUATERNIOS 10


Entonces, desarrollando el producto (1.28) se tiene
Q(t) =
_
2 +
l1

j1=0
N
j1,p
(t) p
(1)
j1
. .
X
_

_
m

i=0
N
i,p
(t)C
i
. .
Z
_

_
2 +
l2

j2=0
N
j2,p
(t) p
(2)
j2
. .
Y
_
= (2 +X) Z (2 +Y )
= (2Z +XZ) (2 +Y )
= 4Z + 2ZY + 2XZ +
2
XZY
= 4Z + 2(ZY +XZ) (1.33)
y por lo tanto podemos hacer las asociaciones,
Q
0
(t) = 4Z (1.34)
Q

(t) = 2(ZY +XZ) (1.35)


para poder aplicar las formulas (1.13) y poder obtener las partes rotacional y traslacional
Rot(Q(t)) =
Q
0
(t)
N(Q
0
(t))
=
4Z
N(4Z)
(1.36)
Trasl(Q(t)) = Q(t)

Q
0
(t)
= (4Z + 2(ZY +XZ))(4

Z)
= 16Z

Z + 8(ZY

Z +XZ

Z) (1.37)
pero como Trasl(Q(t)) debe de ser un cuaternio dual que representa una traslacion, debe de tener la forma
(1.10) y entonces obtenemos la expresion para los vectores de traslacion correspondientes:

V (t) =
8(ZY

Z +XZ

Z)
8Z

Z
=
(ZY

Z +XZ

Z)
Z

Z
(1.38)
=
ZY

Z
Z

Z
+X (1.39)
entonces, evaluando en los momentos t
i
, los parametros del movimiento, se puede formar un sistema lineal
usando los puntos s
i
de (1.19) que indican la traslacion en t
i
:
X(t
i
) +
Z(t
i
)Y (t
i
)

Z(t
i
)
Z(t
i
)

Z(t
i
)
= s
i
(i = 0, 1, . . . , m) (1.40)
pero como Z(t
i
)

Z(t
i
) es igual a 1, ya que estamos interpolando cuaternios unitarios, podemos reescribir el
sistema como:
X(t
i
) +Z(t
i
)Y (t
i
)

Z(t
i
) = s
i
(i = 0, 1, . . . , m) (1.41)
CAP

ITULO 1. CURVAS DE CUATERNIOS 11


Antes de sustituir las expresiones para X, Y y Z en la ecuacion anterior, hay que notar que como los
cuaterios Z(t
i
) = R
i
son constantes, podemos reemplazar, de acuerdo con (1.6), el producto de cuaternios
Z(t
i
)Y (t
i
)

Z(t
i
) = R
i
Y (t
i
)

R
i
por el producto matricial (U(R
i
)Y (t
i
)
T
)
T
que despues puede ser expandido al
establecer el sistema lineal antes mencionado.
Entonces, el sistema lineal que nos permite encontrar la parte traslacional queda
l1

j1=0
N
j1,p
(t
i
) p
(1)
j1
+
l2

j2=0
N
j2,p
(t
i
)U(R
i
) p
(2)
j2
= s
i
(i = 0, 1, . . . , m) (1.42)
De este sistema puede notarse que como tenemos l
1
+ 1 incognitas p
(1)
y l
2
+ 1 incognitas p
(2)
, debemos
tener la siguiente igualdad
l
1
+l
2
+ 2 = m+ 1 (1.43)
para que el sistema (1.42) pueda tener solucion unica. Esto nos lleva a establecer que l
1
y l
2
deben cumplir
la siguiente relacion
l
1
+l
2
= m1 (1.44)
Entonces, para tener un ejemplo concreto, si se tienen ocho posiciones a interpolar s
0
, . . . , s
7
, se puede
hacer l
1
= l
2
= 3 y al escribir el sistema (1.42) en la forma A p = s usando B-splines de grado 3, se tiene:
A =
_
_
_
_
_
_
_
_
_
_
_
_
N
0,3
(t
0
) N
1,3
(t
0
) N
2,3
(t
0
) N
3,3
(t
0
) N
0,3
(t
0
)U
0
N
1,3
(t
0
)U
0
N
2,3
(t
0
)U
0
N
3,3
(t
0
)U
0
N
0,3
(t
1
) N
1,3
(t
1
) N
2,3
(t
1
) N
3,3
(t
1
) N
0,3
(t
1
)U
1
N
1,3
(t
1
)U
1
N
2,3
(t
1
)U
1
N
3,3
(t
1
)U
1
N
0,3
(t
2
) N
1,3
(t
2
) N
2,3
(t
2
) N
3,3
(t
2
) N
0,3
(t
2
)U
2
N
1,3
(t
2
)U
2
N
2,3
(t
2
)U
2
N
3,3
(t
2
)U
2
N
0,3
(t
3
) N
1,3
(t
3
) N
2,3
(t
3
) N
3,3
(t
3
) N
0,3
(t
3
)U
3
N
1,3
(t
3
)U
3
N
2,3
(t
3
)U
3
N
3,3
(t
3
)U
3
N
0,3
(t
4
) N
1,3
(t
4
) N
2,3
(t
4
) N
3,3
(t
4
) N
0,3
(t
4
)U
4
N
1,3
(t
4
)U
4
N
2,3
(t
4
)U
4
N
3,3
(t
4
)U
4
N
0,3
(t
5
) N
1,3
(t
5
) N
2,3
(t
5
) N
3,3
(t
5
) N
0,3
(t
5
)U
5
N
1,3
(t
5
)U
5
N
2,3
(t
5
)U
5
N
3,3
(t
5
)U
5
N
0,3
(t
6
) N
1,3
(t
6
) N
2,3
(t
6
) N
3,3
(t
6
) N
0,3
(t
6
)U
6
N
1,3
(t
6
)U
6
N
2,3
(t
6
)U
6
N
3,3
(t
6
)U
6
N
0,3
(t
7
) N
1,3
(t
7
) N
2,3
(t
7
) N
3,3
(t
7
) N
0,3
(t
7
)U
7
N
1,3
(t
7
)U
7
N
2,3
(t
7
)U
7
N
3,3
(t
7
)U
7
_
_
_
_
_
_
_
_
_
_
_
_
p =
_
_
_
_
_
_
_
_
_
_
_
_
_
_
p
(1)
0
p
(1)
1
p
(1)
2
p
(1)
3
p
(2)
0
p
(2)
1
p
(2)
2
p
(2)
3
_
_
_
_
_
_
_
_
_
_
_
_
_
_
s =
_
_
_
_
_
_
_
_
_
_
_
_
s
0
s
1
s
2
s
3
s
4
s
5
s
6
s
7
_
_
_
_
_
_
_
_
_
_
_
_
donde U
i
representa a U(R
i
) (i = 0, . . . , 7) dada por (1.6).
El sistema (1.42) contiene algunas matrices como coecientes, sin embargo, si se escribe de la siguiente
forma
l1

j1=0
N
j1,p
(t
i
)I
3
p
(1)
j1
+
l2

j2=0
N
j2,p
(t
i
)U(R
i
) p
(2)
j2
= s
i
(i = 0, 1, . . . , m) (1.45)
CAP

ITULO 1. CURVAS DE CUATERNIOS 12


donde I
3
es la matriz identidad de 33, se ve inmediatamente que puede ser expandido de un sistema de
dimension m+ 1 a uno de dimension 3(m+ 1).
Una vez que ya se tienen las dos partes traslacionales del movimiento dadas por (1.31) y (1.32), se
combinan con la parte traslacional seg un (1.28) y al nal se aplican las formulas (1.13) para obtener la parte
traslacional denitiva.
1.3.4. Implantacion de los metodos de interpolacion
Las guras 1.2-1.3 y 1.8-1.12 son especcas de los metodos TR y TRT respectivamente. Las guras 1.4-1.7
son usadas en ambos.
Figura 1.2: Esta es la funcion principal del metodo TR. Se encarga de llamar a las funciones que realizan la
interpolacion de las partes rotacional y traslacional.
1.4. Aplicacion de ejemplo
Para probar los metodos de interpolacion expuestos se desarrollo una peque na animacion. El codigo de la
animacion se muestra en la gura 1.13 y los datos de rotacion y traslacion a interpolar en la gura 1.14, una
secuencia de cuadros resultantes se muestra en la gura 1.15
CAP

ITULO 1. CURVAS DE CUATERNIOS 13


Figura 1.3: Esta funcion obtiene la parte traslacional en el metodo TR. Puede observarse que es una curva
spline simple.
CAP

ITULO 1. CURVAS DE CUATERNIOS 14


Figura 1.4: Esta funcion obtiene la parte rotacional en los metodos TR y TRT. El mecanismo es el mismo
que para una curva spline de puntos en R
3
, la unica diferencia es que antes de llevar a cabo el proceso de
interpolacion se deben elegir los signos adecuados de acuerdo a la expresion (1.21).
CAP

ITULO 1. CURVAS DE CUATERNIOS 15


Figura 1.5: Esta funcion realiza la eleccion de signos de comparando las distancias euclidianas entre R
i
, R
i+1
y R
i+1
.
Figura 1.6: Esta funcion es auxiliar. Realiza una interpolacion lineal para aproximar el valor de F(t
0
) ya que
el vector F denido sobre t puede no contener exactamente ese valor.
CAP

ITULO 1. CURVAS DE CUATERNIOS 16


Figura 1.7: Esta funcion devuelve un n umero especicado de funciones B-spline de grado p evaluadas en
n puntos y el vector t en el cual fueron evaluadas. El vector U de nudos no es una entrada a la funcion
como podra esperarse, en vez de esto, este se construye para obtener funciones con las caractersticas de
continuidad deseadas.
CAP

ITULO 1. CURVAS DE CUATERNIOS 17


Figura 1.8: Esta funcion realiza la interpolacion por el metodo TRT. Primero encuentra la parte rotacional
y las dos partes traslacionales, despues las combina como un producto de cuaternios duales (lineas 16 a 19)
y obtiene una parte rotacional y una parte traslacional (lineas 25 a 27).
CAP

ITULO 1. CURVAS DE CUATERNIOS 18


Figura 1.9: En esta funcion se encuentran las dos partes traslacionales requeridas por el metodo TRT. Puede
ocurrir que la matriz A se vuelva singular.
CAP

ITULO 1. CURVAS DE CUATERNIOS 19


Figura 1.10: Esta funcion convierte un cuaternio unitario a una representacion matricial seg un la formula
(1.6).
Figura 1.11: Esta funcion realiza el producto de dos cuaternios duales P = P
0
+P

con Q = Q
0
+Q

.
Figura 1.12: Esta funcion descompone un cuaternio dual en un vector de traslacion y un cuaternio unitario
simple que representa una rotacion.
CAP

ITULO 1. CURVAS DE CUATERNIOS 20


Figura 1.13: Peque na animacion de un bloque de interpolando los datos de la gura 1.14. Se usa el metodo
TRT.
CAP

ITULO 1. CURVAS DE CUATERNIOS 21


Figura 1.14: Datos para una animacion de prueba.
CAP

ITULO 1. CURVAS DE CUATERNIOS 22


Figura 1.15: Ejemplo de interpolacion de cuaternios duales por el metodo TRT.
Captulo 2
Reconstruccion 3D
La reconstruccion de cuerpos en 3D a partir de diferentes vistas captadas por imagenes de video o
fotogracas es un procedimiento que pertenece, entre otros, al campo de la vision articial.
Tradicionalmente, la reconstruccion de un solido a partir de dos o mas imagenes se haca usando geometra
proyectiva. Sin embargo, aunque esta geometra es muy solida y actualmente se encuentra sumamente desar-
rollada, se tena que echar mano de algebra lineal, vectorial e incluso tensorial para realizar el tratamiento
completo de los problemas. Un enfoque matematico mas moderno para los problemas de vision articial es
el basado en el algebra geometrica.
El algebra geometrica es una forma libre de coordenadas de hacer calculos geometricos. Se basa en las
algebras de Grassmann y de Cliord y esta denida en un espacio generado por una base de multivectores
[4].
Un multivector es una combinacion lineal de objetos geometricos de diferentes grados, por ejemplo, es-
calares, vectores y bivectores. Estos multivectores pueden ser multiplicados por medio de un producto asociati-
vo conocido como producto geometrico o de Cliord, el cual brinda al algebra un gran poder representacional.
Hay que mencionar que el algebra geometrica se usa, en este caso, como un vehculo de expresion de la
geometra proyectiva, es decir, como una forma de realizar calculos de forma mas simple y uniforme. Sin
embargo, el algebra geometrica es mas general y se comienza a utilizar cada vez mas en otros campos como
la macanica clasica, el electromagnetismo, y otras ramas de la fsica.
2.1. Obtencion de las imagenes de prueba
Las imagenes con las que se experimento fueron tomadas con el proposito especco de ser utilizadas para
este proyecto. Por lo tanto, la ubicacion de la camara se registro de la manera mas precisa posible usando
papel milimetrico. Si bien en un caso real no se conoce la conguracion de las camaras en el momento de
efectuar las tomas, esto se hizo para realizar las primeras pruebas y vericar el correcto funcionamiento de
las funciones realizadas.
La ubicacion y orientacion de la camara en el momento de tomar las fotos se muestra en la gura 2.1 y
el resultado en la gura 2.2. La mejores fotograas aparecen en la gura 2.3
2.2.

Algebra geometrica
Un algebra geometrica (AG) es generada por un espacio vectorial, usualmente de dimension nita, y un
producto llamado producto geometrico que puede ser visto como la suma de dos productos diferentes, el
producto interno usual y un producto externo, introducido inicialmente por Grassmmann. La representacion
23
CAP

ITULO 2. RECONSTRUCCI

ON 3D 24
Figura 2.1: Posiciones de la camara para cada una de las fotos de la gura 2.3. D = 50mm y L = 115mm
Figura 2.2: Estas son dos tomas de una misma posicion del dado desde dos posiciones diferentes de la camara.
CAP

ITULO 2. RECONSTRUCCI

ON 3D 25
Figura 2.3: Aqu se muestran todos los pares de fotograas del dado.
CAP

ITULO 2. RECONSTRUCCI

ON 3D 26
de un AG de dimension n, generada por un espacio vectorial de dimension n, es (
p,q,r
, p, q y r se conocen como
la rma del AG en cuestion y representan el n umero de vectores cuyo cuadrado es +1, 1 y 0 respectivamente,
ademas p +q +r = n.
Un algebra geometrica puede ser generada, a partir de la rma deseada, imponiendo ciertas restricciones
sobre la forma en que se combinaran sus elementos. Sin embargo, una forma menos sosticada y mas simple
de comenzar a utilizarla es listando sus axiomas. A continuacion se estos se listaran para el caso de un AG
de dimension 3.
Antes que nada hay que mencionar que nuestra AG debe incluir a los elementos de grados 0 a 3, es decir,
elementos 0-vector (escalar), 1-vector (vector), 2-vector (bivector) y 3-vector (trivector) que representaran
las nociones geometricas de puntos, lineas, planos y espacio respectivamente. Ademas se introducen tres tipos
de producto, el escalar, el interno y el externo para representar relaciones entre los elementos, aunque estos
ultimos pueden ser combinados en un solo producto conocido como producto geometrico. Esto permitira que
se puedan combinar elementos de diferentes grados. Un elemento cualquiera de nuestra algebra tiene la forma:
A = A
0
+A
1
+A
2
+A
3
A los elementos de la forma A se le conoce como multivectores, los cuales siguen las siguientes reglas:
A+B = B +A
(A+B) +C = A+ (B +C)
(AB)C = A(BC)
A+ 0 = A
1A = A
A+ (A) = 0
Ademas, el algebra obtenida se considera cerrada, esto es, la suma o producto de culquier par de multi-
vectores es a su vez un unico multivector.

Estos axiomas son muy parecidos a los del algebra elemental, con excepcion de la conmutatividad, y
aplican a cualquier multivector. Sin embargo, hay que ser mas especcos y se nalar caractersticas de los
elementos de ciertos grados en particular.
La conmutatividad del producto se tiene solo en el caso de la multiplicacion de cualquier multivector
por un escalar (0-vector)
A = A
El cuadrado de un vector (1-vector) a es un unico escalar positivo [a[
2
, esto es:
a
2
= [a[
2
> 0
El producto geometrico de dos vectores puede ser descompuesto en terminos de dos productos mas
simples de la siguientes forma:
ab = ab +ab
donde el producto interno es conmutativo y el producto externo es anticonmutativo. Estos productos
se generalizan a elementos de grados mas altos de la siguiente manera:
CAP

ITULO 2. RECONSTRUCCI

ON 3D 27
Para un vector a y un elemento de grado k, A
k
el producto interno se dene como:
aA
k
=
1
2
(aA
k
(1)
k
A
k
a)
y el producto externo como:
aA
k
=
1
2
(aA
k
+ (1)
k
A
k
a)
y sumando estas dos ecuaciones se tiene:
aA
k
= aA
k
+aA
k
El resultado de los productos interno y externo de un vector por un elemento de grado k tiene el efecto
de aumentar o disminuir el grado en una unidad respectivamente:
aA
k
es un vector de grado k 1
aA
k
es un vector de grado k + 1
Pero como nuestra algebra geometrica es de dimension tres, no podemos obtener elementos de grados
4 o superior, por lo tanto resulta logico establecer la siguiente relacion:
aA
3
= 0
y de aqu se deduce inmediatamente que:
aA
3
= A
3
a
Con el n de mostrar a grandes rasgos el uso del algebra geometrica cuyos axiomas se han enunciado, se
procedera a deducir algunas identidades partiendo de los hechos fundamentales.
Se tiene que el producto geometrico es asociativo, entonces
a(bc) = (ab)c
ademas se sabe que
ab = ab +ab
entonces se tiene
a(bc +bc) = (ab +ab)c
y dado que el producto externo xy de dos vectores eleva el grado de y en uno, se tiene que los productos
bc y ab son bivectores y se llega al siguiente desarrollo:
a(bc) +a(bc) +a(bc) = (ab)c + (ab)c + (ab)c
de donde se puede identicar a los terminos a(bc) y a(bc) como vectores y al termino a(bc) como
trivector. Por lo tanto se puede establecer la siguiente igualdad intuitiva:
a(bc) = (ab)c
CAP

ITULO 2. RECONSTRUCCI

ON 3D 28
y la no tan intuitiva:
a(bc) +a(bc) = (ab)c + (ab)c
Procediendo de la misma forma se puede demostrar la distributividad de los productos interno y externo.
En general se tiene:
a(B
r
+C
r
) = aB
r
+aC
r
y
a(B
r
+C
r
) = aB
r
+aC
r
2.2.1. Geometra de las imagenes
Como se haba mencionado en la introduccion, una de las formas de procesar imagenes que provienen de
escenas tridimensionales es por medio de la geometra proyectiva. En especial, usando el modelo analtico de
las coordenadas homogeneas. Es este modelo de la geometra proyectiva, el espacio euclidiano tridimensional
es embebido en el espacio proyectivo de dimension 3, T
3
o 1
4
, y el espacio euclidiano de dimension 2 es
embebido en el espacio proyectivo de dimension 2, T
2
o 1
3
. Esto trae como ventajas que la transformacion
de proyeccion del espacio tridimensional al espacio bidimensional de las imagenes se puede representar como
una transformacion lineal y por lo tanto representable por una matriz.
Entonces, como vamos a usar los espacios proyectivos de 2 y 3 dimensiones, o en el modelo homogeneo, los
espacios euclidianos de 3 y 4 dimensiones, tambien conviene usar el algebra geometrica de 3 y 4 dimensiones
generada por estos espacios euclidianos.
2.2.2.

Algebra geometrica de tres dimensiones (
3,0,0
El espacio euclidiano de tres dimensiones puede ser generado por tres vectores base
1
,
2
,
3
que
cumplen con la propiedad de que
2
i
= +1 para i = 1, 2, 3. El algebra geometrica generada por estos vectores
base tiene los 2
3
elementos:
1
..
escalar
,
1
,
2
,
3

. .
vectores
,
1

2
,
2

3
,
3

. .
bivectores
,
1

. .
trivector
Cada una de estas categoras del algebra tiene su propia interpretacion. Un vector se puede ver como una
lnea dirigida, un bivector como un area orientada, y un trivector como un volumen orientado. Este ultimo
elemento se conoce como pseudoescalar, su cuadrado es igual a 1, conmuta con cualquier multivector y
usualmente se representa con la letra I.
Si me multiplica al pseudoescalar unitario con cada uno de los tres vectores base, se obtienen las relaciones
siguientes:
I
1
=
2

3
I
2
=
3

1
I
3
=
1

2
estos elementos I
i
pueden servir como una forma de representar a las unidades imaginarias de un
cuaternio, que puede ahora ser escrito como:
R = q
0
+q
1
(I
1
) q
2
(I
2
) +q
3
(I
3
)
y entonces puede verse que en realidad los cuaternios son un subalgebra de el algebra geometrica de tres
dimensiones que se esta desarrollando.
CAP

ITULO 2. RECONSTRUCCI

ON 3D 29
2.2.3.

Algebra geometrica de cuatro dimensiones (
1,3,0
Esta algebra geometrica tambien se conoce como algebra de Lorentz debido a su uso en la teora de la
relatividad. Tiene 4 elementos base
1
,
2
,
3
,
4
los cuales cumplen con
2
1
=
2
2
=
2
3
= 1,
2
4
= +1.

Estos
vectores generan la siguiente base de multivectores:
1
..
escalar
,
k
..
4 vectores
,
2

3
,
3

1
,
1

2
,
4

1
,
4

2
,
4

. .
6 bivectores
, I
k
..
4 trivectores
, I
..
pseudoescalar
El pseudo escalar es I =
1

4
y su cuadrado tambien es igual a 1.
El vector
4
juega un papel importante en la asociacion de bivectores del algebra de 4 dimensiones con
elementos del algebra de 3 dimensiones.
Recordando un poco, las coordenadas homogeneas son en realidad clases de equivalencia de puntos en
un espacio 1
n
. Por ejemplo, en 1
4
, los puntos (2, 3, 4, 1), (4, 6, 8, 2) y (6, 9, 12, 3) representan la
misma coordenada homogenea, en otras palabras, todos las coordenadas que sean proporcionales en todas
sus entradas representan al mismo punto.
En el algebra geometrica esta asociacion se realiza multiplicando por un elemento especial. Partiendo de
un elemento de nuestra algebra de 4 dimensiones X = X
1

1
+ X
2

2
+ X
3

3
+ X
4

4
se puede obtener la
division proyectiva mediante la operacion:
X
4
= X
4
+X
4
= X
4
_
1 +
X
4
X
4
_
X
4
(1 +x)
De esta forma se asocia al vector X en 1
4
con el vector x en 1
3
.
2.3. Operaciones algebraicas de incidencia
Las operaciones de incidencia en geometra proyectiva son sumamente usadas en la vision por computa-
dora.

Estas operaciones se conocen como meet (interseccion) y join (union) de entidades geometricas. Por
ejemplo, el meet de una linea y un plano es un punto, y el join de dos puntos es una linea.

Estas
operaciones se pueden describir y calcular en forma muy simple usando algebra geometrica. Pero antes de
describirlas hay que mencionar los conceptos de bracket y de dualidad.
2.3.1. Bracket y dualidad
El bracket es una operacion que se aplica unicamente a los pseudoescalares de cualquier algebra geometri-
ca. Su funcion es extraer la magnitud de dicho pseudoescalar, debido a que todos los pseudoescalares son
proporcionales para cualquier algebra en particular. Esto quiere decir que se I es el pseudo escalar unitario
de alguna algebra geometrica, cualquier otro pseudoescalar es de la forma P = I. En este caso, el bracket
de P, representado por [P] toma el valor de . Analticamente, esta operacion se puede llevar a cabo por
siguiendo los siguientes pasos:
PI
1
= II
1
= [P]
Para un algebra geometrica de n dimensiones, el bracket de n vectores x
i
es:
[x
1
x
2
x
3
. . . x
n
] = [x
1
x
2
x
3
. . . x
n
]
= (x
1
x
2
x
3
. . . x
n
)I
1
CAP

ITULO 2. RECONSTRUCCI

ON 3D 30
Desarrollando el producto se puede mostra que esto es equivalente a la denicion del determinante de una
matriz que tiene a los vectores x
i
como las.
Usando la division proyectiva mencionada anteriormente y se puede demostrar que [11]:
[X
1
X
2
X
3
X
4
] = (X
1
X
2
X
3
X
4
)I
1
4
= (x
2
x
1
) (x
3
x
1
) (x
4
x
1
)I
1
3
Ademas del bracket, otra operacion importante es la obtencion de dual de un r-vector. El dual de un
r-vector A se representa por A

y se obtiene por medio de la siguiente operacion:


A

= AI
1
En un algebra de n dimensiones, el grado del dual de un elemento de grado r es n r. Por ejemplo, en un
algebra de tres dimensiones, el dual de un vector (grado = 1) es un plano o bivector (grado = 2).
Usando los conceptos de bracket y dualidad, en [11] se demuestra la siguiente relacion:
(A B)

= A

que en palabras puede establecerse como: el dual de una interseccion (meet) esta dada por la union (join)
de sus duales. Ademas se puede obtener el siguiente resultado:
A B = ((A B)

= (A

)I = (A

)(I
1
I)I = (A

B)
2.3.2. Interseccion de entidades geometricas
Con las operaciones anteriormente denidas se pueden realizar las operaciones geometricas necesarias
para la reconstruccion de un solido a partir de dos vistas de forma sencilla. Sin embargo no esta de mas
recordar que la operacion de join representa la union de dos elementos geometricos. Para los puntos X y Y
XY representa la linea que los une. Y que la operacion meet (interseccion) representa la entidad geometrica
com un a sus operandos, por ejemplo, si X es una linea y Y es un plano, XY representa al punto que ambos
tienen en com un.
interseccion de una linea y un plano
En el espacio 1
4
o T
3
consideremos la linea A = X
1
X
2
que se intersecta con el plano = Y
1
Y
2
Y
3
.
El punto de interseccion se puede calcular por medio de la operacion A :
A = (X
1
X
2
) (Y
1
Y
2
Y
3
) = A


Desarrollando esta expresion con operaciones antes introducidas se llega a la siguiente expresion:
A = [X
1
X
2
Y
2
Y
3
]Y
1
+ [X
1
X
2
Y
3
Y
1
]Y
2
+ [X
1
X
2
Y
1
Y
2
]Y
3
Interseccion de dos planos
Esta operacion es un poco mas robusta que la primera ya que el resultado es una linea completa en vez
de un solo punto.
Si se tienen dos planos
1
= X
1
X
2
X
3
y
2
= Y
1
Y
2
Y
3
, su interseccion se puede calcular como:

1

2
= (X
1
X
2
X
3
) (Y
1
Y
2
Y
3
)
Poniendo en terminos de operaciones mas simples se tiene que:

1

2
= [X
1
X
2
X
3
Y
1
](Y
2
Y
3
) + [X
1
X
2
X
3
Y
2
](Y
3
Y
1
) + [X
1
X
2
X
3
Y
3
](Y
1
Y
2
)
CAP

ITULO 2. RECONSTRUCCI

ON 3D 31
function a = bracket4(X1,X2,X3,X4)
X1 = X1/X1(4); X1 = X1(1:3);
X2 = X2/X2(4); X2 = X2(1:3);
X3 = X3/X3(4); X3 = X3(1:3);
X4 = X4/X4(4); X4 = X4(1:3);
a = bracket3( X2-X1, X3-X1, X4-X1 );
Figura 2.4: Bracket de 4 dimensiones.
function a = bracket3(x1, x2, x3)
m = zeros(3);
m(1, :) = x1;
m(2, :) = x2;
m(3, :) = x3;
a = det(m);
Figura 2.5: Bracket de 3 dimensiones.
Interseccion de dos lineas
La interseccion de dos lneas no se implementa de forma directa debido a que es una operacion demasiado
sensible a errores de computo, solo basta notar que para que dos lneas se intersecten deben de estar contenidas
en el mismo plano y esta situacion es difcil de lograr con datos los experimentales provenientes de las
fotografas. Sin embargo hay una forma de aproximar la interseccion de dos lneas mediante dos intersecciones
linea-plano. Aunque de esta forma lo que se obtiene en realidad es el punto a la mitad de la linea que une a
los puntos mas cercanos entre las dos lineas.
2.3.3. Aspectos de implementacion
Debido a que la operacion mas importante para nuestros propositos es la interseccion de dos entidades
geometricas, estas son las unicas que se llevan a cado explcitamente. La union de dos entidades, por ejemplo
puntos, solo se usa en la expresion
1

2
anterior de forma auxiliar, ya que por razones practicas nos
conviene mas obtener dos puntos que denan la lnea resultante. Por lo tanto la funcion de union de mas de
dos puntos no se implementa. La union de dos y tres puntos que denen lineas y planos, que es la que se
ocupa en las formulas, se maneja por medio de una estructura que contiene a los puntos, ya que estos puntos
se ocuparan despues en las expresiones y no conviene realizar dicha operacion.
Por otro lado, el bracket en el algebra de cuatro dimensiones que se usa en las formulas se puede reducir
a un bracket de tres dimensiones y este a su vez puede ser calculado, como se habia mencionado, por medio
de un determinante.
2.4. Funciones elaboradas
En las guras 2.4 a 2.12 se muestra el codigo que implementa las operaciones mencionadas. Hay que
destacar que las operaciones se realizan en forma muy eciente y el codigo resultante es muy breve.
CAP

ITULO 2. RECONSTRUCCI

ON 3D 32
function p = Linea(X1, X2)
%Se reserva espacio para el resultado
p = cell(1, 2);
%Se guardan los puntos
p1 = X1;
p2 = X2;
Figura 2.6: Esta funcion agrupa en un dato tipo cell los dos puntos que denen una linea.
function p = Plano(Y1, Y2, Y3)
%Se reserva espacio para el resultado
p = cell(1, 3);
%Se guardan los puntos
p1 = Y1;
p2 = Y2;
p3 = Y3;
Figura 2.7: Esta funcion agrupa en un dato tipo cell los tres puntos que denen un plano.
function punto = meetLineaPlano(L, P)
%Se obtiene el resultado
punto = ...
bracket4(L1, L2, P2, P3)*P1 + ...
bracket4(L1, L2, P3, P1)*P2 + ...
bracket4(L1, L2, P1, P2)*P3;
Figura 2.8: Encuentra el punto de interseccion de una linea L y un plano P.
function linea = meetPlanoPlano(P1, P2)
%Se calcula cada una de las componentes
A = joinPuntoPunto(P22, P23);
B = joinPuntoPunto(P23, P21);
C = joinPuntoPunto(P21, P22);
%Se encuentran los coeficientes de cada componente
%y se obtiene el resultado final
linea = ...
bracket4(P11, P12, P13, P21)*A + ...
bracket4(P11, P12, P13, P22)*B + ...
bracket4(P11, P12, P13, P23)*C;
Figura 2.9: Encuentra la linea de interseccion de los planos P1 y P2.
CAP

ITULO 2. RECONSTRUCCI

ON 3D 33
function l = joinPuntoPunto(A, B)
%Los puntos A y B se convierten a su representacion 3D
A = A/A(4);
B = B/B(4);
%Se reserva espacio para el resultado
l = zeros(1, 6);
%Se encuentra la direccion de la linea
l(1:3) = A(1:3)-B(1:3);
%Se encuentra el momento de la linea
l(4:6) = cross(A(1:3), B(1:3));
Figura 2.10: Encuentra la expresion en coordenadas de Pl ucker de la linea denida por los puntos A y B.
function linea2 = descomposicionLinea(linea1)
%Componente de direccion de la linea
u1 = linea1(1:3);
%Momento de la linea
u2 = linea1(4:6);
%Encontramos un punto en la linea
Pperp = cross(u2(1:3), u1(1:3));
Pperp = Pperp/dot(u1(1:3), u1(1:3));
%Encontramos otro punto en la linea
p2 = Pperp+u1;
%Reservamos espacio para el resultado
linea2 = Linea([Pperp 1], [p2 1]);
Figura 2.11: Obtiene dos puntos distintos que se encuentren sobre linea1 dada en coordenadas de Pl ucker.
function pr = interseccionLineas(p1, p2, o1, o2)
%creamos el plano1 y la linea2
plano1 = Plano(o1, p1, p1+p1.*[0,1,0,0]);
linea2 = Linea(o2, p2);
pr1 = meetLineaPlano(linea2, plano1);
pr1 = homogeneas2cartesianas(pr1);
%creamos el plano2 y la linea1
plano2 = Plano(o2, p2, p2+p2.*[0,1,0,0]);
linea1 = Linea(o1, p1);
pr2 = meetLineaPlano(linea1, plano2);
pr2 = homogeneas2cartesianas(pr2);
%promediamos las aproximaciones
pr = (pr1+pr2)/2;
Figura 2.12: Aproxima una interseccion de dos lineas por medio de dos intersecciones linea-plano.
Captulo 3
Transformada Wavelet
Las se nales electricas y las imagenes son representaciones de fenomenos reales que son de interes por
diversos motivos. Un electrocardiograma puede ser determinante en la obtencion de un diagnostico medico,
as como una imagen puede ayudar a hacer una prediccion del clima. Entonces, la existencia de estas repre-
sentaciones se justica porque tienen la capacidad de almacenar informacion. Informacion que al adherirse a
alguna representacion particular tiene que ser recuperada utilizando alguna tecnica de procesamiento. Esto
es lo que hace al analisis de se nales tan complejo: la representacion de la informacion siempre favorece alg un
aspecto muy especco de la se nal, y por lo tanto tenemos que elegir la representacion que nos brinde la mejor
vista.
Sin embargo, las transformaciones que nos permiten obtener otras perspectivas de la se nal involucran
procesos que pueden ser muy complejos, y por lo tanto, computacionalmente costosos. El ejemplo mas im-
portante es el analisis de Fourier. No fue hasta que se desarrollo un algoritmo rapido, la transformada rapida
de Fourier, que su uso se extendio considerablemente.
El hecho que hace posible el analisis de Fourier es que una funcion puede ser aproximada, tanto como se
quiera, por una suma de funciones senoidales de frecuencias y amplitudas diferentes. Con esta aproximacion,
o descomposicion, se puede observar el contenido de frecuencia de una se nal. Las variaciones rapidas cor-
responden a frecuencias altas, mientras que las componentes de frecuencias menores se encuentran menos
visibles en la se nal, entonces, cada componente de frecuencia corresponde a la aportacion, grande o peque na,
de una funcion senoidal.
3.1. Transformada Wavelet
Como ya se menciono, la transformada de Fourier es una herramienta muy importante dentro de la
ingeniera debido a que permite apreciar las caractersticas de frecuencia de una se nal no visibles en el
dominio del tiempo. Sin embargo, al utilizar esta transformacion, se pierde de vista el comportamiento de la
funcion en el tiempo, ya que las frecuencias observadas corresponden a toda la se nal, cuando en realidad esta
puede tener caractersticas variantes en el tiempo, es decir, puede ser una se nal no estacionaria.
Esta desventaja de la transformada de Fourier proviene del hecho de que utiliza a las funciones sin y cos
como base para la representacion de la se nal, ya que aunque estas funciones tienen una sola frecuencia, no
son localizadas en el tiempo (se extienden periodicamente sobre todo el eje real). Para resolver este problema,
Denis Gabor agrego un factor a la transformada de Fourier, conocido com unmente como ventana, que permite
observar el contenido de frecuencia de una se nal en distintos intervalos de tiempo. Esta modicacion a la
transformada de Fourier es conocida como transformada de Fourier de tiempo corto (STFT) y ha sido aplicada
con exito al procesamiento de se nales de radar o de voz.
34
CAP

ITULO 3. TRANSFORMADA WAVELET 35


En la STFT, dos impulsos deben tener una separacion mayor que t para poder ser reconocidos como
eventos separados, y a su vez, el ventaneado de la transformada reduce la resolucion con que puede obser-
varse la frecuencia de la se nal y se puede hablar entonces de un intervalo f que es la separacion mnima
en frecuencia de dos se nales senoidales puras para que puedan ser consideradas como diferentes por esta
transformada. La parte importante es que los intervalos t y f quedan jos una vez elegida la funcion
de ventana. Esto no es una muy buena caracterstica ya que usualmente las se nales de alta frecuencia estan
asociadas a tiempos cortos y las se nales de baja frecuencia a periodos largos.
Se requiere entonces de una transformada que permita tener un cierto control sobre el tama no de los
intervalos t y f pero siempre ajustandose a la relacion tf
1
4
.
La transformada que cumple con el requisito anterior es la Transformada Wavelet Continua (CWT). Esta
transformada descompone una se nal en una base formada por los corrimientos y dilataciones de una funcion
conocida como wavelet madre h(t). La expresion que dene a esta transfomacion es:
CWT
x
(, ) =
1
_
[[
_
x(t)h

_
t

_
dt (3.1)
Debido a que y son reales, la base que se obtiene es redundante y no es de mucha utilidad practica.
Sin embargo, al restringir y a los enteros y elegir una funcion wavelet madre adecuada, se puede obtener
una base ortonormal, es decir, que no presenta redundancia. La expresion para obtener cada wavelet a partir
de la wavelet madre es:

j,k
= 2
j/2
(2
j
t k) (3.2)
Bajo estas condiciones, se habla entonces de la Transformada Wavelet Discreta (DWT). Que es la usada
en el procesamiento de se nales y tratamiento de imagenes.
3.2. Transformada Wavelet Discreta
La transformada wavelet discreta descompone una se nal discreta en dos se nales de la mitad de la longitud
original. Una se nal es una aproximacion a la se nal original y la otra contiene las diferencias de la aproximacion
con respecto a la se nal original. Una parte interesante de la transformacion es que la energa de la se nal se
conserva en las dos subse nales, pero ademas, la mayor cantidad de la energa se concentra en la se nal de
aproximacion. Esto habla de cierta compactacion de la energa.
La gura 3.1 muestra las gracas de una funcion y su descomposicion por medio de la transformada
wavelet. En la graca de la derecha se muestran la aproximacion y los detalles unidos como una sola graca.
La se nal de aproximacion tiene el 99.5980 % de la energa de la se nal original mientras que la se nal de detalles
tiene solo el 0.4020 %.
3.3. Tipos de wavelets mas conocidos y su aplicacion con Matlab
3.3.1. Principales funciones de Matlab para trabajar con la transfomada wavelet
Existen varias familias de wavelets que son utiles en aplicaciones, muchas han sido desarrolladas en los
ultimos a nos. Desde Matlab se puede obtener informacion basica de cada uno de estos tipos con el comando
waveinfo(tipo) donde tipo puede ser uno de los siguientes:
CAP

ITULO 3. TRANSFORMADA WAVELET 36


Figura 3.1: La graca de la izquierda muestra la transformada de la se nal de la izquierda. Puede verse
claramente que la aproximacion es una version compacta de la se nal original. Se utilizo la transformada de
Haar.
haar : Wavelet de Haar.
db : Wavelets de Daubechies.
sym : Symlets.
coif : Coiets.
bior : Wavelets Biortogonales.
rbio : Wavelets Reversas biortogonales.
meyr : Wavelet de Meyer.
dmey : Wavelet Discreta de Meyer.
gaus : Wavelet Gaussiana.
mexh : Wavelet de sombrero Mexicano.
morl : Wavelet de Morlet.
cgau : Wavelet Compleja Gaussiana.
cmor : Wavelet Compleja de Morlet.
shan : Wavelet Compleja de Shannon.
fbsp : Wavelet B-spline de Frecuencia Compleja.
De estas wavelets, las mas conocidas son la de Haar y las de Daubechies. Para poder observar la apariencia
de cada una de estas familias de wavelets se puede utilizar el comando wavemenu de Matlab, que despliega
la imagen mostrada en la gura 3.2, y despues elegir Wavelet Display. Al elegir una familia y un tipo
especco, se muestra la apariencia de cada wavelet , de la funcion de escalamiento y los coecientes de
los ltros de descomposicion y de reconstruccion. Ademas se pueden realizar varias operaciones con wavelets
desde este menu, como eliminacion de ruido en imagenes y regresion de datos.
CAP

ITULO 3. TRANSFORMADA WAVELET 37


Matlab tambien tiene muchos comandos que pueden ser aplicados en los programas que el usuario desar-
rolle. Los mas importantes son:
coefs = cwt(s, esc, modo) Obtiene los coecientes resultantes de aplicar la transformada wavelet con-
tinuaa la se nal s un n umero de escalas esc conel tipo de wavelet modo.
[Aprox, Det] = dwt(s, modo) Realiza la transformada discreta wavelet de un nivel a la se nal s usando
las wavelets especicadas por modo.
s = idwt(A, D, modo) Realiza la transformada wavelet discreta usando la aproximacion A y los detalles
D usando las wavelets modo.
wavedec, waverec Realizan la descomposicion y la recontruccion multinivel de una se nal utilizando la trans-
formada wavelet discreta.
[L, H, Lprim, Hprim] = wfilters(modo) Devuelve los coecientes de los ltros de descomposicion (L
y H) y de recontruccion (Lprim y Hprim) correspondientes al tipo modo.
[phi, psi, t]=wavefun(modo, iter) Devuelve los valores de las funciones wavelet madre y de es-
calamiento para el tipo de wavelet especicado y utilizando el numero de iteraciones especicado.
3.3.2. Wavelet de Haar
Este tipo de wavelet es el mas simple y el que fue conocido primero. Usualmente se usa por su simplicidad
computacional y en aplicaciones en que se trabaja con funciones muy irregulares como las series de tiempo.
3.3.3. Daubechies
Son de las wavelets mas conocidas ya que fueron las primeras contnuas y con soporte compacto. La
wavelet de Haar es un caso especial de esta familia. No existe una forma cerrada que describa a estas wavelets
o a las correspodientes funciones de escalamiento, sin embargo, la forma de la funcion se puede aproximar
utilizando el comando wavefun o con el programa de ejemplo de la gura 3.3.
3.3.4. Programas de ejemplo
A continuacion se muestran tres programas hechos en Matlab que sirvieron como practica en la utilizacion
de las funciones relacionadas con wavelets.
3.4. Analisis Multiresolucion
Las funciones wavelets, por su construccion por medio del analisis multiresolucion, forman una base
ortonormal del espacio de funciones L
2
(R) que se dene a continuacion. Resulta util conocer las principales
deniciones de conceptos matematicos que son encontrados frecuentemente al trabajar con wavelets.
CAP

ITULO 3. TRANSFORMADA WAVELET 38


Figura 3.2: Menu de Matlab para explorar las capacidades de las wavelets
CAP

ITULO 3. TRANSFORMADA WAVELET 39


function [R, T] = miDB(w)
% filtros para w
[L, H, Lp, Hp] = wfilters(w);
%convolucion de Lp con Hp sobremuestreado
for i=1:15
Hp = upsample(Hp);
Hp = conv(Lp, Hp);
end
R = Hp;
T = linspace(0, length(L)-1, length(R));
%sobremuestrea el arreglo
function R = upsample(A)
R = zeros(1, 2*length(A)-1);
R(1:2:end) = A;
Figura 3.3: Programa que aproxima la funcion wavelet especicada realizando una iteracion de los coecientes
del ltro Hprim sobremuestreados ltrandolos (con la funcion conv) con el ltro Lprim de la forma en que
se describe en [3].
CAP

ITULO 3. TRANSFORMADA WAVELET 40


Figura 3.4: Gracacion del resultado de ejecutar el programa de la gura 3.3 con el argumento db2
function wav2d(w)
%muestra la descomposicion de una imagen en 2 niveles
Im = double(rgb2gray(imread(purple-cat.jpg)));
[cA1, cH1, cV1, cD1] = dwt2(Im, w);
[cA2, cH2, cV2, cD2] = dwt2(cA1, w);
Im2 = [cA2, cH2; cV2, cD2];
imshow(uint8([Im2(:,1:end-1), cH1; cV1, cD1]));
end
Figura 3.5: Programa que realiza la descomposicion en dos niveles de una imagen.
CAP

ITULO 3. TRANSFORMADA WAVELET 41


Figura 3.6: Resultado de la ejecucion de programa de la gura 3.5 con el argumento db2 que especica una
wavelet de Daubechies.
CAP

ITULO 3. TRANSFORMADA WAVELET 42


function Im2 = comp
%intenta quitar el ruido a una imagen...
[L, H, Lp, Hp] = wfilters(coif3);
%lee la imagen y la muestra
Im = double(rgb2gray(imread(purple-cat.jpg)));
subplot(131); imshow(uint8(Im))
title(Imagen original)
Im = Im + 30*round(rand(size(Im))); %agrega ruido
t = size(Im);
for i=1:t(1)
for j=1:t(2)
if Im(i, j)>255
Im(i, j)=255;
end
end
end
subplot(132); imshow(uint8(Im))
title(Imagen con ruido)
%se aplica la transformada discreta
[cA1, cH1, cV1, cD1] = dwt2(Im, coif3);
cH1 = umbral(cH1, 1*std(Im(:)));
cV1 = umbral(cV1, 1*std(Im(:)));
cD1 = umbral(cD1, 1*std(Im(:)));
A0 = idwt2(cA1, cH1, cV1, cD1, coif3);
%se muestra la aproximacion
subplot(133); imshow(uint8(A0));
title(???)
end
function R = umbral(M, mul)
t = size(M);
for i = 1:t(1)
for j = 1:t(2)
if abs(M(i, j))<mul
M(i, j)=0;
end
end
end
R = M;
end
Figura 3.7: Programa que intenta realizar la eliminacion de ruido de una imagen usando la wavelet coiet .
CAP

ITULO 3. TRANSFORMADA WAVELET 43


Figura 3.8: Resultado de la ejecucion del programa de la gura 3.7
La norma de una secuencia =
1
,
2
, . . .) es una medida del tama no o magnitud de la secuencia, se
dene por la formula
||
l
2 =
_

n
_
1/2
El espacio l
2
consiste de todas las secuencias con norma nita.
La norma de una funcion f(R) R se dene por
|f|
L
2 =
__
R
f(x)
2
dx
_
1/2
De forma semejante al inciso anterior, el espacio L
2
consiste de todas las funcionesf con norma nita.
Usualmente se usa solo el smbolo || al representar la norma de una secuencia o funcion, la norma a
utilizar se entiende por el contexto.
Una secuencia de funciones f
1
, f
2
, . . . converge a la funcion f si la diferencia f
n
f se puede hacer
arbitrariamente peque na haciendo crecer a n, esto se representa como |f
n
f| 0 cuando n .
Una serie de funciones converge a f si la secuencia S
n
de sumas parciales converge a f. Una suma
parcial se dene como S
n
(x) =

n
j=1
f
i
(x)
La base de wavelets de Haar fue por mucho tiempo la unica conocida con la propiedad de ser ortogonal,
sin embargo, se requeria de otras bases de wavelets que ademas fueran continuas y diferenciables. En 1985
Meyer y Mallat desarrollaron el analisis multiresolucion, que ayudo a crear y entender estas nuevas bases.
El analisis multiresolucion es la formalizacion de las ideas intuitivas de los terminos aproximacion y detalles
usados en la seccion 3.2. Formalmente, un analisis multiresolucion es una secuencia de subespacios cerrados
V
n
, n Z, subconjuntos de L
2
(1), tales que
cumplen con la jerarqua de contenciones
V
2
V
1
V
0
V
1
V
2
(3.3)
CAP

ITULO 3. TRANSFORMADA WAVELET 44


su interseccion es trivial y la cerradura de su union es L
2
(R)

n
V
n
= 0,
_
n
V
n
= L
2
(Z) (3.4)
esto quiere decir que la unica funcion que pertenece a cada V
n
es la funcion 0 (ninguna funcion constante
aparte de 0 pertenece a L
2
(1)), y que el espacio L
2
(1) es generado por las combinaciones lineales de
los conjuntos V
n
.
cada uno de estos subconjuntos es una contraccion del otro
f(x) V
n
f(2
n
x) V
0
, n Z (3.5)
por ejemplo, si una funcion f(x) esta en V
1
, entonces la funcion f(2x) (una contraccion de f(x) a la
mitad) esta en V
0
.
existe una funcion de escalamiento V
0
cuyas translaciones enteras generan a V
0
,
V
0
= f L
2
(1) [ f(x) =

k
(x k), k Z (3.6)
Entonces, como cada elemento del espacio V
n
es la contraccion de un elemento de V
0
, puede decirse que
todos estos conjuntos son iguales cuando se ignora su escala, y que conforme subimos en la jerarqua de
contencion nos encontramos con espacios con mas detalles (o con frecuencias mayores).
El analisis multiresolucion conduce a una descomposicion ortogonal del espacio L
2
(1). Como V
n
V
n1
,
se puede obtener el complemento ortogonal de V
n
en V
n1
representado por W
n
, entonces
W
n
V
n
= V
n1
(3.7)
a su vez, V
n
puede ser descompuesto como
W
n+1
V
n+1
= V
n
(3.8)
siguiendo este procedimiento se tiene que
_
m

k=n
W
k
_
V
m
= V
n1
, m n (3.9)
y si se toma la suma sobre todos los enteros se puede generar a todos los conjuntos V
n

n
W
n
=
_
n
V
n
= L
2
(1) (3.10)
Esto nos indica que el espacio L
2
(1) puede ser descompuesto como una suma directa de espacios W
n
, y
entonces cualquier funcion en L
2
(1) se puede representar como una combinacion lineal de elementos de W
n
,
que contienen elementos de frecuancias diferentes.
CAP

ITULO 3. TRANSFORMADA WAVELET 45


3.5. Aplicacion de muestra
Usando la funciones de Matlab antes mencionadas, se elaboro una peque na aplicacion de ltrado de
imagenes. En particular se implementaron un ltro pasabajas y un pasaaltas.
A grandes rasgos, estos ltros funcionan del siguiente modo. Primero se obtienes los coecientes de la
transformacion wavelet a varios niveles, despues se podan (se hacen cero) algunos de los coecientes obtenidos
en la transformacion, se borran los coecientes de detalles si se desea un ltro pasabajas, o se borran los
coecientes de aproximacion si se desea un ltro pasa altas, por ultimo, se reconstruye la imagen con los
coecientes modicados. La imagen de prueba se muestra en la gura 3.9, los resultados de los ltros se
muestran en las guras 3.10 y 3.11.
Figura 3.9: Imagen de prueba para los ltros.
3.6. Codigo de las funciones elaboradas
En las guras 3.12 a 3.18 se muestra el codigo fuente de las funciones que implementan la aplicacion de
ltrado.
CAP

ITULO 3. TRANSFORMADA WAVELET 46


Figura 3.10: Resultado de la aplicacion del ltro pasa bajas con diferentes umbrales para la poda de los
coecientes de detalle.
CAP

ITULO 3. TRANSFORMADA WAVELET 47


Figura 3.11: Resultado de la aplicacion del ltro pasa altas con diferentes umbrales para la poda de los
coecientes de aproximacion.
CAP

ITULO 3. TRANSFORMADA WAVELET 48


function prueba
im = abreImagen(dado.jpg, c);
r = descomposicion(im, 0, db9);
r = filtra(r, h, 0.8);
imshow(reconstruccion(r));
Figura 3.12: Funcion que ejecuta la aplicacion de prueba.
function im = abreImagen(nombre, modo)
im = imread(nombre);
if modo = c
im = rgb2gray(im);
end
im = double(im);
Figura 3.13: Esta funcion abre la imagen con el nombre especicado y la convierte a escala de grises si asi se
indica.
function datos = descomposicion(imagen, niveles, wavelet)
%Obtiene el numero de capas de la imagen. Una para escala de grises y
%3 para imagenes con colores
if length(size(imagen)) == 3
capas = 3; %imagen a colores
else
capas = 1; %escala de grises
end
%Crea la estructura que almacenara los datos
datos = cell(capas, 1);
%Si niveles == 0, se realiza la maxima descomposicion posible
if niveles == 0
t = size(imagen);
maximo = max(t(1:2)); %Encuentra la dimension mayor en la imagen
niveles = log(maximo)/log(2); %obtiene el logaritmo base 2
end
%Realiza la descomposicion wavelet
for i = 1:capas
[C, S] = wavedec2(imagen(:,:,i), niveles, wavelet);
datosi = desempaca(C, S, wavelet);
end
end
Figura 3.14: Esta funcion realiza la descomposicion wavelet de una imagen usando la funcion wavedec2 de
matlab. Regresa una estructura con los datos mejor organizados. Si el numero de niveles de descomposicion
es igual a 0, se realiza el numero maximo de descomposiciones posibles.
CAP

ITULO 3. TRANSFORMADA WAVELET 49


function datos = filtra(datos, tipo, atenuacion)
%Ajustamos el modo en que se manejan los bordes de la imagen en
%el proceso de filtrado. Usamos el modo per (periodizacion).
%Esto produce como resultado que los vectores de aproximaciones
%y detalles sean siempre de la mitad del tama~no del original)
m = dwtmode;
if m ~= per
dwtmode(per);
end
%El filtrado se puede realizar a 100 niveles.
%Calcula el numero de pasos por cada nivel de descomposicion
tam = size(datos1);
niveles = tam(1)-1;
pasosPorNivel = round(100/niveles);
tamanoDePaso = 1 / pasosPorNivel;
%Encuentra que niveles de la descomposicion
%se atenuan y en que cantidad
atenuacion = atenuacion * 100;
porAtenuar = [];
conElValor = [];
capasAAtenuar = ceil(atenuacion/pasosPorNivel);
if tipo == h
i = 1;
for k = 1:capasAAtenuar
porAtenuar = [porAtenuar, i];
i = i+1;
end
else
i = niveles+1;
for k = 1:capasAAtenuar
porAtenuar = [porAtenuar, i];
i = i-1;
end
end
if capasAAtenuar >0
restante = atenuacion-(capasAAtenuar-1)*pasosPorNivel;
conElValor = porAtenuar;
conElValor(1:end) = 0;
for i = 1:restante
conElValor(end) = conElValor(end)+tamanoDePaso;
end
conElValor(end) = 1-conElValor(end);
end
%Encuentra el numero de capas de la imagen
capas = length(datos);
%Aqui se filtra cada capa de la imagen...
for i = 1:capas
temp = datosi; %Guarda una capa de la descomposicion
for k = 1:length(porAtenuar)
for j = 1:3
tempporAtenuar(k), j = conElValor(k)*tempporAtenuar(k), j;
porAtenuar(k);
if porAtenuar(k)==1 %Esta es la aproximacion
break;
end
end
end
datosi = temp;
end
end
Figura 3.15: Esta funcion realiza un ltrado. Recibe la descomposicion wavelet de una imagen, el tipo de
ltrado y la atenuacion de los coecientes. Regresa un estructura similar a la recibida.
CAP

ITULO 3. TRANSFORMADA WAVELET 50


function im = reconstruccion(datos)
%Se obtiene el numero de capas de la imagen representada por los datos
capas = length(datos);
%Se lee la primera capa de datos
[C, S] = empaca(datos1);
%Se lee el nombre de la wavelet usada en la descomposicion
wavelet = datos1;
wavelet = wavelet1, 3;
temp = waverec2(C, S, wavelet);
%Se crea la variable que almacenara la imagen reconstruida
[f, c] = size(temp);
im = zeros(f, c, capas);
%Se guarda la primera capa
im(:,:,1) = temp;
for i = 2:capas
[C, S] = empaca(datosi); %obtiene los datos de la estructura CELL
im(:,:,i) = waverec2(C, S, wavelet); %Guarda los datos en la imagen
end
%Se convierte a tipo byte
im = uint8(im);
end
Figura 3.16: Esta funcion realiza la reconstruccion de una imagen a partir de su descomposicion wavelet. Usa
la funcion waverec2 de matlab.
CAP

ITULO 3. TRANSFORMADA WAVELET 51


function datos = desempaca(C, S, wavelet)
%Encontramos el numero de niveles de la descomposicion
[f, c] = size(S);
niveles = f-2;
%Creamos una estructura CELL que contenga a las matrices resultantes
%de la descomposicion realizada (C) y los datos de las dimensiones (S)
datos = cell(niveles+1, 3);
%Guardamos primero la aproximacion
temp = zeros(S(1,:)); %se crea la matriz para la aproximacion
temp(:) = C(1:prod(S(1,:))); %se guarda la aproximacion
datos1, 1 = temp; %se guarda en la estructura CELL
%Quitamos del arreglo C los datos guardados
C = C(prod(S(1,:))+1 : end);
%Guardamos los datos de las dimensiones (S)
datos1, 2 = S;
%Guardamos el nombre de la wavelet usada en la descomposicion
datos1, 3 = wavelet;
%Guardamos los detalles de los diferentes niveles
for i = 1:niveles
L = prod(S(i+1,:)); %encuentra la cantidad de datos a guardar
for j = 1:3 %para los detalles H, V y D
temp = zeros(S(i+1,:)); %crea la matriz para guardar los datos
temp(:) = C(1:L); %guarda los datos en la matriz
datosi+1, j = temp; %guarda los datos en el cell
C = C(L+1 : end); %quita los datos que ya se leyeron
end
end
end
Figura 3.17: Funcion que acomoda los datos de la descomposicion generada por la funcion wavedec de matlab
en una estructura de datos tipo cell junto del nombre de la wavelet usada en la descomposicion.
function [C, S] = empaca(R)
C = [];
S = R1, 2;
[f, c] = size(R);
temp = R1, 1; %guarda la aproximacion
C = temp(:);
for i=2:f %guarda los detalles
for j=1:c
temp = Ri, j;
C = [C, temp(:)];
end
end
end
Figura 3.18: Regresa al formato original manejado por wavedec2 y waverec2.
Bibliografa
[1] Charles K. Chui, An Introduction to Wavelets, (Academic Press, EE.UU.AA., 1992).
[2] Leonardo Traversoni, On how to do wavelets of movements and its meaning,
[3] Marius Mitrea, Cliord Wavelets, Singular Integrals, and Hardy Spaces, (Springer-Verlag, Alemania,
1994).
[4] David Hestenes, New Foundations for Classical Mechanics, (Kluwer Academic Publishers, ...)
[5] Yves Meyer,Wavelets: Algorithms & Applications, (SIAM, EE.UU., 1994).
[6] Richard Courant, Herbert Robbins, Que son las Matematicas?: Conceptos Metodos y Fundamentos,
(Fondo de Cultura Economica, Mexico, 2002).
[7] Patrick Du Val, Homographies, Quaternions and Rotations, (Oxford University Press, Gran Breta na,
1964).
[8] Lars Kadison y Matthias T. Kromann, Projective Geometry and Modern Algebra, (Birkhauser, EE.UU.,
1996).
[9] Richard Murray y Shankar Sastry, A Mathematical Introduction to Robotic Manipulation, (CRC-Press,
EE.UU., 1994).
[10] William Rowan Hamilton, On quaternions, or on a new system of imaginaries in algebra, Traducido por
David R. Wilkins, Irlanda 2000. Disponible en internet.
[11] Eduardo Bayro Corrochano y Joan Lasenby, The Geometry Algebra of Computer Vision, en: Geometric
Algebra with Applications in Science and Engineering, eds. Eduardo Bayro Corrochano y Garret Sobczyk
(Birkhauser, EE.UU.AA. 2001.) captulo 7.
[12] Shawn G. Ahlers y John Michael McCarthy, The Cliord Algebra and the Optimization of Robot Design,
en: Geometric Algebra with Applications in Science and Engineering, eds. Eduardo Bayro Corrochano y
Garret Sobczyk (Birkhauser, EE.UU.AA. 2001.) captulo 12.
[13] Leonardo Traversoni, Image Analysis Using Quaternion Wavelets, en: Geometric Algebra with Appli-
cations in Science and Engineering, eds. Eduardo Bayro Corrochano y Garret Sobczyk (Birkhauser,
EE.UU.AA. 2001.) captulo 16.
[14] Ljudmila Meister, Quaternion Optimization Problems in Engineering, en: Geometric Algebra with Ap-
plications in Science and Engineering, eds. Eduardo Bayro Corrochano y Garret Sobczyk (Birkhauser,
EE.UU.AA. 2001.) captulo 19.
52
BIBLIOGRAF

IA 53
[15] Eduardo Bayro Corrochano, Multi-resolution Image Analysis Using the Quaternion Wavelet Transform,
en: Numerical Algorithms 39, eds. (Springer, 2005.) Disponible en internet.
[16] Joan Lasenby, Geometric Algebra: Applications in Engineering:
[17] Bert J uttler, Visualization of Moving Objects Using Dual Quaternion Curves, en: Computer & Graphics,
(Elsevier, 1994.) Disponible en internet.
[18] Ken Shoemake, Animating Rotations with Quaternion Curves, en: Computer Graphics (Proc. of SIG-
GRAPH 85), (1985). Disponible en internet.
[19] Myoung-Jun Kim, Myoung-Soo Kim y Sung Yong Shin A General Construction Scheme for Unit Quater-
nion Curves with Simple High Order Derivatives, en: , (1995). Disponible en internet.
[20] Oene Bottema, Bernard Roth, Theoretical Kinematics, Dover Publications, EE.UU. 1979.
[21] Les Piegl, The NURBS Book, Springer-Verlag, Berlin. 1995.
[22] Gregory Nielson, -Quaternion Splines for the Smooth Interpolation of Orientations, en: IEEE Trans-
actions on visualization and computer graphics Vol. 10. No. 2, (2004).
[23] Walker, James S., A Primer on Wavelets and their Scientic Applications, Chapman & Hall/CRC,
EE.UU. 1999.
[24] Alpert, Bradley K., Wavelets and Other Bases for Fast Numerical Linear Algebra, publicado en
WaveletsA Tutorial in Theory and Applications editado por Charles Chui, Academic Press Inc., EE.UU.
1992.
[25] Olivier Rioul, Martin Vetterli, Wavelets and Signal Processing, 1991.
[26] Alan V. Oppenheim, Ronald W. Schafer, Tratamiento de Se nales en Tiempo Discreto, segunda edicion,
Prentice Hall, Espa na 2000.
[27] Michael Misiti, Yves Misiti Georges Oppenheim, Jean-Michel Poggi, Wavelet Toolbox for use with Matlab.
[28] Gilbert Strang, Truong Nguyen, Wavelets and Filter Banks, Cambridge Press, EE.UU. 1996.

También podría gustarte