Pour tous ceux qui sont encore intéressés par cette question après tant de mois, j'ai réussi à obtenir la bonne matrice d'homographie en utilisant le code de Kovesi (http://www.csse.uwa.edu.au/~pk/research/matlabfns), et en particulier la fonction homography2d.m. Vous aurez cependant besoin des valeurs de pixels des quatre coins de la plate-forme. Si la caméra est fixe, vous devrez le faire une fois. Voir l'exemple de code ci-dessous:
%get corner pixel coords from base image
p1=[33;150;1];
p2=[316;136;1];
p3=[274;22;1];
p4=[63;34;1];
por=[p1 p2 p3 p4];
por=[0 1 0;1 0 0;0 0 1]*por; %swap x-y <--------------------
%calculate target image coordinates in world frame
% rig is 9x7 (X,Y) with 27.5mm box edges
XXw=[[0;0;0] [0;27.5*9;0] [27.5*7;27.5*9;0] [27.5*7;0;0]];
Rtarget=[0 1 0;1 0 0;0 0 -1]; %Rotation matrix of target camera (vertical pose)
XXc=Rtarget*XXw+Tc_ext*ones(1,4); %go from world frame to camera frame
xn=XXc./[XXc(3,:);XXc(3,:);XXc(3,:)]; %calculate normalized coords
xpp=KK*xn; %calculate target pixel coords
% get homography matrix from original to target image
HH=homography2d(por,xpp);
%do perspective transformation to validate homography
pnew=HH*por./[HH(3,:)*por;HH(3,:)*por;HH(3,:)*por];
Cela devrait faire l'affaire. Notez que Matlab définit l'axe des x dans une image et l'index des lignes et y comme les colonnes. Il faut donc permuter x-y dans les équations (comme vous le verrez probablement dans le code ci-dessus). De plus, j'avais réussi à calculer uniquement la matrice d'homographie à partir des paramètres, mais le résultat était légèrement décalé (peut-être des erreurs d'arrondi dans la boîte à outils d'étalonnage). La meilleure façon de le faire est la suivante.
Si vous voulez utiliser uniquement les paramètres de la caméra (n'utilisez pas le code de Kovesi), alors la matrice Homographie est H = KK * Rmat * inv_KK. Dans ce cas, le code est,
% corner coords in pixels
p1=[33;150;1];
p2=[316;136;1];
p3=[274;22;1];
p4=[63;34;1];
pmat=[p1 p2 p3 p4];
pmat=[0 1 0;1 0 0;0 0 1]*pmat; %swap x-y
R=[0 1 0;1 0 0;0 0 1]; %rotation matrix of final camera pose
Rmat=Rc_ext'*R; %rotation from original pose to final pose
H=KK*Rmat*inv_KK; %homography matrix
pnew=H*pmat./[H(3,:)*pmat;H(3,:)*pmat;H(3,:)*pmat]; %do perspective transformation
H2=[0 1 0;-1 0 0;0 0 1]*H; %swap x-y in the homography matrix to apply in image
Je voudrais également connaître la réponse à cette question. Je pense qu'il pourrait y avoir quelques indices dans ce document: http://webee.technion.ac.il/~lihi/Publications/ZelnikIrani.Homogs.pami.pdf, bien que je n'ai pas eu le temps de le lire et de le digérer. – n00dle