Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- % On récupère la photo de la mire
- im = imread('Photo.bmp');
- % On récupère les coordonnées (mesurées) des points dans la scène (3D)
- xyz = importdata('xyz.txt',',');
- % On récupère les coordonées des pixels dans l'image
- uv = importdata('uv.txt',',');
- % colonne A = [u1,v1,u2,v2,...,uN,vN]'
- A = reshape(uv',64,1);
- % On alloue notre matrice C[64*12] remplie de zéros
- C = zeros(64,12);
- % On construit la matrices C
- for i = 1:20
- C(2*i-1,:) = [xyz(i,:) 1 0 0 0 0 -uv(i,1)*xyz(i,1) -uv(i,1)*xyz(i,2) -uv(i,1)*xyz(i,3) -uv(i,1)];
- C(2*i,:) = [0 0 0 0 xyz(i,:) 1 -uv(i,2)*xyz(i,1) -uv(i,2)*xyz(i,2) -uv(i,2)*xyz(i,3) -uv(i,2)];
- end;
- % On calcule Y = C’C
- Y = C'*C;
- % On calcule les vecteurs propres et les valeurs propres de Y
- [eigenVectors, eigenValues] = eig(Y);
- % On cherche la plus petite valeur propre non-nulle
- minIndex=1;
- for i=1:12
- eigVal = eigenValues(i,i);
- if (eigVal<=eigenValues(minIndex,minIndex) && not(eigVal==0))
- minIndex=i;
- end;
- end;
- % On note M le vecteur propre associé à la plus petite valeur propre non
- % nulle
- M = eigenVectors(:,minIndex);
- % On définit les coordonnées d'un point test à prendre dans le fichier xyz.txt
- x_test=65;
- y_test=160;
- z_test=77.5;
- % On calcul les coordonnées du pixel correspondant en applique notre fonction de projection
- % creer script proj12.m est mettre le code commenté suivant dedans :
- % function [u v]=proj12(x,y,z,m)
- % u = (m(1)*x+m(2)*y+m(3)*z+m(4))/(m(9)*x+m(10)*y+m(11)*z+m(12));
- % v = (m(5)*x+m(6)*y+m(7)*z+m(8))/(m(9)*x+m(10)*y+m(11)*z+m(12));
- % end
- [u_test12 v_test12] = proj12(x_test,y_test,z_test,M);
- % On affiche l'image de la mire, les pixels pointés, et la projection
- % calculée du point test
- image(im);
- hold on;
- plot(uv(:,1),uv(:,2),'s');
- plot(u_test12,v_test12,'md');
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement