Para todos los que siguen interesados en esto después de tantos meses, he logrado obtener la matriz de homografía correcta usando el código de Kovesi (http://www.csse.uwa.edu.au/~pk/research/matlabfns), y especialmente la función homography2d.m. Sin embargo, necesitará los valores de píxel de las cuatro esquinas del equipo. Si la cámara se fija de manera constante, entonces tendrá que hacer esto una vez. Vea el código de ejemplo a continuación:
%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];
Eso debería hacer el truco. Tenga en cuenta que Matlab define el eje x en una imagen y el índice de filas e y como las columnas. Por lo tanto, uno debe intercambiar x-y en las ecuaciones (como probablemente verá en el código anterior). Además, había logrado calcular la matriz de homografía solamente a partir de los parámetros, pero el resultado fue levemente apagado (tal vez errores de redondeo en la caja de herramientas de calibración). La mejor manera de hacerlo es lo anterior.
Si desea utilizar solo los parámetros de la cámara (es decir, no use el código de Kovesi), entonces la matriz de Homografía es H = KK * Rmat * inv_KK. En este caso, el código es,
% 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
También me gustaría saber la respuesta a esto. Siento que puede haber alguna pista en este documento: http://webee.technion.ac.il/~lihi/Publications/ZelnikIrani.Homogs.pami.pdf, aunque no he tenido tiempo de leerlo y digerirlo. – n00dle