Proyecto - 148.206.53.231

82

Transcript of Proyecto - 148.206.53.231

Page 1: Proyecto - 148.206.53.231
Page 2: Proyecto - 148.206.53.231

Proyecto Terminal

1

UNIVERSIDAD AUTONOMA METROPOLITANA

UNIDAD IZTAPALAPA

DIVISION CBI

Licenciatura: Computación

Proyecto Terminal

“Animación y captura de imágenes de objetos en movimiento”

Profesor: Dr. Leonardo Traversoni Domínguez

Alumnos: González Martínez Rafael Trujillo Lozano Anselmo

UNIVERSIDAD AUTONOMA METROPOLITANA UNIDAD IZTAPALAPA

FECHA: 6 DE DICIEMBRE DEL 2005

Page 3: Proyecto - 148.206.53.231

Proyecto Terminal

2

Nuestro más sincero agradecimiento al profesor Dr. Leonardo Traversoni Domínguez.

Quien nos permitió ser participes de este gran proyecto.

Page 4: Proyecto - 148.206.53.231

Proyecto Terminal

3

INDICE. CAPITULO 1 (Wavelets). 1. Introducción.

1.1 Representación de una imagen. 1.2 Muestreo y cuantificación de una imagen. 1.3 Almacenamiento de una imagen digital. 1.4 Resolución de una imagen digital. 1.5 Comprensión de imágenes. 1.6 La transformada. 1.7 Aplicación de la transformada en el procesado de una imagen. 1.8 Transformada en una dimensión. 1.9 La transformada en dos dimensiones. 1.10 Distribución de la energía en una transformada. 1.11 Selección de la transformada. 1.12 Toda transformada wavelet (ondículas u ondeletas). 1.13 La transformada wavelet discreta. 1.14 Organización de los coeficientes wavelet. 1.15 Programas Wavelets. CAPITULO 2 (Cuaternios). 2. Introducción. 2.1 Vectores y ejes en el espacio. 2.2 Producto escalar y producto vectorial. 2.3 Giro de un punto arbitrario del espacio alrededor de un eje arbitrario del espacio mediante producto escalar y vectorial. 2.4 Definición de un cuaternio. 2.5 Multiplicación de cuaternios. 2.6 El conjugado de un cuaternio. 2.7 Giro de un punto arbitrario del espacio alrededor de un eje arbitrario del espacio mediante cuaternios. 2.8 Programas cuaternios. CAPITULO 3 (Proyecciones). 3. Introducción. 3.1 Algebra Grassman-Cayley. 3.1.1 El espacio euclidiano R³ como espacio projectivo P(R 4 ). 3.1.2 Coordenadas homogéneas. 3.2 Operadores de Grassman Cayley. 3.2.1 Operadores Meet y Join. 3.3 El principio de dualidad. 3.4 Comentarios. 3.5 Representación de los datos. 3.6 Definición del operador de dualidad. 3.7 Código de funciones.

Page 5: Proyecto - 148.206.53.231

Proyecto Terminal

4

CAPITULO 4 (Implementación del álgebra de Grassman-Cayley con Matlab). 4. Álgebra GC. 4.1 El espacio euclidiano R³ como espacio projectivo P(R 4 ). 4.2 Coordenadas homogéneas. 4.2.1 Operadores de Grassman Cayley. 4.2.2 El principio de dualidad. 4.2.3 Comentarios. 4.3 Implementación en matlab. 4.3.1 Representacion de los datos. 4.4 Definición del operador de dualidad. CAPITULO 5 (Reconstitución en 3D de la trayectoria de la burbuja). 5. Introducción. 5.1 Tratamiento de los videos. 5.1.1 Tratamiento de los datos. 5.2 Tratamiento de las imágenes. 5.2.1 Localización de la burbuja. 5.3 Reconstitución en 3D. 5.3.1 Cambio de coordenadas (de píxel al verdadero mundo). 5.3.2 Reconstitución de la escena. CAPITULO 6 (Análisis del movimiento). 6. Notas preliminares. 6.1 Estudio de las rotaciones. CAPITULO 7 (Interpolación del Movimiento de la Orientación de la Burbuja). 7.1 B-Splines de Quaternions. 7.1.1 Introducción. 7.1.2 Curvas Quaternionicas de Bernstein/Beziers. 7.1.3 Construcción de los B-Splines de quaternios. 7.1.4 Resultados obtenidos. CAPITULO 8 (Análisis de Resultados y Conclusiones). 8 La algebra de Grassman-Cayley. 8.1 Modelado y Reconstitución 3D. 8.2 Análisis del Movimiento mediante Quaternions. 8.3 Interpolación del Movimiento por B-Splines de Quaternions. ANEXO (Imágenes de los resultados de las corridas de los programas). BIBLIOGRAFIA.

Page 6: Proyecto - 148.206.53.231

Proyecto Terminal

5

CAPILO 1

Page 7: Proyecto - 148.206.53.231

Proyecto Terminal

6

Capitulo 1. 1. Introducción. En este capitulo se revisan los fundamentos teóricos, que originan los métodos propuestos en la comprensión de imágenes fijas, se inicia con la revisión de conceptos básicos para tener la idea de la reducción del almacenamiento de una imagen y continuando con las transformaciones como método para cambiar la imagen a otra dimensión que puede ser mejor controlada por la concentración de energía de unos cuantos coeficientes. 1.1 Representación de una imagen. Una imagen monocroma o simplemente imagen puede variar en la apreciación que un observador pueda tener sobre ésta, pero en otro sentido esta referida a una función bidimensional de intensidad de luz f(x,y), donde x e y representan las coordenadas espaciales y el valor de f en un punto cualquiera (x,y) es proporcional al brillo (o nivel de gris) de la imagen en ese punto. La asignación de los ejes a una imagen pueden cambiar dependiendo de las conveniencias de quien las presenta, en nuestro caso la ubicación de los ejes será como se indica en la siguiente figura 1.1.

Figura 1.1: utilización de los ejes en una imagen. Por otro lado, una imagen digital es aquella que se ha discretizado tanto en las coordenadas (x,y) como en los niveles de gris. Una imagen digital puede ser representada por una matriz, donde la posición de los elementos representan un punto de la imagen y el valor que tiene cada elemento de la matriz representa el nivel de gris en ese punto. A estos elementos también se les llama pixels.

Page 8: Proyecto - 148.206.53.231

Proyecto Terminal

7

1.2 Muestreo y cuantificación de una imagen. En una imagen digital, a la digitalización de las coordenadas espaciales (x,y) se les denomina muestreo de la imagen y a la digitalización de la amplitud es la cuantificación del nivel de gris. De lo anterior se pude establecer que una imagen continua, puede ser representada de manera aproximada, por una serie de muestras igualmente espaciadas, esto es representable por una matriz MxN, como se muestra a continuación.

(1.0) El término de la derecha es la imagen digital. 1.3 Almacenamiento de una imagen digital En el proceso de digitalización los valores de M y N y los valores de gris permitidos son los que determinan la cantidad de bits requeridos para almacenar una imagen, con las características de la parte derecha de la ecuación (1.0).Es practica común que estas cantidades sean potencias de 2. Por esto. N=2n

M=2k

G=2m

En donde n,m y k son valores enteros y G representa el número de niveles de grises. Entonces la cantidad de bits requeridos para almacenar una imagen digitalizada se puede obtener con: b=MxNxm Por ejemplo, una imagen de 256x256 puntos con 128 niveles de gris necesita 458,752 bits de memoria. Si el número de pixels y los niveles de grises aumentan la memoria requerida es mayor. 1.4 Resolución de una imagen digital. La resolución de una imagen digital depende estrechamente del muestreo y cuantificación del nivel de gris. Entre mas se incrementan estos parámetros, mas se aproxima una imagen digitalizada a una imagen original. Aunque al aumentar estos

Page 9: Proyecto - 148.206.53.231

Proyecto Terminal

8

parámetros, trae como consecuencia el aumento de bits requeridos para almacenar la imagen y mayores requerimientos en el procesamiento. La calidad de una imagen es subjetiva y depende mucho de las necesidades de una aplicación determinada y no es fácil definirla como “una buena imagen”. Si la resolución espacial de una imagen digital se reduce, como una forma de reducir el número de los bits requeridos para almacenarla, tiene los efectos que se muestran en la figura (1.2). La imagen original se encuentra en la figura (1.1a), que muestra una imagen digital de 512 x 512 pixels y 256 niveles de gris. Mientras en las figuras (1.1b) a la (1.1d) se muestran los resultados de reducir la resolución espacial; en todos los casos, los niveles de gris no se redujo. Todas las imágenes representan la misma área de 512 x 512 puntos, por lo que en las imágenes con menor resolución los pixels han sido duplicados para cubrir toda el área. Esta acción es la que produce que en las imágenes de menor resolución, la imagen tiende a parecer un tablero de ajedrez. Por otra parte, puede también optarse por la disminución de los niveles de gris requeridos para representar a la imagen, pero produce lo que se denomina falso contorno, originado por un número insuficiente de niveles de gris en las áreas más suaves de una imagen digital.

Figura 1.2 Efectos que se producen al reducir la resolución especial.

Page 10: Proyecto - 148.206.53.231

Proyecto Terminal

9

1.5 Comprensión de imágenes. El muestreo y cuantificación de una imagen para crear una imagen digital, produce una gran cantidad de datos. Estos datos pueden llegar a ser tan grande que su almacenamiento, procesamiento y comunicación pueden llegar a ser excesivos para una aplicación práctica. Mediante la comprensión de imágenes se puede enfrentar esta situación, reduciendo la cantidad de datos necesarios para representar una imagen digital, teniendo como base para la reducción de los datos, la eliminación de los datos redundantes. Las técnicas para la comprensión de imágenes se pueden clasificar en dos categorías; comprensión sin pérdidas y comprensión con pérdidas. 1.6 La transformada. De forma general, una transformada representa un cambio hacia un dominio diferente, que debido a sus propiedades, facilita de alguna manera la realización de tareas determinadas. Este cambio puede caracterizarse mediante un operador, que genéricamente se denota como T (.). Al aplicar este operador a una señal f se puede representar de la siguiente manera:

Donde T-1 (.) es la transformada inversa. 1.7 Aplicación de la transformada en el procesado de una imagen. El procesado de una imagen puede llevarse a cabo en el dominio espacial (amplitud en la función de la posición) o en el dominio transformado. La figura 1.3, muestra la configuración general del procesado digital de la imgen basado en las transformadas.

Figura 1.3. Tratamiento en el dominio transformado. La imagen digitalizada es previamente transformada antes de efectuar el procesado. Después de que la imagen es procesada, se somete a la correspondiente transformación inversa complementaria, para conseguir el retorno de la imagen al dominio original.

Page 11: Proyecto - 148.206.53.231

Proyecto Terminal

10

El procesado, basado en el dominio transformado consigue codificar imágenes reduciendo los requerimientos de almacenamiento y ancho de banda para la transmisión. Esto se realiza mediante el descarte o cuantificación de los coeficientes transformados de muy baja magnitud. Un sistema típico de codificación basado en transformación es presentado en la figura 1.4. En la figura 1.4(a), una imagen entrada NxN se subdivide en subimágenes de tamaño nxn. Enseguida se aplica la transformación cuyo objetivo es deshacer la correlación de los pixels de cada subimagen, o empaquetar tanta información como resulte posible en el menor número de coeficientes de la transformada. Se continúa con la cuantificación, que elimina selectivamente o cuantifica con menor precisión, los coeficientes que llevan la menor cantidad de información. Estos coeficientes influyen poco en la subimagen reconstruida. La etapa de codificación finaliza codificando los coeficientes cuantificados. El proceso inverso se muestra en la figura 1.4(b).

Figura 1.4 Sistema típico de codificación por transformación:

(a) codificador, (b) decodificador. 1.8 Transformada en una dimensión. En el caso general, una transformada se realiza mediante una multiplicación sucesiva de los elementos de un vector dado, por un conjunto de vectores base, cada uno de los cuales puede considerarse como un conjunto de factores de ponderación, la posterior suma de los valores obtenidos de esta forma, y la posible multiplicación por una constante, complementan las operaciones necesarias que dan lugares a los coeficientes transformados. Matemáticamente es útil representar la información de una imagen en forma matricial/vectorial como sigue: C = [B] d (1.1)

Page 12: Proyecto - 148.206.53.231

Proyecto Terminal

11

Donde C y d son vector columnas de Nx1 que contienen los coeficientes y los datos de la transformada, respectivamente; mientras que [B] es una matriz base. Para el caso de N=4, se tiene:

La implementación práctica de esta operación requiere, para el cálculo de N coeficientes transformados, N2 multiplicaciones y N(N-1) sumas, para un conjunto de datos numerosos, la carga computacional es elevada y son complejos. Por esto, se han desarrollado varios algoritmos de los denominados fast, por ejemplo la transformada rápida de Fourier. 1.9 La transformada en dos dimensiones. La transformada en dos dimensiones consiste en la multiplicación término a término de los elementos de un vector dado, por uno de los elementos de un conjunto de vectores base y sumando los valores obtenidos. Una transformada unidimensional solamente tendrá en cuenta la correlación entre los elementos individuales de un vector dado, y no entre los vectores adyacentes. Por lo que, para el caso de dos dimensiones es de suponer que se tendrá que aplicar nuevamente la transformada unidimensional, la forma de realizar esto, es mediante:

(1.2) Donde [D] es la matriz de datos, [B]T es la matriz transpuesta de la base. Con la ecuación (1.2) se consigue reducir considerablemente la correlación del conjunto de datos, tanto en la dirección vertical como en la horizontal. Para la recuperación de los datos originales, puede derivarse de la ecuación (1.2), mediante el empleo de operaciones elementales matriciales, lo que produce la siguiente ecuación:

(1.3) Partiendo de la ecuación (1.3), es posible notar como están representados los datos en una base. Con la finalidad de facilitar las operaciones, se selecciona la matriz base de 2x2 por lo que la ecuación (1.3) es ahora:

Page 13: Proyecto - 148.206.53.231

Proyecto Terminal

12

La matriz de coeficientes se puede expandir de la siguiente manera:

Con la expansión de los coeficientes se realizan las operaciones correspondientes, por lo que los datos quedarán representados como:

Cada una de las matrices del lado derecho de cada coeficiente, representa una base. Por lo tanto, la imagen puede reconstruirse como una suma ponderada de imágenes bases. Una imagen se puede expresar como una combinación lineal de imágenes base, siendo los coeficientes de su transformada los que ponderan el peso de cada imagen base en la imagen original. 1.10 Distribución de la energía en una transformada. La distribución de la energía en el resultado de una transformación, de manera general, tiende a concentrarse en pocos coeficientes. Sin embargo, la energía total de los datos se conserva en el dominio transformado, como se podrá ver en el siguiente ejemplo, que por simplicidad de cálculo se usa una matriz de 4x4 de una transformada, que se usará como la matriz B: Esta matriz, junto con el vector de datos son presentados a continuación, haciendo uso de la ecuación (1.1) para una transformación unidimensional, donde la expresión que resulta es:

Y el vector de coeficiente resultante es:

Page 14: Proyecto - 148.206.53.231

Proyecto Terminal

13

La energía total en el dominio de los datos es: 52 + 62 + 72 + 82 =174 y en el dominio transformado (13) 2 + (-2.0)2 + (0)2+ (-1.0)2= 174. De este modo, los cuatro elementos de los datos, han sido transformando de forma que uno de ellos tiene un valor grande y los demás son relativamente pequeños. Lo interesante es que, al concentrar la energía en pocos coeficientes, se puede guardar (almacenar) los más dominantes, logrando con ello la comprensión de los datos. Desde luego la recuperación de los datos es de forma aproximada. Por ejemplo, si se elimina el último coeficiente, tendremos dos que son ceros y solo almacenaríamos los dos más dominantes y el vector dato reconstruido (aproximado) que resulta es:

Para ver el comportamiento de la energía en el caso bidimensional se usará la misma matriz B, pero los datos ahora estarán en una matriz, esta es:

Para este caso, se hace uso de la ecuación (1.2). Al realizar la primera multiplicación de esta ecuación; es decir, [B] [D], que es como se aplicará el caso unidimensional, pero ahora sobre cada uno de los vectores de forma separada, da como resultado:

Donde [C’] denota el resultado de la primera etapa de la transformada bidimensional. Hay que observar que la energía total en cada dominio es la misma, es decir, 592. También se puede ver que cuatro de los coeficientes en el dominio transformado contienen el 93.7% de la energía total. Es evidente que el conjunto de coeficientes obtenidos, aun contiene una estructura notable en la dirección horizontal. Aplicando la siguiente parte de la ecuación (1.2), es decir [C’] [B]T , se obtiene:

Page 15: Proyecto - 148.206.53.231

Proyecto Terminal

14

Ahora, solo un único coeficiente es dominante, la transformada bidimensional ha reducido considerablemente la correlación del conjunto de datos en la dirección vertical y horizontal. Este solo coeficiente, contiene el 93.3% de la energía existente en el conjunto de datos original. La eliminación de los coeficientes más pequeños (los que sean necesarios para un error tolerable) en este dominio, permite la recuperación aproximada de los datos originales, al efectuar la eliminación, se guardan pocos coeficientes, logrando finalmente la comprensión de los datos por eliminación de coeficientes. 1.11 Selección de la transformada. Hay diversos sistemas de codificación por transformación basados en transformadas discretas bidimensionales, los cuales han sido estudiados ampliamente. La aplicación de una determinada transformación en una aplicación dada, depende de la cantidad de error que puede tolerarse y de los recursos de cálculo disponibles. Más adelante se estudiará una determinada transformada (La transformada Wavelet Discreta), para la construcción de un comprensor de imágenes fijas.

1.12 Toda transformada wavelet (ondículas u ondeletas).

Considera una función (que se supone del tiempo) en términos de oscilaciones tanto en el tiempo como en la frecuencia. Las transformaciones wavelet se clasifican en transformadas wavelet discretas y transformadas wavelet continuas.

En cuanto a sus aplicaciones, la transformada wavelet discreta se utiliza para la codificación de señales, mientras la continua se utiliza en el análisis de señales. Como consecuencia, la versión discreta de este tipo de transformada se utiliza fundamentalmente en ingeniería e informática, mientras que la continua se utiliza sobre todo en la investigación científica. Este tipo de transformadas están siendo cada vez más empleadas en un amplio campo de especialidades, a menudo sustituyendo a la transformada de Fourier.

1.13 La transformada wavelet discreta. La transformada Wavelet discreta (TWD) aplicada a imágenes proporciona una matriz de coeficientes, conocidos como coeficientes wavelet. Si a una imagen le aplicamos la TWD obtenemos cuatro tipos de coeficientes: aproximaciones, detalles horizontales, detalles verticales y detalles diagonales. La aproximación contiene la mayor parte de la

Page 16: Proyecto - 148.206.53.231

Proyecto Terminal

15

energía de la imagen, es decir, la información más importante, mientras que los detalles tienen valores próximos a cero.

Descomposición wavelet de primer nivel. 1.14 Organización de los coeficientes wavelet Generalmente, la energía de las imágenes se concentra en las frecuencias bajas. Una imagen tiene un espectro que se reduce con el incremento de las frecuencias. Estas propiedades de las imágenes quedan reflejadas en la transformada wavelet discreta de la imagen. Los niveles más bajos de compresión se corresponden con las bandas de alta frecuencia. En particular, el primer nivel representa la banda de más alta frecuencia y el nivel más fino de resolución. A la inversa, el último nivel (n) de descomposición corresponde con la banda de frecuencia más baja y la resolución más tosca. Así, al desplazarse de los niveles más altos a los más bajos, o sea, de baja resolución a alta resolución, se observa una disminución de la energía contenida en las subbandas recorridas.

Esquema de la organización de los coeficientes wavelet.

Si los coeficientes wavelet obtenidos por medio de la transformada wavelet discreta (DWT) para un nivel concreto poseen pequeñas magnitudes (valores próximos a cero), se espera que esos coeficientes wavelet estén en los primeros niveles de

Page 17: Proyecto - 148.206.53.231

Proyecto Terminal

16

descomposición. El aumento del nivel de descomposición wavelet produce unos coeficientes con mayores magnitudes.

Imagen

original de Barbara. Organización de los coeficientes

wavelet En la figura anterior se puede observar los contornos de Barbara en los distintos niveles y cómo son más bastos en el primer nivel de descomposición, además de cierta similitud entre los distintos niveles. 1.15 Programas Wavelets. %Este programa comprime y descomprime imagenes utilizando Wavelets. %Se corre en matlab , para correr es necesario que matlab tenga la %la carpeta toolbox. %Se pone la ruta donde se encuentra la fotografia y es guardada en la %matriz imagen imagen= imread('IMAG0002.JPG'); %se crea una matriz del mismo tamaño que imagen imagen2=imagen; %se saca el tamaño de la matriz tama=size(imagen); %se crean tres matrices lado1=zeros(tama(1),tama(2)); lado2=zeros(tama(1),tama(2)); lado3=zeros(tama(1),tama(2)); %se les asigna una parte de la matriz imagen lado1=imagen(:,:,1); lado2=imagen(:,:,2); lado3=imagen(:,:,3); % se da el nivel es un numero entero positivo nivel=1; % se da el tipo de filtro puede ser cualquiera de los siguentes % Available wavelet names 'wname' are: % Daubechies: 'db1' or 'haar', 'db2', ... ,'db45' % Coiflets : 'coif1', ... , 'coif5' % Symlets : 'sym2' , ... , 'sym8', ... ,'sym45'

Page 18: Proyecto - 148.206.53.231

Proyecto Terminal

17

% Discrete Meyer wavelet: 'dmey' % Biorthogonal: % 'bior1.1', 'bior1.3' , 'bior1.5' % 'bior2.2', 'bior2.4' , 'bior2.6', 'bior2.8' % 'bior3.1', 'bior3.3' , 'bior3.5', 'bior3.7' % 'bior3.9', 'bior4.4' , 'bior5.5', 'bior6.8'. % Reverse Biorthogonal: % 'rbio1.1', 'rbio1.3' , 'rbio1.5' % 'rbio2.2', 'rbio2.4' , 'rbio2.6', 'rbio2.8' % 'rbio3.1', 'rbio3.3' , 'rbio3.5', 'rbio3.7' % 'rbio3.9', 'rbio4.4' , 'rbio5.5', 'rbio6.8'. wname='db1'; %********************************************************************** % La funcion DWT2 discret 2-D transformada wavelet. % [CA,CH,CV,CD] = DWT2(X,'wname') % computa o calcula la aproximacion de los coeficientes de la matriz CA % asi como los detalles de los coeficientes de las matrices CH, CV y CD % (horizontal, vertical, diagonal) obtenidas de la descomposicion de la % matrz X %********************************************************************** %********************************************************************** % La funcion IDWT2 invierte la discret 2-D transformada wavelet. % X = IDWT2(CA,CH,CV,CD,'wname') % IDWT2 reconstruye la imagen comprimida (transformada wavelet DWT2) % usando un particular filtro ('wname') reconstruye la aproximacion % de la matriz X basada en la aproximacion de la matriz CA y CH,CV,CD %Estas dos funciones se aplicaron a lado 1, lado2, lado3 [CA,CH,CV,CD] = DWT2(lado1,wname); x1 = IDWT2(CA,CH,CV,CD,wname); [CA,CH,CV,CD] = DWT2(lado2,wname); x2 = IDWT2(CA,CH,CV,CD,wname); [CA,CH,CV,CD] = DWT2(lado3,wname); x3 = IDWT2(CA,CH,CV,CD,wname); %en imagen2 se asignan las matrices reconstruidas dando como resultado la %matriz que tiene la imagen imagen2(:,:,1)=x1; imagen2(:,:,2)=x2; imagen2(:,:,3)=x3;

Page 19: Proyecto - 148.206.53.231

Proyecto Terminal

18

%mostramos la imagen original que fue importada figure(1); imshow(imagen); %mostramos la imagen de la figura comprimida y reconstruida figure(2); imshow(imagen2); %+++++++++++++++++++++++++++++++++++++++++++ %Este programa comprime y descomprime imagenes utilizando Wavelets. %Se corre en matlab , para correr es necesario que matlab tenga la %la carpeta toolbox. %Se pone la ruta donde se encuentra la fotografia y es guardada en la %matriz imagen imagen= imread('fotosixt2007.jpg'); %se crea una matriz del mismo tamaño que imagen imagen2=imagen; %se saca el tamaño de la matriz tama=size(imagen); %se crean tres matrices lado1=zeros(tama(1),tama(2)); lado2=zeros(tama(1),tama(2)); lado3=zeros(tama(1),tama(2)); %se les asigna una parte de la matriz imagen lado1=imagen(:,:,1); lado2=imagen(:,:,2); lado3=imagen(:,:,3); % se da el nivel es un numero entero positivo nivel=1; % se da el tipo de filtro puede ser cualquiera de los siguentes % Available wavelet names 'wname' are: % Daubechies: 'db1' or 'haar', 'db2', ... ,'db45' % Coiflets : 'coif1', ... , 'coif5' % Symlets : 'sym2' , ... , 'sym8', ... ,'sym45' % Discrete Meyer wavelet: 'dmey' % Biorthogonal: % 'bior1.1', 'bior1.3' , 'bior1.5' % 'bior2.2', 'bior2.4' , 'bior2.6', 'bior2.8' % 'bior3.1', 'bior3.3' , 'bior3.5', 'bior3.7' % 'bior3.9', 'bior4.4' , 'bior5.5', 'bior6.8'. % Reverse Biorthogonal: % 'rbio1.1', 'rbio1.3' , 'rbio1.5' % 'rbio2.2', 'rbio2.4' , 'rbio2.6', 'rbio2.8' % 'rbio3.1', 'rbio3.3' , 'rbio3.5', 'rbio3.7' % 'rbio3.9', 'rbio4.4' , 'rbio5.5', 'rbio6.8'.

Page 20: Proyecto - 148.206.53.231

Proyecto Terminal

19

wname='db1'; %********************************************************************** % funcion %WAVEDEC2 Multinivel 2-D wavelet decomposicion. % [C,S] = WAVEDEC2(X,N,'wname')regresa ladescomposicion wavelet de la % matrix X al nivel N usando el filtro dado en wname %regresando un vector C y la correspondiente bookkeeping matrix S %********************************************************************** %********************************************************************** %WAVEREC2 Multinivel 2-D wavelet reconstruccion. % WAVEREC2 multilevel 2-D wavelet reconstruye usando el filtro % especificado('wname', see WFILTERS) % Regresando una matrix X que es la matriz reconstruida % X = WAVEREC2(C,S,'wname') % %Estas dos funciones se aplicaron a lado 1, lado2, lado3 [C,S]=wavedec2(lado1,nivel,wname); c=C+1; x1=waverec2(c,S,wname); tama1=size(x1); [C,S]=wavedec2(lado2,nivel,wname); c=C+1; x2=waverec2(c,S,wname); [C,S]=wavedec2(lado3,nivel,wname); c=C+1; x3=waverec2(c,S,wname); %en imagen2 se asignan las matrices reconstruidas dando como resultado la %matriz que tiene la imagen imagen2(:,:,1)=x1; imagen2(:,:,2)=x2; imagen2(:,:,3)=x3; %mostramos la imagen original que fue importada figure(1); imshow(imagen); %mostramos la imagen de la figura comprimida y reconstruida figure(2); imshow(imagen2);

Page 21: Proyecto - 148.206.53.231

Proyecto Terminal

20

%+++++++++++++++++++++++++++++++++++++++++++ %Este programa comprime y descomprime imagenes utilizando Wavelets. %Se corre en matlab , para correr es necesario que matlab tenga la %la carpeta toolbox. %Se pone la ruta donde se encuentra la fotografia y es guardada en la %matriz imagen function f=tarea(nombre) imagen= imread(nombre); %se crea una matriz del mismo tamaño que imagen imagen2=imagen; %se saca el tamaño de la matriz tama=size(imagen); %se crean tres matrices lado1=zeros(tama(1),tama(2)); lado2=zeros(tama(1),tama(2)); lado3=zeros(tama(1),tama(2)); %se les asigna una parte de la matriz imagen lado1=imagen(:,:,1); lado2=imagen(:,:,2); lado3=imagen(:,:,2); % se da el nivel es un numero entero positivo nivel=10; % se da el tipo de filtro puede ser cualquiera de los siguentes % Available wavelet names 'wname' are: % Daubechies: 'db1' or 'haar', 'db2', ... ,'db45' % Coiflets : 'coif1', ... , 'coif5' % Symlets : 'sym2' , ... , 'sym8', ... ,'sym45' % Discrete Meyer wavelet: 'dmey' % Biorthogonal: % 'bior1.1', 'bior1.3' , 'bior1.5' % 'bior2.2', 'bior2.4' , 'bior2.6', 'bior2.8' % 'bior3.1', 'bior3.3' , 'bior3.5', 'bior3.7' % 'bior3.9', 'bior4.4' , 'bior5.5', 'bior6.8'. % Reverse Biorthogonal: % 'rbio1.1', 'rbio1.3' , 'rbio1.5' % 'rbio2.2', 'rbio2.4' , 'rbio2.6', 'rbio2.8' % 'rbio3.1', 'rbio3.3' , 'rbio3.5', 'rbio3.7' % 'rbio3.9', 'rbio4.4' , 'rbio5.5', 'rbio6.8'. wname='haar'; %********************************************************************** % funcion %WAVEDEC2 Multinivel 2-D wavelet decomposicion. % [C,S] = WAVEDEC2(X,N,'wname')regresa ladescomposicion wavelet de la

Page 22: Proyecto - 148.206.53.231

Proyecto Terminal

21

% matrix X al nivel N usando el filtro dado en wname %regresando un vector C y la correspondiente bookkeeping matrix S %********************************************************************** %********************************************************************** %WAVEREC2 Multinivel 2-D wavelet reconstruccion. % WAVEREC2 multilevel 2-D wavelet reconstruye usando el filtro % especificado('wname', see WFILTERS) % Regresando una matrix X que es la matriz reconstruida % X = WAVEREC2(C,S,'wname') % %Estas dos funciones se aplicaron a lado 1, lado2, lado3 [C,S]=wavedec2(lado1,nivel,wname); x1=waverec2(C,S,wname); [C,S]=wavedec2(lado2,nivel,wname); x2=waverec2(C,S,wname); [C,S]=wavedec2(lado3,nivel,wname); x3=waverec2(C,S,wname); %en imagen2 se asignan las matrices reconstruidas dando como resultado la %matriz que tiene la imagen imagen2(:,:,1)=x1; imagen2(:,:,2)=x2; imagen2(:,:,2)=x3; %mostramos la imagen original que fue importada figure(1); imshow(imagen); %mostramos la imagen de la figura comprimida y reconstruida figure(2); imshow(imagen2);

Page 23: Proyecto - 148.206.53.231

Proyecto Terminal

22

CAPILO 2

Page 24: Proyecto - 148.206.53.231

Proyecto Terminal

23

2 Cuaternios.

2. Introducción.

Los cuaterniones fueron descubiertos por William Rowan Hamilton en 1843. Hamilton buscaba formas de extender los números complejos (que pueden interpretarse como puntos en un plano) a un número mayor de dimensiones. No pudo hacerlo para 3 dimensiones, pero para 4 dimensiones obtuvo los cuaterniones. Según una historia relatada por el propio Hamilton, la solución al problema que le ocupaba le sobrevino un día que estaba paseando con su esposa, bajo la forma de la ecuación: i2 = j2 = k2 = ijk = -1. Hamilton popularizó los cuaterniones con varios libros, el último de los cuales, Elements of Quaternions, tenía 800 páginas y fue publicado poco después de su muerte.

Para comprender mejor a los cuaterniones se necesitan conocer varios conceptos como son: vectores, escalares, espacio vectorial, producto escalar y producto vectorial.

En este capitulo vamos girar un punto arbitrario del espacio en torno a un eje arbitrario del espacio. Y lo haremos de dos maneras diferentes: mediante una fórmula con productos escalares y vectoriales de vectores, y mediante Cuaternios ( Cuaterniones - quaternions en inglés -).

Lo veremos en cada caso con un ejemplo práctico. El coste computacional de ambos métodos similar.

2.1 Vectores y ejes en el espacio.

Un vector arbitrario del espacio está caracterizado (como un punto arbitrario del espacio) por tres números reales. Para caracterizar un escalar basta con un número real. Se representa a un vector con tres números y a los escalares con un número.

Un vector del espacio, un punto del espacio y un eje del espacio que pasa por el origen están caracterizados de la misma forma, por 3 números: v = (x, y, z).

|v| es el módulo de v. |v| es un número y se define como: |v| = sqrt(x*x + y*y + z*z). Un vector unitario vu es un vector de longitud uno. El módulo de un vector unitario (su longitud) es siempre uno.

Es fácil calcular un vector unitario a partir de un vector v cualquiera: vu = v/|v|

vu = (x/|v|, y/|v|, z/|v|). Es fácil mostrar que el módulo de un vector unitario así calculado es siempre uno.

Un eje arbitrario del espacio (uno que no pasa por el origen) está caracterizado por dos puntos del espacio (o por dos vectores). Es decir, que hacen falta 6 números para definirlo.

2.2 Producto escalar y producto vectorial.

Producto escalar (Scalar Product of Vectors),el producto escalar de dos vectores que forman entre sí un ángulo theta es un escalar (un número).

Page 25: Proyecto - 148.206.53.231

Proyecto Terminal

24

|A| es el módulo de A. |A| es un número y se define como: |A| = sqrt(Ax*Ax + Ay*Ay + Az*Az) A·B = |A|*|B|*cos(theta) A·B = Ax*Bx + Ay*By + Az*Bz Producto vectorial (Vector cross product),el producto vectorial de dos vectores es un vector (tres números) perpendicular al plano que forman los dos vectores originales. |A cross B| = |A|*|B|*sin(theta) A cross B = (AyBz - AzBy)*i - (AxBz - AzBx)*j + (AxBy - AyBx)*k Donde i, j y k son tres vectores unitarios mutuamente perpendiculares que van en la dirección de los ejes x, y, z respectivamente.

2.3 Giro de un punto arbitrario del espacio alrededor de un eje arbitrario del espacio mediante productos escalar y vectorial.

Dados un punto arbitrario del espacio "P", un eje arbitrario del espacio "AB" y un ángulo "theta". Si queremos girar el punto "P" "theta" radianes alrededor del vector unitario "n" que pasa por el origen y es paralelo al eje "AB", la fórmula que se utiliza para conseguirlo es:

P' = (n·P)*n + cos(theta)*[P - (n·P)*n] +- sin(theta)*(n cross P) (2.1)

(El símbolo +- antes de sin(a) es debido a que el punto "P" puede girar en dos direcciones diferentes). Si lo que queremos es girar el punto "P" "theta" radianes alrededor del propio eje "AB" y no respecto a un eje paralelo a "AB" que pase por el origen (siendo "n" el vector unitario que pasa por el origen y es paralelo a "AB"), la fórmula es: P' = A + f(P - A), donde: f(P) = (n·P)*n + cos(theta)*[P - (n·P)*n] +- sin(theta)*(n cross P), es decir: P' = A + [n·(P - A)]*n + cos(theta)*[(P - A) - [n·(P - A)]*n] +- sin(theta)*[n cross (P - A)] (2.2)

Esta fórmula es más general que la 1 porque sirve para girar alrededor de cualquier eje del espacio, incluso alrededor de uno que no pase por el origen.

Ejemplo práctico: Sea P = (3, 4, 5) un punto arbitrario del espacio que queremos girar theta = pi/8 radianes respecto al eje AB dado por los puntos A = (9, 2, 6) y B = (7, 0, 1) Averiguar P' mediante productos escalares y vectoriales [formula 2.2]

Solución: (P - A) = (3, 4, 5) - (9, 2, 6) = (-6, 2, -1) AB = ((7 - 9), (0 - 2), (1 - 6)) = (-2, -2, -5) |AB| = sqrt [(-2)^2 + (-2)^2 + (-5)^2] = 5.744562647

Page 26: Proyecto - 148.206.53.231

Proyecto Terminal

25

n = AB/|AB| = (-2, -2, -5) / 5.744562647 = (-0.348155311, -0.348155311, -0.870388279) sin(theta) = 0,382683432 cos(theta) = 0,923879532

y, aplicando la fórmula 2.2:

P' = A + [n·(P - A)]*n + cos(theta)*[(P - A) - [n·(P - A)]*n] +- sin(theta)*[n cross (P - A)]

P' = (9, 2, 6) + [(-0.348155311, -0.348155311, -0.870388279)·(-6, 2, -1)]*(-0.348155311, -0.348155311, -0.870388279) + cos(theta)*[(-6, 2, -1) - [(-0.348155311, -0.348155311, -0.870388279)·(-6, 2, -1)]*(-0.348155311, -0.348155311, -0.870388279)] +- sin(theta)*[(-0.348155311, -0.348155311, -0.870388279) cross (-6, 2, -1)]

P'1 = (4.19614872, 5.65305114, 3.86032006)

P'2 = (2.59734948, 1.92251959, 5.99205237)

dependiendo de si aplicamos el signo + o el - en la fórmula, es decir, depende de si el punto P ha girado pi/8 radianes en un sentido o en el otro.

2.4 Definición de un cuaternio.

Un cuaternio es un conjunto de cuatro números. Un ejemplo de cuaternio puede ser: q = (w, x, y, z) o bien: q = w + x*i + y*j + z*k, también se puede expresar como un escalar más un vector, por ejemplo, dado el escalar: w y el vector: v = (x*i + y*j + z*k) el cuaternio resultante es: q = w + v que, a veces, también se escribe así: q = (w, v) o así: q = (w, x, y, z).

2.5 Multiplicación de cuaternios.

Los cuaternios se multiplican de acuerdo con las siguientes reglas:

-1 = i*i = j*j = k*k = i*j*k y i*j = -j*i = k j*k = -k*j = i k*i = -i*k = j

El producto de dos cuaternios:

q1 = w1 + x1*i + y1*j + z1*k y q2 = w2 + x2*i + y2*j + z2*k es, de acuerdo con esas reglas:

q1*q2 = (w1w2 - x1x2 - y1y2 -z1z2) + (w1x2 + x1w2 + y1z2 - z1y2)*i

Page 27: Proyecto - 148.206.53.231

Proyecto Terminal

26

+ (w1y2 - x1z2 + y1w2 + z1x2)*j + (w1z2 + x1y2 - y1x2 + z1w2)*k

|q| es el módulo de q. Es un número y se define de forma similar a como se define el módulo de un vector: |q| = sqrt(w*w + x*x + y*y + z*z). Dado un cuaternio cualquiera, por ejemplo: q = w + x*i + y*j + z*k, existe un cuaternio unitario qu tal que: qu = w/|q| + (x/|q|)*i + (y/|q|)*j + (z/|q|)*k (también de forma similar a como se define un vector unitario). El módulo de un cuaternio unitario así definido es siempre uno, como se demuestra fácilmente:

|qu| = sqrt[w*w/(w*w + x*x + y*y + z*z) + x*x/(w*w + x*x + y*y + z*z) + y*y/(w*w + x*x + y*y + z*z) + z*z/(w*w + x*x + y*y + z*z)]= sqrt[(w*w + x*x + y*y + z*z)/(w*w + x*x + y*y + z*z)]= 1.

2.6 El conjugado de un cuaternio.

El conjugado de un número complejo (a+b*i) es (a-b*i), el conjugado de un cuaternio q = w + x*i + y*j + z*k es q' donde q' = w - x*i - y*j - z*k. El producto de un número complejo por su conjugado es: (a+b*i) (a-b*i)=a*a+b*b.

Por lo tanto el producto de un cuaternio por su conjugado de acuerdo con sus reglas de multiplicación es:

q*q' = (w + x*i + y*j + z*k)*(w - x*i - y*j - z*k) = w*w - w*x*i - w*y*j - w*z*k + w*x*i + x*x - x*y*k + x*z*j +w*y*j + x*y*k + y*y - y*z*i +w*z*k - x*z*j + y*z*i + z*z= w*w + x*x + y*y + z*z.

Vemos que el producto de un cuaternio por su conjugado es un número, y que este número es el módulo del cuaternio al cuadrado:

q*q' = |q|*|q| = w*w + x*x + y*y + z*z.

Si operamos con cuaternios unitarios qu, es claro que:

qu*qu' = |qu|*|qu| = 1.

Pero sabemos que también qu/qu es igual a uno, así que:

qu' = 1/qu (también se suele denotar 1/qu como qu-1) es decir, que el conjugado de un cuaternio unitario es también su inverso. O de otra forma, si qu es un cuaternio unitario:

qu = w + x*i + y*j + z*k

entonces:

1/qu = qu-1 es igual a qu' = w - x*i - y*j - z*k

El inverso de un cuaternio unitario es igual a su conjugado.

Page 28: Proyecto - 148.206.53.231

Proyecto Terminal

27

2.7 Giro de un punto arbitrario del espacio alrededor de un eje arbitrario del espacio mediante cuaternios.

Representar un punto (o un vector, o un eje que pasa por el origen) del espacio en forma de cuaternio es muy fácil, dado el vector: v = (x, y, z) el cuaternio que le corresponde es: q = (0, x, y, z) es decir, un cuaternio que contiene al vector, pero cuya magnitud w es igual a 0.

Un cuaternio construido como veremos a continuación, de alguna manera, representa la rotación de un punto cualquiera alrededor de un eje del espacio arbitrario. Consideremos un eje del espacio que pasa por el origen (o lo que es lo mismo, un vector): v = (x, y, z) y consideremos también un punto arbitrario del espacio P que queremos girar "theta" radianes alrededor de ese eje: P = (x0, y0, z0).

Ahora generemos un cuaternio unitario a partir del eje y del ángulo de esta manera:

q = qw + qx*i + qy*j + qz*k donde:

qw = cos(theta/2)

qx = +-sin(theta/2)*x/|v|

qy = +-sin(theta/2)*y/|v|

qz = +-sin(theta/2)*z/|v| es decir:

q = (cos(theta/2), +-sin(theta/2)*v/|v|)

Es muy fácil mostrar que un cuaternio así generado es unitario, este cuaternio generado a partir del eje (o vector) v y del ángulo theta, obtenemos el siguiente resultado:

P' = q*(0, P)*q-1 ( 2.3)

Es decir, que el punto P una vez rotado, esto es P', viene dado por este simple producto de cuaternios. Esto se podría hacer también con cuaternios q no unitarios pero, puesto que hay que elegir, y puesto que es muy fácil calcular la inversa de un cuaternio unitario, es mejor hacerlo con unitarios.

Es factible pensar que Hamilton tuviera en cuenta (y buscase) éstas y otras sorprendentes propiedades de los cuaternios cuando los descubrió en 1843, a la edad de 38 años.

El producto citado representa la rotación de P alrededor de un eje que pasa por el origen. Como antes, si lo que queremos es girar el punto "P" "theta" radianes alrededor de un eje "AB" y no respecto a un eje paralelo a "AB" que pase por el origen, la fórmula es: P' = A + f(P - A), donde: f(P) = q*(0, P)*q-1 es decir: P' = A + q*(0, P - A)*q-1 (2.4)

Page 29: Proyecto - 148.206.53.231

Proyecto Terminal

28

Esta fórmula es más general que la 3 porque sirve para girar cualquier punto alrededor de cualquier eje del espacio, incluso alrededor de uno que no pase por el origen. Repítamos el mismo ejemplo de antes (pero ahora lo resolveremos con cuaternios):

Ejemplo práctico: Sea P = (3, 4, 5) un punto arbitrario del espacio que queremos girar theta = pi/8 radianes respecto al eje AB dado por los puntos A = (9, 2, 6) y B = (7, 0, 1) Averiguar P' mediante cuaternios [formula 2.4]

Solución: v = (B - A) = (7, 0, 1) - (9, 2, 6) = (-2, -2, -5) +-sin(theta/2) = +-0,195090322 cos(theta/2) = 0,98078528 |v| = sqrt (2*2 + 2*2 + 5*5) = 5.744562647 (P - A) = (3, 4, 5) - (9, 2, 6) = (-6, 2, -1) q = (0.98078528, +-0.195090322*(-2)/5.744562647, +-0.195090322*(-2)/5.744562647, +-0.195090322*(-5)/5.744562647) q = (0.98078528, -+0.067921731, -+0.067921731, -+0.169804329) q-1 = (0.98078528, +-0.067921731, +-0.067921731, +-0.169804329) y, aplicando la fórmula 2.4:

P' = A + q*(0, P - A)*q-1

P' = (0, 9*i, 2*j, 6*k) + (0.98078528, -+0.067921731*i, -+0.067921731*j, -+0.169804329*k)*(0, -6*i, 2*j, -1*k)*(0.98078528, +-0.067921731*i, +-0.067921731*j, +-0.169804329*k)

P'1 = (4.19614872, 5.65305114, 3.86032006)

P'2 = (2.59734948, 1.92251959, 5.99205237)

dependiendo de si tomamos como positivo o negativo el sin(theta/2), es decir, depende de si el punto P ha girado pi/8 radianes en un sentido o en el otro.

A continuación se presentan los códigos hechos en matlab, para girar un punto arbitrario del espacio alrededor de un eje arbitrario del espacio mediante cuaternios. Son varias versiones, la diferencia entre los códigos es la manera de presentar la rotación; se presenta el punto (mediante la introducción de sus coordenadas) que se quiere rotar y se dibuja la trayectoria hecha por la rotación, se presenta el punto que se quiere rotar y aparece en las nuevas coordenadas después de haber rotado sin dibujar la trayectoria, se presenta el punto que se quiere rotar y aparece y desaparece a medida que avanza en la rotación deseada.

Para correr los programas en matlab, es necesario tener los archivo (el código) en el work space donde se esta trabajando.

Page 30: Proyecto - 148.206.53.231

Proyecto Terminal

29

2.8 Programas Cuaternios.

%Programa principal que rota un punto alrededor de un eje arbitrario%utilizando cuaterniones

%P=(Xo,Yo,Zo)

%q=qw+qxi+qyj+qzk

%qw=cos(teta/2)

%qx=sen(teta/2)*x/vmod

%qy=sen(teta/2)*y/vmod

%qz=sen(teta/2)*z/vmod

punto_rotar=input('Introduzca las coordenadas del punto a rotar [x y z] :');

a=input('Introduzca las cordenadas del punto inicial del vector [x y z] :');

b=input('Introduzca las cordenadas del punto final del vector [x y z] :');

grados=input('Introduzca los grados º de rotacion del punto :');

%conversion de grados a radianes

teta=grados*(pi/180);

%calculo de la magnitud del vetor

vector=b-a;

seno=sin(teta/2);

coseno=cos(teta/2);

vmod=sqrt(vector(1)*vector(1)+vector(2)*vector(2)+vector(3)*vector(3));

p_men_a=punto_rotar-a;

%q(i) elementos del cuaternio

q(1)=coseno;

q(2)=(seno*(vector(1)/vmod));

q(3)=(seno*(vector(2)/vmod));

q(4)=(seno*(vector(3)/vmod));

Page 31: Proyecto - 148.206.53.231

Proyecto Terminal

30

% q' conjugado del cuaternio

q_conjugado=[coseno -q(2) -q(3) -q(4)];

cuaternio=[0 p_men_a];

A=[0 a];

aux=producto_cuaternios(q, cuaternio);

aux1=producto_cuaternios(aux, q_conjugado);

p=A+aux1;

%P' = A + q*(0, P - A)*q-1 formula para rotar un punto

%Puntos que generan al vector

s1=[a(1) b(1)];

s2=[a(2) b(2)];

s3=[a(3) b(3)];

plot3(s1,s2,s3,'g')

xlabel('eje x');

ylabel('eje y');

zlabel('eje z');

hold on

plot3(punto_rotar(1),punto_rotar(2),punto_rotar(3),'o') %PUNTO A ROTAR

plot3(p(2),p(3),p(4),'*') %PUNTO ROTADO

hold off

%clear all %Programa principal que rota un punto alrededor de un eje arbitrario

%utilizando cuaterniones

%P=(Xo,Yo,Zo)

%q=qw+qxi+qyj+qzk

%qw=cos(teta/2)

Page 32: Proyecto - 148.206.53.231

Proyecto Terminal

31

%qx=sen(teta/2)*x/vmod

%qy=sen(teta/2)*y/vmod

%qz=sen(teta/2)*z/vmod

punto_rotar=input('Introduzca las coordenadas del punto a rotar [x y z] :');

a=input('Introduzca las cordenadas del punto inicial del vector [x y z] :');

b=input('Introduzca las cordenadas del punto final del vector [x y z] :');

grados=input('Introduzca los grados º de rotacion del punto :');

for i=1:grados,

%conversion de grados a radianes

teta=i*(pi/180);

%calculo de la magnitud del vetor

vector=b-a;

seno=sin(teta/2);

coseno=cos(teta/2);

vmod=sqrt(vector(1)*vector(1)+vector(2)*vector(2)+vector(3)*vector(3)); p_men_a=punto_rotar-a;

%q(i) elementos del cuaternio

q(1)=coseno;

q(2)=(seno*(vector(1)/vmod));

q(3)=(seno*(vector(2)/vmod));

q(4)=(seno*(vector(3)/vmod));

% q' conjugado del cuaternio

q_conjugado=[coseno -q(2) -q(3) -q(4)];

cuaternio=[0 p_men_a];

A=[0 a];

aux=producto_cuaternios(q, cuaternio);

Page 33: Proyecto - 148.206.53.231

Proyecto Terminal

32

aux1=producto_cuaternios(aux, q_conjugado);

p=A+aux1;

%P' = A + q*(0, P - A)*q-1 formula para rotar un punto

%Puntos que generan al vector

s1=[a(1) b(1)];

s2=[a(2) b(2)];

s3=[a(3) b(3)];

plot3(s1,s2,s3,'g')

grid on

xlabel('eje x');

ylabel('eje y');

zlabel('eje z');

hold on

plot3(punto_rotar(1),punto_rotar(2),punto_rotar(3),'o') %PUNTO A ROTAR

plot3(p(2),p(3),p(4),'*') %PUNTO ROTADO

pause(1)

end;

hold off

%clear all

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%Programa principal que rota un punto alrededor de un eje arbitrario

%utilizando cuaterniones

%P=(Xo,Yo,Zo)

%q=qw+qxi+qyj+qzk

%qw=cos(teta/2)

Page 34: Proyecto - 148.206.53.231

Proyecto Terminal

33

%qx=sen(teta/2)*x/vmod

%qy=sen(teta/2)*y/vmod

%qz=sen(teta/2)*z/vmod

punto_rotar=input('Introduzca las coordenadas del punto a rotar [x y z] :');

a=input('Introduzca las cordenadas del punto inicial del vector [x y z] :');

b=input('Introduzca las cordenadas del punto final del vector [x y z] :');

grados=input('Introduzca los grados º de rotacion del punto :');

for i=1:grados,

%conversion de grados a radianes

teta=i*(pi/180);

%calculo de la magnitud del vetor

vector=b-a;

seno=sin(teta/2);

coseno=cos(teta/2);

vmod=sqrt(vector(1)*vector(1)+vector(2)*vector(2)+vector(3)*vector(3));

p_men_a=punto_rotar-a;

%q(i) elementos del cuaternio

q(1)=coseno;

q(2)=(seno*(vector(1)/vmod));

q(3)=(seno*(vector(2)/vmod));

q(4)=(seno*(vector(3)/vmod));

% q' conjugado del cuaternio

q_conjugado=[coseno -q(2) -q(3) -q(4)];

cuaternio=[0 p_men_a];

A=[0 a];

Page 35: Proyecto - 148.206.53.231

Proyecto Terminal

34

aux=producto_cuaternios(q, cuaternio);

aux1=producto_cuaternios(aux, q_conjugado);

p=A+aux1;

%P' = A + q*(0, P - A)*q-1 formula para rotar un punto

%Puntos que generan al vector

s1=[a(1) b(1)];

s2=[a(2) b(2)];

s3=[a(3) b(3)];

plot3(s1,s2,s3,'g')

grid on

xlabel('eje x');

ylabel('eje y');

zlabel('eje z');

hold on

plot3(punto_rotar(1),punto_rotar(2),punto_rotar(3),'o') %PUNTO A ROTAR

plot3(p(2),p(3),p(4),'*') %PUNTO ROTADO

pause(1)

end;

hold off

%clear all

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%Funcion encargada de multiplicar dor cuaterniones

%dando como resultado otro cuaternion

%El producto de dos cuaternios:

Page 36: Proyecto - 148.206.53.231

Proyecto Terminal

35

%q1 = w1 + x1*i + y1*j + z1*k

%y

%q2 = w2 + x2*i + y2*j + z2*k

%es, de acuerdo con esas reglas:

%q1*q2 = (w1w2 - x1x2 - y1y2 -z1z2)

% + (w1x2 + x1w2 + y1z2 - z1y2)*i

% + (w1y2 - x1z2 + y1w2 + z1x2)*j

% + (w1z2 + x1y2 - y1x2 + z1w2)*k

function q3=producto_cuaternios(q1,q2)

w=(q1(1)*q2(1)-(q1(2)*q2(2))-(q1(3)*q2(3))-(q1(4)*q2(4)));

x=((q1(1)*q2(2))+(q1(2)*q2(1))+(q1(3)*q2(4))-(q1(4)*q2(3)));

y=((q1(1)*q2(3))-(q1(2)*q2(4))+(q1(3)*q2(1))+(q1(4)*q2(2)));

z=((q1(1)*q2(4))+(q1(2)*q2(3))-(q1(3)*q2(2))+(q1(4)*q2(1)));

q3=[w x y z];

Page 37: Proyecto - 148.206.53.231

Proyecto Terminal

36

* punto a rotar.

º punto rotado.

\ eje de rotación.

Page 38: Proyecto - 148.206.53.231

Proyecto Terminal

37

La línea azul es la trayectoria descrita por el punto rotado ciertos grados, sobre el eje de color verde.

Page 39: Proyecto - 148.206.53.231

Proyecto Terminal

38

CAPITULO 3

Page 40: Proyecto - 148.206.53.231

Proyecto Terminal

39

3 PROYECCIONES. 3. Introducción. Para comprender mejor lo que son las proyecciones de puntos de dos imágenes en 2D tomadas del mismo objeto en 3D (de un burbuja) pero en diferentes ángulos (eje x, y; en el espacio 3D), es decir en el espacio con tres coordenadas x, y, z que se muestra en la figura 3.1, vamos a ver algunos conceptos necesarios.

Figura 3.1 burbuja vista en 3 dimensiones. Si se toma una imagen desde el eje x de la burbuja lo que se vería en la imagen 2D se muestra en la figura 3.2a.

Figura 3.2a Si se toma una imagen desde el eje y de la burbuja lo que se vería en la imagen 2D se muestra en la figura 3.2b.

Figura 3.2b

Page 41: Proyecto - 148.206.53.231

Proyecto Terminal

40

Por lo tanto se tienen 5 puntos en cada imagen el punto superior, inferior, derecho, izquierdo y el centro. Si proyectáramos esos 5 puntos de las dos imágenes a la vez, podríamos reconstituir la burbuja en 3D. En la figura 3.3 se muestra como se proyectaría un solo punto de los dos planos que contienen a las imágenes del mismo objeto pero en diferentes ángulos, el punto tomado de un plano tiene las mismas coordenadas en el otro plano, con el fin de que al momento de hacer la proyección se intersecten en un punto x, si esto no sucediera y la línea de proyección de un plano quedará por encima o por debajo de la otra línea de proyección se tomaría como punto de intersección a la distancia entre las dos líneas entre dos, es decir la mitad de la distancia entre las dos líneas.

Figura 3.3 3.1 Álgebra Grassman-Cayley. 3.1.1 El espacio euclidiano R³ como espacio projectivo P(R 4 ). El espacio euclideano 3R se compone de 3 vectores de base (γ1,γ2,γ3). El álgebra geométrica de este espacio esta definido por 8 elementos básicos. -un escalar. -3 vectores (γ1,γ2,γ3 ). -3 bivectores (γ1γ2,γ1γ3,γ2γ3). -y un pseudo escalar (γ1γ2γ3)=I. El álgebra de Grassman-Cayley es el álgebra geométrica definida por el espacio proyectivo P(R 3 ). Esta álgebra esta compuesta por 16 elementos básicos. -4 vectores (los vectores de base P(R 3 )): (σ1,σ2,σ3,σ4) -6 bivectores (σ1σ2,σ1σ3,σ1σ4,σ2σ3,σ2σ4,σ3σ4). -4 trivectores (σ1σ2 σ3,σ1σ2σ4,σ1σ3σ4,σ2σ3σ4). -1 pseudoescalar I=( σ1σ2σ3σ4). La relación entre estas dos álgebras esta definida escogiendo una dirección privilegiada en P(R 3 ), σ4 en el caso de la visión 3D tenemos que:

Page 42: Proyecto - 148.206.53.231

Proyecto Terminal

41

.γ 1 = σ1σ4 γ 2 = σ2σ4 γ 3 = σ3σ4 El producto σ1σ4 es el producto definido más lejos. Cierta relación requiere utilizar las coordenadas homogéneas de R 3 a P(R 3 ). 3.1.2 Coordenadas homogéneas. Para el fin de comprender bien la relación que existe entre R 3 y el espacio proyectivo P(R 3 ) es necesario definir la noción de coordenadas homogéneas. Para la representación de un punto A en R 3 como una representación P(R 3 ) es suficiente agregar una cuarta dimensión a un vector posición A (Agregando el símbolo 1 para representar esa nueva dimensión) de esta manera podemos representar las coordenadas homogéneas

A 3R =⎟⎟⎟

⎜⎜⎜

cba

⇒ A RP )( 3 =⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

1cba

He inversamente pasamos P(R 3 ) a R 3 , se necesita hacer una división de las 3 primeras coordenadas entre la 4ta coordenada.

A RP )( 3 =⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

dcba

⇒ A 3R =⎟⎟⎟

⎜⎜⎜

dcdbda

///

La utilización de las coordenadas homogéneas (en el espacio proyectivo) da por efecto la linealizacion de algunas transformaciones no lineales y de simplificar la representación de un desplazamiento. 3.2 Operadores de Grassman Cayley. Producto geométrico. Vamos a definir los diferentes operadores que son necesarios para realizar el producto geométrico entre dos elementos del espacio. .xy=x.y+x∧ y. Si descomponemos el producto geométrico en dos partes, la primera simétrica (producto interno) y la segunda antisimetrica (producto externo). El producto interno en R 3 como en P(R 3 ) es el mismo que el producto escalar usual, el producto externo en R 3 es como el producto vectorial, vamos a ver después como fue implementado el producto externo en el espacio proyectivo.

Page 43: Proyecto - 148.206.53.231

Proyecto Terminal

42

3.2.1 Operadores Meet y Join. El operador Join es simplemente el producto externo (denotado por ∧ ) a partir de 2 elementos del álgebra de orden r y s el operador crea un elemento de orden r+s, podemos interpretar el join de dos elementos como el elemento común de orden mínimo donde se encuentran contenidos estos elementos. Así el join de dos puntos es la recta que pasa por los 2 puntos, el join de 3 puntos (una línea recta con un punto) es un plano pasando por esos 3 puntos. Si la suma del orden de los elementos r+s sobrepasa la dimensión del espacio, el join dará siempre un pseudo escalar por que es el mas grande elemento del álgebra. Este aspecto no esta implementado en el proyecto dada que solamente utilizamos el join máximo entre una línea y un punto. El join entre un punto y una línea es un plano, si el punto es elemento de la línea el resultado al aplicar el join es cero, esto sirve cuando un elemento esta contenido en otro elemento entendiendo como el elemento un punto o una línea. El meet denotado por ∨ es simplemente la intersección entre dos elementos concernientes, así el meet de dos líneas rectas es un punto (si este existe), el meet de una línea recta con un plano es un punto o una línea, el meet de dos planos es una línea. 3.3 El principio de dualidad. La noción de dualidad es muy importante porque permite simplificar grandemente los cálculos de la implementación de los operadores meet y join notablemente. Gracias ala dualidad se pueden hacer relaciones entre los dos operandos meet y join. El dual de un elemento A de orden r será *A y tendrá el orden n-r y será perpendicular a A. Así P(R 3 ) que es de 4 dimensiones, el dual de un plano (he inversamente), el dual de una línea recta es una línea recta. Con esta definición de dualidad podemos tener las relaciones siguientes: A, B son dos elementos cualesquiera, L una línea, P un plano, a un punto. 1... (A∨B) * =A * ∧B * 2... (L∧ a) * =L * .a 3... (P∧ a) * =P * a 4... L∨ P=L.P * 3.4 Comentarios.

Sea X un vector de P(R 3 ) tenemos que X 4σ = X.σ4+X ∧ σ4=X 4 (1+ 4

4X

X σ∧

).

Page 44: Proyecto - 148.206.53.231

Proyecto Terminal

43

En similitud esta expresión 4

4X

X σ∧

puede verse como la representación x en R 3 del vector X en relación de las coordenadas homogéneas. A fin de entender bien el significado de las operaciones en la utilización del álgebra de Grassman –Cayley se puede ver la representación de una línea en P(R 3 ) y su equivalente en R 3 . Una línea es el resultado del producto externo (join) de dos puntos: L=A∧ B. Si utilizamos la relación * para pasar a L’, es equivalente en R 3 de la forma siguiente:

L’=(n x σ1+ n y σ2+ n x σ3)+ (m x σ1 σ1+m y σ1 σ3+ m y σ2 σ3) (z) Esta suma mixta representa la asociación de un vector y un bivector recordando que un bivector en R 3 esta representado por un producto vectorial (que es un plano orientado) esto nos permite la relación entre las coordenadas de Pluker de una línea. En efecto para determinar una posición de una línea en el espacio se necesita un vector posición y un punto de aplicación o bien un vector director y el momento como en este caso (que es un producto vectorial) de la línea al origen Entonces (z) es suficiente para determinar completamente la posición de una línea , la relación entre el join de dos puntos en P(R 3 ) y las coordenadas de Plucker va a servir de base para la implementación del álgebra como se explica mas adelante 3.5 Representación de los datos. Un punto será representado por un vector columna4*1. A fin de encontrar directamente la correspondencia de las coordenadas homogéneas, el dual de un punto El dual del punto que representa un plano, es un vector renglón 1*4, y una línea esta representada por una matriz 4*4. 3.6 Definición del operador de dualidad. Join de 2 puntos La implementación se basa en la definición del join de dos puntos, entonces es la representación de una línea. Para obtener las coordenadas de Plucker de una línea que pasa por 2 puntos A y B es suficiente calcular el vector director de esos 2 puntos y el producto vectorial de los vectores A y B para obtener el momento. Ahora se definen el join de 2 puntos de la forma siguiente:

Page 45: Proyecto - 148.206.53.231

Proyecto Terminal

44

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

1321

aaa

∧⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

1321

bbb

=M 4*4 (M ij ) En donde

M ij =det⎜⎜⎝

⎛ajai

⎟⎟⎠

⎞bjbi

Y obtenemos una matriz de la forma

M=⎜⎜⎜⎜⎜

fm

n0

gl

n

−−0

⎟⎟⎟⎟⎟

0hgf

Así se puede ver 2 cosas. La Matriz es antisimetrica ( Se conserva las propiedades de producto externo ) y también el vector director y el momento de la línea A y B están representados respectivamente por (f,g,h) y ( l,m,n) de la matriz M Estas dos observaciones justifican la elección de la representación de una línea por una matriz 4*4 y la implementación del join de dos puntos Ay B. Dualidad Antes de continuar con la implementación de los operadores es necesario definir las operaciones de dualidad. El dual de un plano es un punto, entonces es suficiente de tomar la transpuesta de un vector renglón para tener el vector columna que representa el punto dual ( e inversamente ), el dual de un plano representa el vector perpendicular a ese plano ( entonces un punto en P(R 3 ) ).

P=(a,b,c,d) ; P * = P t =⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

dcba

El dual de una línea se obtiene invirtiendo el vector director y el momento. Así

Si M=⎜⎜⎜⎜⎜

fm

n0

gl

n

−−0

⎟⎟⎟⎟⎟

0hgf

entonces ⎜⎜⎜⎜⎜

lg

h0

mf

h

−−0

n

fg

0

⎟⎟⎟⎟⎟

0nml

Page 46: Proyecto - 148.206.53.231

Proyecto Terminal

45

Definición de otras operaciones. A partir de aquí las otras operaciones vienen de las relaciones entre dualidad y los operadores. -Join de un punto y de una línea L. Según (2) es suficiente tomar el dual de L * .a que es un simple producto vectorial de una matriz por un vector columna. -Meet de dos planos P1 y P2. De la ecuación (1) que es el dual del join de 2 puntos duales P1∨ P2= (P1 * ∧P2 * ) * -Meet de un plano P y de una línea L. De la ecuación (4) L∨ P=L.P * Resta definir el meet de dos líneas pero el problema de esto es que hipotéticamente dos líneas se cruzan, pero cuando se hacen los cálculos en la computadora no se cruzan debido a problemas de redondeo, para solucionar esto no se debe buscar el punto exacto de las coordenadas de las intersecciones, solo hay que aproximar el valor de la intersección. Un buen método es encontrar la distancia mínima del segmento que separa a las 2 líneas y encontrando el punto medio. La dirección de este segmento esta dado por el producto vectorial de los 2 vectores directores de las 2 líneas. El vector resultante aplicado en un punto de una de las 2 líneas va a crear u plano que tiene la dirección de la línea al punto correspondiente del segmento de la distancia minimal. Así como es fácil de crear un plano gracias al operador join y calcular la intersección de una línea gracias al meet y también es fácil de implementar el meet de 2 líneas. La función meet_droites esta basada sobre el principio antes descrito. Para que todo lo descrito anteriormente quede claro, vamos a desarrollar un ejemplo matemático donde se utilizan todos los conceptos citados previamente.

Page 47: Proyecto - 148.206.53.231

Proyecto Terminal

46

Donde el punto A tiene las coordenadas: A = [0 0 1] por lo tanto para pasar al punto A ha coordenadas homogéneas tenemos: A’ = [0 0 1 1] El foco 2 tiene coordenadas: f2 = [10 0 0] por lo tanto para pasar el f2 ha coordenadas homogéneas tenemos: f2’ = [10 0 0 1] Para encontrar la línea desde el foco 2 hasta el punto A calculamos: L2=f2’ ^ A’= 10 0 0 0 0 ^ 1 1 1 0 0 10 10 L2= 0 0 0 0 -10 0 0 -1 -10 0 1 0 De donde el momento es tomado de las posiciones 01, 02, 12, es decir: Momento M = [0 10 0] Y el vector director es tomado de las posiciones 04, 14, 24, es decir: Vector director VD = [10 0 -1] Ahora hay que definir 3 puntos del plano P2 en coordenadas homogéneas. y1 = [5 0 0 1], y2 = [5 1 0 1], y3 = [5 1 1 1] Aplicando el operador join para encontrar la línea entre dos puntos del plano P2 tomamos: y1 ^ y2 y obtenemos:

Page 48: Proyecto - 148.206.53.231

Proyecto Terminal

47

0 5 0 0 -5 0 0 -1 y1 ^ y2 = 0 0 0 0 0 1 0 0 De donde el momento M = [0 0 5] y el vector director es VD = [0 -1 0] Intercambiando el momento M y el vector director VD de la siguiente manera: 0 0 1 0 0 0 0 0 -1 0 0 5 = dual 0 -5 0 0 Ahora para crear el plano multiplicamos la matriz sl por el punto restante y3 de la siguiente manera: 0 0 1 0 5 1 0 0 0 0 1 0 -1 0 0 5 1 = 0 0 -5 0 0 1 -5 Dividiendo la cuarta coordenada -5 obtenemos P2=[ -1/5 0 0 1 ] Intersectando el plano P2 con la línea L2 obtenemos: 0 0 10 10 -1/5 10 0 0 0 0 0 0 -10 0 0 -1 0 = A2’= 1 -10 0 1 0 -1 2 Por lo tanto finalmente dividiendo A2’ por su cuarta coordenada obtenemos las coordenadas del punto A2 = [ 5 0 ½ ], que efectivamente esta dentro del plano P2 y es el punto de intersección entre la línea que une al punto A con el plano P2 en el punto A2. El código para llevar acabo todas las operaciones anteriores son las funciones siguientes: 3.7 Código de funciones. function V= coord_homo(P) % crea un vector homogenoe 4*1 asociado a un punto P (3*1)

Page 49: Proyecto - 148.206.53.231

Proyecto Terminal

48

V=[P 1]; function M=join_point(a,b) %calcula la operacion 'join' de dos puntos a y b, el resultado es una matriz de 4*4 %representa la linea entre a y b for i=1:4 for j=1:4 M(i,j)= det ([a(i) b(i) a(j) b(j)]); end end function V=meet_droites(a1,f1,a2,f2) %Funcion que calcula la interseccion de 2 lineas a partir de dos %puntos: fi es el foco L1=join(f1,a1); L2=join(f2,a2); T=(cross([L1(1,4),L1(2,4),L1(3,4)],[L2(1,4),L2(2,4),L2(3,4)])); M1=plan(f1,a1,a1+[T 1]'); M2=plan(f2,a2,a2+[T 1]'); V1=meet(M1,L2) V2=meet(M2,L1) V=(V1+V2)/2; V=V(1:3)/V(4); function M=coord_eucl(V) %regresa el vector en coordenadas euclideanas M en R3 %correspondiente al vector homogeneo V de R4 M=V(1:3)/V(4); function D=dual(P) %regresa el dual D del elemento P

Page 50: Proyecto - 148.206.53.231

Proyecto Terminal

49

if size(P)==[4 1] D=P'; elseif size(P)==[1 4] D=P'; elseif size(P)==[4 4] V=plucker_inv(P); V=[V(4:6) V(1:3)]; D=plucker(V); end function V=join(A,B) %fonction calculant le 'join' des deux elements A et B %on ne calcule ici que le join entre deux points (qui forme une droite) % et entre une droite et un point (qui forme un plan). test=size(A)-size(B); switch test(2) case 0 V=join_point(A,B); case 3 V=dual(dual(A)*B); case -3 V=dual(dual(B)*A); end function M=meet(A,B) %fonction realisant le calcul du 'meet' entre les element A et B %Si A et B sont des plans, la fonction renvoit la matrice correspondant % a la droite a l'intersection des 2 plans %Si A est une droite et B un plan (ou inversemment) la fonction renvoit le %point a l'intersection des 2.

Page 51: Proyecto - 148.206.53.231

Proyecto Terminal

50

test=size(A)-size(B); switch test(1); case 0 M=dual(join(dual(A),dual(B))); case 3 M=A*dual(B); M=M/M(4); case -3 M=B*dual(A); M=M/M(4); end function P=plan(a,b,c) %crea el plano que pasa por los 3 puntos a b c (vector columna 4*1). %regresa un vector linea 1*4 P=join(join(a,b),c); function M=plucker(V) % cree la matrice representant un droite 3D a partir de ses coordonnees de % plucker, un vecteur V(6*1)=(f g h l m n) % (f g h) represente le vecteur directeur % (l m n) represente le moment par rapport a l'origine M=zeros(4); M(1,2)=V(6); M(1,3)=-V(5); M(1,4)=V(1); M(2,1)=-V(6); M(2,3)=V(4); M(2,4)=V(2); M(3,1)=V(5); M(3,2)=-V(4); M(3,4)=V(3);

Page 52: Proyecto - 148.206.53.231

Proyecto Terminal

51

M(4,1)=-V(1); M(4,2)=-V(2); M(4,3)=-V(3); function V = plucker_inv(M) %retourne un vecteur representatnt une droite en coordonnees de plucker a %partir de sa representation matricielle V=[M(1,4) M(2,4) M(3,4) M(2,3) M(3,1) M(1,2)]; function M=plucker(V) % cree la matrice representant un droite 3D a partir de ses coordonnees de % plucker, un vecteur V(6*1)=(f g h l m n) % (f g h) represente le vecteur directeur % (l m n) represente le moment par rapport a l'origine M=zeros(4); M(1,2)=V(6); M(1,3)=-V(5); M(1,4)=V(1); M(2,1)=-V(6); M(2,3)=V(4); M(2,4)=V(2); M(3,1)=V(5); M(3,2)=-V(4); M(3,4)=V(3); M(4,1)=-V(1); M(4,2)=-V(2); M(4,3)=-V(3);

Page 53: Proyecto - 148.206.53.231

Proyecto Terminal

52

CAPITULO 4

Page 54: Proyecto - 148.206.53.231

Proyecto Terminal

53

Capitulo 4. Implementación del álgebra de Grassman-Cayley con Matlab. 4. Álgebra GC. 4.1 El espacio euclidiano R³ como espacio projectivo P(R 4 ). El espacio euclideano 3R se compone de 3 vectores de base (γ1,γ2,γ3). El álgebra geométrica de este espacio esta definido por 8 elementos básicos. -un escalar. -3 vectores (γ1,γ2,γ3 ). -3 bivectores (γ1γ2,γ1γ3,γ2γ3). -y un pseudo escalar (γ1γ2γ3)=I. El álgebra de Grassman-Cayley es el álgebra geométrica definida por el espacio proyectivo P(R 3 ). Esta álgebra esta compuesta por 16 elementos básicos. -4 vectores (los vectores de base P(R 3 )): (σ1,σ2,σ3,σ4) -6 bivectores (σ1σ2,σ1σ3,σ1σ4,σ2σ3,σ2σ4,σ3σ4). -4 trivectores (σ1σ2 σ3,σ1σ2σ4,σ1σ3σ4,σ2σ3σ4). -1 pseudoescalar I=( σ1σ2σ3σ4). La relación entre estas dos álgebras esta definida escogiendo una dirección privilegiada en P(R 3 ), σ4 en el caso de la visión 3D tenemos que: .γ 1 = σ1σ4 γ 2 = σ2σ4 γ 3 = σ3σ4 El producto σ1σ4 es el producto definido más lejos. Cierta relación requiere utilizar las coordenadas homogéneas de R 3 a P(R 3 ). 4.2 Coordenadas homogéneas. Para el fin de comprender bien la relación que existe entre R 3 y el espacio proyectivo P(R 3 ) es necesario definir la noción de coordenadas homogéneas. Para la representación de un punto A en R 3 como una representación P(R 3 ) es suficiente agregar una cuarta dimensión a un vector posición A (Agregando el símbolo 1 para representar esa nueva dimensión) de esta manera podemos representar las coordenadas homogéneas

A 3R =

⎟⎟⎟

⎜⎜⎜

cba

⇒ A RP )( 3=

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

1cba

Page 55: Proyecto - 148.206.53.231

Proyecto Terminal

54

He inversamente pasamos P(R 3 ) a R 3 , se necesita hacer una división de las 3 primeras coordenadas entre la 4ta coordenada.

A RP )( 3=

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

dcba

⇒ A 3R =

⎟⎟⎟

⎜⎜⎜

dcdbda

///

La utilización de las coordenadas homogéneas (en el espacio proyectivo) da por efecto la linealizacion de algunas transformaciones no lineales y de simplificar la representación de un desplazamiento. 4.2.1 Operadores de Grassman Cayley. Producto geométrico. Vamos a definir los diferentes operadores que son necesarios para realizar el producto geométrico entre dos elementos del espacio. xy=x.y+x∧ y. Si descomponemos el producto geométrico en dos partes, la primera simétrica (producto interno) y la segunda antisimetrica (producto externo). El producto interno en R 3 como en P(R 3 ) es el mismo que el producto escalar usual, el producto externo en R 3 es como el producto vectorial, vamos a ver después como fue implementado el producto externo en el espacio proyectivo. Operadores Meet y Join. El operador Join es simplemente el producto externo (denotado por ∧ ) a partir de 2 elementos del álgebra de orden r y s el operador crea un elemento de orden r+s, podemos interpretar el join de dos elementos como el elemento común de orden mínimo donde se encuentran contenidos estos elementos. Así el join de dos puntos es la recta que pasa por los 2 puntos, el join de 3 puntos (una línea recta con un punto) es un plano pasando por esos 3 puntos. Si la suma del orden de los elementos r+s sobrepasa la dimensión del espacio, el join dará siempre un pseudo escalar por que es el mas grande elemento del álgebra. Este aspecto no esta implementado en el proyecto dada que solamente utilizamos el join máximo entre una línea y un punto. El join entre un punto y una línea es un plano, si el punto es elemento de la línea el resultado al aplicar el join es cero, esto sirve cuando un elemento esta contenido en otro elemento entendiendo como el elemento un punto o una línea.

Page 56: Proyecto - 148.206.53.231

Proyecto Terminal

55

El meet denotado por ∨ es simplemente la intersección entre dos elementos concernientes, así el meet de dos líneas rectas es un punto (si este existe), el meet de una línea recta con un plano es un punto o una línea, el meet de dos planos es una línea. 4.2.2 El principio de dualidad. La noción de dualidad es muy importante porque permite simplificar grandemente los cálculos de la implementación de los operadores meet y join notablemente. Gracias ala dualidad se pueden hacer relaciones entre los dos operandos meet y join. El dual de un elemento A de orden r será *A y tendrá el orden n-r y será perpendicular a A. Así P(R 3 ) que es de 4 dimensiones, el dual de un plano (he inversamente), el dual de una línea recta es una línea recta. Con esta definición de dualidad podemos tener las relaciones siguientes: A, B son dos elementos cualesquiera, L una línea, P un plano, a un punto. 1... (A∨B) * =A * ∧ B * 2... (L∧ a) * =L * .a 3... (P∧ a) * =P * a 4... L∨ P=L.P * 4.2.3 Comentarios

Sea X un vector de P(R 3 ) tenemos que X 4σ = X.σ4+X ∧ σ4=X 4 (1+4

4X

X σ∧ ).

En similitud esta expresión 4

4X

X σ∧ puede verse como la representación x en R 3 del

vector X en relación de las coordenadas homogéneas. A fin de entender bien el significado de las operaciones en la utilización del álgebra de Grassman –Cayley se puede ver la representación de una línea en P(R 3 ) y su equivalente en R 3 . Una línea es el resultado del producto externo (join) de dos puntos: L=A∧B. Si utilizamos la relación * para pasar a L’, es equivalente en R 3 de la forma siguiente: L’=(n x σ1+ n y σ2+ n x σ3)+ (m x σ1 σ1+m y σ1 σ3+ m y σ2 σ3) (5) Esta suma mixta representa la asociación de un vector y un bivector recordando que un bivector en R 3 esta representado por un producto vectorial (que es un plano orientado) esto nos permite la relación entre las coordenadas de Pluker de una línea. En efecto para determinar una posición de una línea en el espacio se necesita un vector posición y un punto de aplicación o bien un vector director y el momento como en este caso (que es un producto vectorial) de la línea al origen

Page 57: Proyecto - 148.206.53.231

Proyecto Terminal

56

Entonces (5) es suficiente para determinar completamente la posición de una línea , la relación entre el join de dos puntos en P(R 3 ) y las coordenadas de Plucker va a servir de base para la implementación del álgebra como se explica mas adelante 4.3 Implementación en matlab. 4.3.1 Representacion de los datos. Un punto será representado por un vector columna4*1. A fin de encontrar directamente la correspondencia de las coordenadas homogéneas, el dual de un punto El dual del punto que representa un plano, es un vector renglón 1*4, y una línea esta representada por una matriz 4*4. 4.4 Definición del operador de dualidad. Join de 2 puntos La implementación se basa en la definición del join de dos puntos, entonces es la representación de una línea. Para obtener las coordenadas de Plucker de una línea que pasa por 2 puntos A y B es suficiente calcular el vector director de esos 2 puntos y el producto vectorial de los vectores A y B para obtener el momento. Ahora se definen el join de 2 puntos de la forma siguiente:

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

1321

aaa

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

1321

bbb

=M 4*4 (M ij )

En donde

M ij =det ⎜⎜⎝

⎛ajai

⎟⎟⎠

⎞bjbi

Y obtenemos una matriz de la forma

M=

⎜⎜⎜⎜⎜

fm

n0

gl

n

−−0

h

lm

0

⎟⎟⎟⎟⎟

0hgf

Así se puede ver 2 cosas. La Matriz es antisimetrica ( Se conserva las propiedades de producto externo ) y también el vector director y el momento de la línea A y B están representados respectivamente por (f,g,h) y ( l,m,n) de la matriz M

Page 58: Proyecto - 148.206.53.231

Proyecto Terminal

57

Estas dos observaciones justifican la elección de la representación de una línea por una matriz 4*4 y la implementación del join de dos puntos Ay B. Dualidad Antes de continuar con la implementación de los operadores es necesario definir las operaciones de dualidad. El dual de un plano es un punto, entonces es suficiente de tomar la transpuesta de un vector renglón para tener el vector columna que representa el punto dual ( e inversamente ), el dual de un plano representa el vector perpendicular a ese plano ( entonces un punto en P(R 3 ) ).

P=(a,b,c,d) ; P * = P t =

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

dcba

El dual de una línea se obtiene invirtiendo el vector director y el momento. Así

Si M=

⎜⎜⎜⎜⎜

fm

n0

gl

n

−−0

h

lm

0

⎟⎟⎟⎟⎟

0hgf

entonces

⎜⎜⎜⎜⎜

lg

h0

mf

h

−−0

n

fg

0

⎟⎟⎟⎟⎟

0nml

Definición de otras operaciones. A partir de aquí las otras operaciones vienen de las relaciones entre dualidad y los operadores. -Join de u punto y de una línea L. Según (2) Es suficiente tomar el dual de L * .a que es un simple producto vectorial de una matriz por un vector columna. -Meet de dos planos P1 y P2. De la ecuación (1) que es el dual del join de 2 puntos duales P1∨ P2= (P1 * ∧P2 * ) * -Meet de un plano P y de una línea L. De la ecuación (4) L∨ P=L.P *

Page 59: Proyecto - 148.206.53.231

Proyecto Terminal

58

Resta definir el meet de dos líneas pero el problema de esto es que hipotéticamente dos líneas se crucen pero cuando se hacen los cálculos en la computadora no se crucen debido a problemas de redondeo, para solucionar esto no se debe buscar el punto exacto de las coordenadas de las intersecciones, solo hay que aproximar el valor de la intersección. Un buen método es encontrar la distancia mínima del segmento que separa a las 2 líneas y encontrando el punto medio. La dirección de este segmento esta dado por el producto vectorial de los 2 vectores directores de las 2 líneas. El vector resultante aplicado en un punto de una de las 2 líneas va a crear u plano que tiene la dirección de la línea al punto correspondiente del segmento de la distancia minimal. Así como es fácil de crear un plano gracias al operador join y calcular la intersección de una línea gracias al meet y también es fácil de implementar el meet de 2 líneas. La función meet_droites esta basada sobre el principio antes descrito. Este filtro nos permite guardar solo los contrastes de la imagen (altas frecuencias).

Page 60: Proyecto - 148.206.53.231

Proyecto Terminal

59

CAPITULO 5

Page 61: Proyecto - 148.206.53.231

Proyecto Terminal

60

Capitulo 5 Reconstitución en 3D de la trayectoria de la burbuja. 5. Introducción. Nosotros disponemos de 2 videos de extensión .avi, de la burbuja en el líquido desde 2 ángulos diferentes, eso nos permite reconstituirla completamente la trayectoria de la burbuja en 3 dimensiones. A fin de proceder a esa reconstrucción hay que buscar antes las coordenadas de la burbuja en la imagen, lo que significa tratar cada imagen (borrar los parásitos) definir una búsqueda eficaz y fiable. 5.1 Tratamiento de los videos. 5.1.1 Tratamiento de los datos. Los videos originales son de extensión .avi, a fin de poder manipularlas con matlab, vamos a utilizar la función avi2movie (“archivo.avi”) que crea un objeto de tipo movie. En nuestro caso el video esta compuesto de 51 frame, que podemos manipular como una matriz gracias ala función IM=frame2im (M(i)). 5.2 Tratamiento de las imágenes. Sobre los videos se puede ver que el fondo tiene un poco de ruido y no mucho contraste y la burbuja aparece de un color oscuro. Con la utilización del filtro nos permite distinguir la bola y el fondo. El problema del filtro es que perdemos la parte transparente de la bola (la bola originalmente tiene un efecto de luz, la cual se distingue a través vez de la parte translucida de la bola.). Las consecuencias de esta serán discutidas mas adelante. Utilizamos un filtro discreto sobre cada imagen, que consiste en poner la imagen en un filtro el cual conocemos el grado del polinomio de corte y la frecuencia de corte. Utilizamos la frecuencia de corte, escogemos frecuencias que serán guardadas. Cuando la frecuencia es baja se guardan mas detalles de la imagen. Aumentar el grado del polinomio de corte nos permite tener un corte ideal ala frecuencia escogida. Tomamos un polinomio de corte de grado menos alto es como autorizar algunas frecuencias bajas. Busquemos los valores con la experiencia y no con la teoría para obtener un buen contraste. Los mejores valores de frecuencia, grado del polinomio son respectivamente 0.2 y 10. Después del filtro aumentamos el contraste y escogemos un valor de 0 a 255, los píxeles cuya intensidad sobrepasa este valor aparecen en blanco y los otros en negro. Este valor es el punto intermedio del mínimo y del máximo de la intensidad del filtro de un coeficiente de ajuste, este coeficiente fue ajustado de manera para tener para cada imagen algunos puntos de la burbuja y el menor posible de ruido

Page 62: Proyecto - 148.206.53.231

Proyecto Terminal

61

5.2.1 Localización de la burbuja. Después del tratamiento de las imágenes solo queda localizar los puntos de las imágenes correspondientes a la burbuja, esto se hace con la función find de matlab, en este caso se hace una búsqueda matricial de los puntos de la intensidad inferior a10. Afín de minimizar los tiempos de cálculo en ves de buscar en toda la imagen vamos a definir una zona de búsqueda móvil. Para definir esta zona podemos utilizar el factor que la bola se desplaza en una banda vertical relativamente estrecha suponiendo que con una velocidad constante, vamos a buscar la burbuja en una zona rectangular de 100 píxeles de largo y de 40 de alto centrada sobre la posición de la burbuja en la imagen anterior trasladada 20 píxeles hacia arriba. Estos valores fueron ajustados por experiencia La utilización de este método requiere de inicializar la búsqueda para la primera imagen (no disponemos de un valor de la burbuja en el tiempo cero) y el manejo de los efectos del borde, fin que la zona de búsqueda no salga de los limites de la imagen. Además la búsqueda móvil permite ignorar los dos objetos que aparecen en el Angulo inferior izquierdo en la imagen. Entonces tenemos un método robusto, pero no preciso. Una vez todos los puntos localizados en el rectángulo, las mitades de cada lado del rectángulo serán asociados con los puntos extremos de una elipse y el centro del rectángulo esta asociado con el centro de la burbuja. Esta modelizacion solo funciona si asociamos la burbuja a un elipsoide simétrico y si suponemos que no hay rotaciones sobre el eje X (el eje mas largo de la elipse queda horizontal). La función alayse_movieQ2 nos da esos 5 puntos para cada imagen guardamos todas las coordenadas de cada punto en una matriz de 51*2 5.3 Reconstitución en 3D. 5.3.1 Cambio de coordenadas (de píxel al verdadero mundo). Antes de hacer la reconstitución tenemos que pasar de las coordenadas del monitor a las coordenadas verdaderas (pero todavía en 2D). Sobre el monitor las coordenadas están en píxeles (valores enteros) y la base es de tipo matricial (X hacia abajo y Y horizontal) y queremos conocer las coordenadas en forma clásica X horizontal y Y vertical con el verdadero tamaño. El cambio de coordenadas puede ser expresado de una manera matricial con la ayuda de las coordenadas homogéneas.

Page 63: Proyecto - 148.206.53.231

Proyecto Terminal

62

⎟⎟⎟

⎜⎜⎜

1c

c

YX

=

⎜⎜⎜⎜⎜

0

0

ySf

00

xSf

⎟⎟⎟

100

y

x

⎟⎟⎟

⎜⎜⎜

1YrXr

Donde: X c Y c Son las coordenadas del monitor. X r Y r Son las coordenadas reales. F Es la distancia focal de la cámara.

yx SS Son las dimensiones de un píxel. En nuestro caso solo es necesario invertir la matriz 3*3 a fin de pasar las coordenadas del monitor a fin de pasar alas coordenadas reales Nota: Las dimensiones de un píxel se obtiene dividiendo el tamaño del monitor por el numero de píxeles (aquí la resolución es de 420*480) 5.3.2 Reconstitución de la escena. En la experiencia estudiada aquí las dos cámaras, maestra y esclavo están en dos ángulos diferentes situadas a 90 grados entre ellas, a fin de definir la reconstitución vamos a suponer que la cámara maestro esta situada sobre el eje de las X y la cámara esclavo esta sobre el eje de las Y. Así conocemos las posiciones de los focos de las dos cámaras y la distancia focal se puede determinar las ecuaciones de los planos de proyección. Por ejemplo Si f1 x es la coordenada según el eje X del foco de la cámara maestro, el plano de proyección esta dado por la ecuación x=f1 x -f1(y y=f2 y -f2 para el esclavo). Se puede así poner todos los puntos detectados en la etapa de localización de la burbuja en su plano de proyección respectiva, en una base de 3 dimensiones. En la etapa siguiente de la reconstitución consiste hacer la correspondencia entre los puntos de los 2 planos, par determinar cuales son los puntos que representan la proyección de un mismo punto del espacio sobre cada uno de los dos planos. Considerando que la bola es una elipse simétrica y que los dos planos son perpendiculares, esta correspondencia es bastante fácil, se hace con observaciones geométricas (no es necesario utilizar el plano epipolar) En fin para conocer la posición espacial de cada punto proyectado solo queda buscar la intersección de las 2 líneas generadas por las proyecciones correspondientes del punto y de los focos correspondientes. Eso esta hecho con la función meet_droites que utiliza la teoría geométrica proyectiva de Grassman-Cayley

Page 64: Proyecto - 148.206.53.231

Proyecto Terminal

63

Así cuando reconstituimos los 5 puntos detectados en cada imagen generamos el paralepipedo rectangular minimal que encierra a la burbuja Esta modelizacion permite aproximar el centro de la burbuja de 4 maneras diferentes. Utilizando el centro de cada rectángulo detectado sobre cada plano de proyección Calculando las intersecciones de las 3 líneas generadas por cada punto que se encuentra en el centro de cada lado del paralepipedo. Esas líneas pueden ser consideradas como los 3 ejes del elipsoide. A fin de tener una medida aproximada a un valor bueno (Un valor de numero es un error de calculo generado por el computado y valor de medida es debido a los puntos utilizados para formar la elipse) vamos a tomar la media de los 4 maneras para obtener el valor del centro de la burbuja. Así se puede reconstituir la trayectoria en 3D de la burbuja respecto a su centro y tener una idea más o menos precisa de sus dimensiones y de su evolución en el tiempo.

Page 65: Proyecto - 148.206.53.231

Proyecto Terminal

64

CAPITULO 6

Page 66: Proyecto - 148.206.53.231

Proyecto Terminal

65

Capitulo 6 Análisis del movimiento. 6. Notas preliminares. En lo siguiente queremos modelizar las rotaciones de la burbuja en el tiempo utilizando los cuaterniones a fin de sacar información de las imágenes analizadas, hay que hacer algunas hipótesis de las simplificaciones. -La burbuja tiene el mismo tamaño en el tiempo (no se deforma). -La burbuja solo hace rotaciones de ángulos pequeños así los 3 ejes del elipsoide no permutan -El tamaño maximal de las medidas de los 3 ejes del elipsoide corresponden al tamaño de la burbuja cuando no ha rotado (burbuja de referencia). En el paralepipedo generado asimilamos la diagonal la más larga al eje del elipsoide del más grande. 6.1 Estudio de las rotaciones. Gracias alas hipótesis podemos sacar la variación de las dimensiones del paralepipedo y las rotaciones de la burbuja. Con la teoría de los cuaterniones es relativamente fácil calcular las rotaciones generales resultantes de la composición de los ejes concordantes. Así como la rotación la más general esta descrita por los ángulos de Euler, tendremos que estimar los 3 ángulos y realizar el producto cuaternionico para obtener el cuaternion de rotación que describe la orientación de la burbuja para cada imagen. Con las imágenes disponibles en este estudio y la modelizacion escogida (el paralepipedo que contiene ala burbuja asimilada a un elipsoide simétrica) es relativamente fácil de conocer 2 de esos , 3 ángulos de Euler, el tercero es un poco más difícil de estimar a causa de la falta de precisión de las imágenes. Los resultados presentados aquí consideran los ejes X y Y. Esta elección arbitraria viene de la simetría del problema que consideramos. Visualmente la rotación según el eje Z es menos interesante, es como una esfera aplanada y entonces no se puede ver la rotación. Así la comparación entre los ejes X y Y de la burbuja y los de la elipsoide nos da los cosenos de los ángulos de rotación según los ejes X y Y ( axθ =cos 1− /axe x max).

xθ es el Angulo de rotación sobre el eje X

Page 67: Proyecto - 148.206.53.231

Proyecto Terminal

66

Después creamos los 2 cuaterniones asociados a esas 2 rotaciones y el producto cuaternionico de los 2, nos da una rotación general entre la burbuja de referencia y la de la imagen tratada. Guardamos todos esos cuaterniones en una matriz Q Nota: Matlab no posee una función para dibujar un elipsoide cuyos ejes no son según los 3 ejes de la base. Así como para representar las diferentes orientaciones de la burbuja en el tiempo, tenemos que calcular cada punto de la superficie del elipsoide de base de referencia o la rotación descrita por el cuaternion correspondiente. Este método funciona bien pero cuesta mucho tiempo, seria más eficaz de calcular la rotación de los 3 ejes del elipsoide y después generar la superficie apartar de sus 3 ejes.

Page 68: Proyecto - 148.206.53.231

Proyecto Terminal

67

CAPITULO 7

Page 69: Proyecto - 148.206.53.231

Proyecto Terminal

68

Capitulo 7. Interpolación del Movimiento de la Orientación de la Burbuja. 7.1 B-Splines de Quaternions. 7.1.1 Introducción. El método de interpolación seleccionado en este capitulo se basa en la teoría de los B-splines, el propósito es el de aproximar puntos similares a uno particular, usando las curvas de Beziers y los polinomios de Bernstein para la construcción de la curva de interpolación; pero transportada al espacio de Quaternions. La ídea sería que durante un tiempo determinado se interpolaran las diferentes orientaciones de la burbuja para crear un movimiento más fluido, y entonces poder interpolar la trayectoria del centro de la elipse. Así se podrá construir completamente el desplazamiento de la burbuja y se podrá encontrar la posición y la orientación exacta de la burbuja en cualquier tiempo. 7.1.2 Curvas Quaternionicas de Bernstein/Beziers. Los B-splines de quaternions se construyen de una manera similar a los B-splines clásicos; en cada intervalo se crearán puntos de control que generaran la curva generada por el algoritmo de Casteljeaus. Así una vez constituidos algunos B-splines clásicos se logra una interpolación lineal entre los puntos de control, para los quaternios se usará una interpolación geodésica a lo largo de la inclinación de la esfera unitaria que une los 2 quaterniones, que forman el intervalo de estudio. La función de interpolación es:

Entonces la curva quaternionica de Bernstein/Beziers generada por los quaternios de control se construyen de la manera siguiente:

Ó

Page 70: Proyecto - 148.206.53.231

Proyecto Terminal

69

Donde: 7.1.3 Construcción de los B-Splines de quaternios. Para interpolar varios quaternios se procede así; para cada intervalo hay que crear dos nuevos quaternios y , con los otros dos quaternios del intervalo de los cuatro puntos de control se generara un pedazo de la curva cita anteriormente. La primera fase de la contrucción consiste, en obtener los quaternios que servirán para calcular los y , en otros términos, se va a buscar los puntos de control que sirven para generar el intervalo de curva. En el caso de los B-splines que se obtienen por la resolución de un sistema lineal, en el caso de los quaternios el sistema es no lineal, se resuelve siguiendo el método iterativo siguiente:

Donde:

Y

Se para la iteración con la ayuda del criterio de la convergencia de acuerdo a:

Tolerancia

En nuestro caso, para una tolerancia de se tiene aproximadamente 30 iteraciones.

Se inicializa el algoritmo con que son las interpolaciones del spline.

Page 71: Proyecto - 148.206.53.231

Proyecto Terminal

70

Así obteniendo el se puede lograr la interpolación en general, del quaternio, el B-spline de quaternion se obtiene de la manera siguiente:

y son dos continuaciones de los quaternios, es el vector tiempo para obtener los tiempos

-el vector tensión Cada segmento del B-spline de quaternios es la curva quaternionica de Bernstein/Beziers en el orden de (por que fue generado por los cuatro puntos de control) definido de la siguiente forma:

Nota: La estructura de datos escogida aquí, permite trabajar con un paso del tiempo variable, la curva de interpolación en parte, dobla este tiempo, gracias al vector de tensión . Estos dos aspectos no los utilizamos aquí, por que trabajamos con ningún tiempo estacionario (el video esta dividido en 51 marcos de igual longitud) y los valores de tensión 7.1.4 Resultados obtenidos. La interpolación de las orientaciones de la burbuja funcionan muy bien, con la interpolación de los quaternios se describen las rotaciones de la burbuja de referencia y de la otra en curso; se puede por ello lograr muy fácilmente la película de las rotaciones de la burbuja, con el fin de apreciar la fluidez del movimiento obtenido (para ejecutar el programa se debe de correr el archivo testQ2). La trayectoria es representada por la continuación de las posiciones de los quaternios que nos representan las orientaciones en el espacio, el B-spline conseguido de la manera antes descrita no interpola la trayectoria correctamente. Uno de los métodos para corregir la trayectoria, es mediante el calculo de los quaternios similares que permiten pasar el bache, lo cual permite dibujar la trayectoria de los otros puntos y así se logra la interpolación en esos quaternios; pero aquí denuevo la interpolación conseguida esta muy distante de la trayectoria real, pero muy cercana. Por lo tanto, la interpolación del quaternion se hace en la esfera unitaria de 4 dimensiones, no se puede interpolar los quaternios directamente. Un buen método consiste en proyectar todos los puntos en la esfera unitaria y de calcular la rotación del quaternion, del primer punto de todos los demás puntos de la trayectoria y asi sucesivamente. Entonces se logra la interpolación de esta sucesión de quaternios y se consigue una interpolación de la trayectoria, pero intencional en la esfera unitaria para reemplazar apropiadamente todos los puntos necesarios para lograr la interpolación, al mismo tiempo en la norma de las posiciones de los vectores de la trayectoria, en el

Page 72: Proyecto - 148.206.53.231

Proyecto Terminal

71

mismo instante que aquellos de la interpolación quaternionica. El resultado se exhibe en el anexo. Así con la combinación de la interpolación de la trayectoria y la orientación de la burbuja se puede reconstruir el movimiento de la burbuja completamente en el liquido, y para saber la posición espacial exacta en cada momento.

Page 73: Proyecto - 148.206.53.231

Proyecto Terminal

72

CAPITULO 8

Page 74: Proyecto - 148.206.53.231

Proyecto Terminal

73

Capitulo 8. Análisis de Resultados y Conclusiones. 8 La algebra de Grassman-Cayley. La implementación de la algebra geométrica del espacio proyectivo P(R3 ) es relativamente simple, bajo la implementación de matlab, ya que muchas de las operaciones necesarias para llevar acabo la aplicación como vectores y matrices ya están definidas en el software. (Consultar el capitulo 4 para ver la implementación del algebra). El uso de esta algebra permite un acercamiento más intuitivo a la reconstitución en 3D basadas en las consideraciones meramente geométricas (intersecciones de planos, líneas, puntos,…). Que nos muestra un marco de referencia diferente y por lo tanto, debido al algebra lineal y los ángulos de Euler simplifican la comprensión y los tiempos de cálculos. (Para más detalles de los espacios proyectivos consultar el capitulo 3). 8.1 Modelado y Reconstitución 3D. A pesar de las imprecisiones del video, se logró la reconstitución de la trayectoria en 3D. En efecto, la posición del centro de la burbuja, se consigue de una manera robusta (basada en 4 diferentes mediciones), el tiempo de cálculo es bastante aceptable. Uno de los problemas de la modelación fue la mala calidad del video; por lo tanto se tiene una gran perdida de la información acerca de las medidas de la elipse, debido a las partes traslucidas, que desaparecen en el momento del filtrado. Así en algunos cuadros de los 58, la burbuja sólo tiene 3 o 4 pixeles. 8.2 Análisis del Movimiento mediante Quaternions. La falta de información fiable en las medidas de la elipse, obligan a hacer muchas hipótesis de simplificación, a fin de poder deducir las rotaciones de la burbuja a través del tiempo. Por ello el movimiento obtenido no es forzado del movimiento original de la burbuja, que es primordial en este proyecto y es el resultado de la aplicación del lgebra de Grassman-Cayley y del uso de quaternions. Dado que el análisis del movimiento es más importante que el modelado del fenómeno real, es quizás no muy relevante las pequeñas imprecisiones que se presentaron en algunos puntos de la modelación. El uso de los quaternions para el modelado de las rotaciones presenta dos ventajas:

- Efectuar una rotación en 3D con la ayuda de los quaternions es menos costoso, ya que se usan las matrices de rotaciones que decrementan el tiempo de cálculo.

- Su manipulación es más cómoda, por que una rotación sólo produce un eje y un ángulo, y la composición de las rotaciones de los ejes concernientes se trasladan debido al producto quaternionico. La manipulación del quaternion bajo la forma vectorial devuelve la implementación del algebra de Clifford relativamente cómoda de implementar bajo matlab.

Page 75: Proyecto - 148.206.53.231

Proyecto Terminal

74

8.3 Interpolación del Movimiento por B-Splines de Quaternions. El método de interpolación presentado en este proyecto, es basado en “Quaternions-Splines for the Smooth Interpolation of Orientation” publicado por Gregory m. Nelson. Las diferentes orientaciones de la burbuja, representadas por las rotaciones del quaternion (quaternions unitarios), son muy convenientes para la interpolación por B-splines de quaternions, dado que la interpolación se logra en la esfera unitaria 4D. Por otra parte la interpolación de la trayectoria es más delicada, debido a que es necesario proyectar a la esfera unitaria para lograr la interpolación, entonces se logra la interpolación de los puntos reemplazados en el espacio. No obstante los resultados conseguidos son muy satisfactorios en términos de precisión y tiempo de cálculo. Se consigue efectivamente una curva suave y fiel a la interpolación.

Page 76: Proyecto - 148.206.53.231

Proyecto Terminal

75

ANEXO I

Tratamiento de las imagenes

Anexo I : Localización de la burbuja.

Page 77: Proyecto - 148.206.53.231

Proyecto Terminal

76

ANEXO II

Reconstitucion 3D

Anexo II.1 Movimiento 3D.

Anexo II.2 Trayectoria 3D.

Anexo II.3 Trayectoria vista Annexe II.4 Trayectoria vista según el ángulo esclavo. según el ángulo maestro.

Page 78: Proyecto - 148.206.53.231

Proyecto Terminal

77

ANEXO III

Análisis del movimiento

Anexo III.1 Evolución de los ejes de la ellipse.

Anexo III.2 Ángulos de rotación después de la rectificación.

Page 79: Proyecto - 148.206.53.231

Proyecto Terminal

78

Anexo III.3 Orientación de la ellipse de acuerdo a su trayectoria.

Page 80: Proyecto - 148.206.53.231

Proyecto Terminal

79

ANEXO IV

Interpolación del movimiento

Anexo IV Interpolación de la trayectoria.

Page 81: Proyecto - 148.206.53.231

Proyecto Terminal

80

BIBLIOGRAFIA

- Notas y programas proporcionadas por el asesor. - “Ecuaciones diferenciales en derivadas parciales” Weinberger Hans F. Edit. Reverte - “Animating Rotation with Quaternion Curves” Shoemake Ken Edit. Formato electronico. - “Quaternions”

Rotenberg Steve Edit. Formato electronico

- “Programming in Matlab” Neuman Edward Edit. Formato electronico - “Aprenda MATLAB 6.0” Atencia Javier, Nestar Raúl Edit. Formato electronico - “Quaternions, Interpolation and Animation” , Technical Report Dam, Koch and Lillhom University of Copenhagen Edit. Formato electronico - Eduardo Bayro Corrochano, “Geometric algebra with application in science and

engineering” Garret Sobczyk edition Birkauser - Pierre Macé, Dominique Michelucci, Louis-Paul Untersteller, “Etude projective

de l'orthogonalité. L'orthinf et sa dualité”

- Paul de Casteljeau “Les quaternions” Traité de nouvelles technologie, série

mathématique appliquées, Hermes - “Quaternion Splines for the Smooth Interpolation of Orientations' Gregory M. Nielson, IEEE transaction on visualization and computer graphics

Page 82: Proyecto - 148.206.53.231

Proyecto Terminal

81

.