Sunteți pe pagina 1din 6

UNIVERSIDAD VERACRUZANA

FACULTAD DE FÍSICA E INTELIGENCIA ARTIFICIAL


DEPARTAMENTO DE INTELIGENCIA ARTIFICIAL

Maestría en Inteligencia Artificial.

Materia:

Temas Selectos de Visión por Computadora.

Titular:

Dr. Homero Vladimir Ríos Figueroa.

Tarea 2
Alumno:

Efrén Juárez Castillo

Xalapa Veracruz. Febrero de 2011.


Temas Selectos de Visión por Computadora.

I. Usando las ecuaciones de las proyecciones perspectivas ob-


tener una secuencia de imágenes para dos esferas en rota-
ción como en el experimento de Ullman.
Para realizar esta tarea se utilizó Matlab, ya que cuenta con las funciones que nos pueden
apoyar, como la función sphere que nos permite crear una esfera en tres dimensiones de la
siguiente forma:

[X,Y,Z] = sphere(n);

En donde n representa el número de filas y columnas que tendrá cada una de las componen-
tes X,Y y Z, la ilustración 1 muestra una esfera completa.

Ilustración 1Esfera completa de radio 1 ubicada en x=0, y=0 y z=0.

Para obtener esferas de radios diferentes solo es necesario multiplicar X, Y y Z por el radio
que se necesite, de esta forma obtuvimos dos esferas, y las colocamos una dentro de otra
situando a las dos en el origen, en la ilustración 2 están graficados los 100 puntos obtenidos
mediante el siguiente código:

[X1,Y1,Z1] = sphere(10);
[X2,Y2,Z2] = sphere(10);
radio1=2;
radio2=5;
X1=X1*radio1;
Y1=Y1*radio1;
Z1=Z1*radio1;
X2=X2*radio2;
Y2=Y2*radio2;
Z2=Z2*radio2;
figure,plot3(X1,Y1,Z1,'*r');
hold on;
plot3(X2,Y2,Z2,'*b');

Página 2 de 6
Temas Selectos de Visión por Computadora.

Ilustración 2 Una esfera de radio 2 dentro de otra esfera de radio 5.

Para lograr hacer rotar estas esferas se utilizaron las matrices de rotación en tres dimensio-
nes, mismas que se muestran en la ilustración 3, dado que nadamas necesitamas rotar las
esferas en un eje, se opto por rotarlas en el eje y.

Ilustración 3 Matrices de rotación en tres dimensiones.

En la ilustración 4 se muestran cuatro tiempos en los que la esfera pequeña (roja) esta ro-
tando 5 grados a la derecha, mientras la esfera grande (azul) esta rotando 7 grados a la iz-
quierda. El código empleado es el siguiente:

grados1 = -5;
grados2 = 7;
inc1= pi*grados1/180;
inc2= pi*grados2/180;
t1=0;
t2=0;
for paso=1:60
t1=t1+inc1;
t2=t2+inc2;
c1=cos(t1);
s1=sin(t1);
c2=cos(t2);
s2=sin(t2);

Página 3 de 6
Temas Selectos de Visión por Computadora.

M1=[c1 0 s1 0;
0 1 0 0;
-s1 0 c1 0;
0 0 0 1];
M2=[c2 0 s2 0;
0 1 0 0;
-s2 0 c2 0;
0 0 0 1];
for i=1:size(X1,1)
for j=1:size(X1,1)
P1=[X1(i,j);Y1(i,j);Z1(i,j);1];
P2=M1*P1;
X3(i,j)=P2(1);
Y3(i,j)=P2(2);
Z3(i,j)=P2(3);
P3=[X2(i,j);Y2(i,j);Z2(i,j);1];
P4=M2*P3;
X4(i,j)=P4(1);
Y4(i,j)=P4(2);
Z4(i,j)=P4(3);
end
end
figure,plot3(X3,Y3,Z3,'*r');
hold on;
plot3(X4,Y4,Z4,'*b');
end

Ilustración 4 Dos esferas, la esfera pequeña (roja) esta rotando a la izquierda, mientras que la grande (azul) lo hace
a la derecha.

El paso siguiente fue proyectar las esferas a un plano bidimensional, para ello se utilizaron
las ecuaciones de proyección vistas en clase:

‫ݔ‬. ݂ ‫ݕ‬. ݂
‫ݔ‬ᇱ = ‫ݕ‬ᇱ =
‫ݖ‬ ‫ݖ‬

Página 4 de 6
Temas Selectos de Visión por Computadora.

En donde f representa la distancia focal de proyección, mientras que (x, y, z) son las coor-
denadas de un punto en tres dimensiones y (x’, y’) son las nuevas coordenadas del punto
proyectado en un plano bidimensional. El valor para la distancia focal en este caso fue de 1.

Dado que los puntos obtenidos de la esfera en tres dimensiones están distribuidos de mane-
ra uniforme, se opto por no proyectar todos, en su lugar se eligieron al azar solo unos de
ellos.

En la ilustración 5 se muestran 9 imágenes secuenciales de las proyecciones, si estas imá-


genes se ven de forma consecutiva como un video, la vista puede distinguir claramente que
se trata de dos esferas girando una dentro de otra.

Ilustración 5 Proyección de dos esferas en tres dimensiones girando una dentro de otra a un plano bidimensional.

A continuación se presenta el código empleado en esta aplicación:

Página 5 de 6
Temas Selectos de Visión por Computadora.

f= 10;
f(1:(n+1)^2)=1;
f=f';
grados1 = -10;
grados2 = 10;
inc1= pi*grados1/180;
inc2= pi*grados2/180;
t1=0;
t2=0;
for paso=1:60
t1=t1+inc1;
t2=t2+inc2;

c1=cos(t1);
s1=sin(t1);
c2=cos(t2);
s2=sin(t2);
M1=[c1 0 s1 0;
0 1 0 0;
-s1 0 c1 0;
0 0 0 1];
M2=[c2 0 s2 0;
0 1 0 0;
-s2 0 c2 0;
0 0 0 1];
for i=1:size(X1,1)
for j=1:size(X1,1)
P1=[X3(i,j);Y3(i,j);Z3(i,j);1];
P2=M1*P1;
X3(i,j)=P2(1);
Y3(i,j)=P2(2);
Z3(i,j)=P2(3);
P3=[X4(i,j);Y4(i,j);Z4(i,j);1];
P4=M2*P3;
X4(i,j)=P4(1);
Y4(i,j)=P4(2);
Z4(i,j)=P4(3);
end
end
x3=reshape(X3, 1, n_sqr)';
y3=reshape(Y3, 1, n_sqr)';
z3=reshape(Z3, 1, n_sqr)';
z3 = z3 + z;
aux=zeros(round(n_sqr/10),1);
for i=1:length(aux)
aux(i)=floor(rand(1)*n_sqr)+1;
end
xp1 = (x3.*f)./z3;
yp1 = (y3.*f)./z3;
plot(xp1(aux), yp1(aux), '.r'); grid on;
hold on;
x4=reshape(X4, 1, (n+1)^2)';
y4=reshape(Y4, 1, (n+1)^2)';
z4=reshape(Z4, 1, (n+1)^2)';
z4 = z4 + z;
for i=1:length(aux)
aux(i)=floor(rand(1)*n_sqr)+1;
end
xp2 = (x4.*f)./z4;
yp2 = (y4.*f)./z4;
plot(xp2(aux), yp2(aux), '.r'); grid on;
hold off;
pause(0.2);
end

Página 6 de 6

S-ar putea să vă placă și