function H = dlt(x,xp)
%Algoritmo DLT transformacion Lineal Directa
% LIBRO  VISION ARTIFICIAL INDUSTRIAL. UNIVERSIDAD DE VALLADOLID 2012     %
% TEMA 3 MANIPULACIÓN GEOMÉTRICA DE LA IMAGEN.  sec. 3.6.1 pág 56         %
% AUTORES: Eusebio de la Fuente y Félix Miguel Trespaderne                %

  n = size(x,2);  %n es el número de puntos
  if n<4
    error('DLT necesita al menos 4 puntos');
  end
  if(size(x,1)~=3 | size(xp,1)~=3)
    error('DLT trabaja con coordenadas homogéneas');
  end
  
  A = [];  %Inicializa la matriz A: matriz vacía
  for i = 1:n
    xip = xp( 1, i );
    yip = xp( 2, i );
    wip = xp( 3, i );
    xi = x( :, i );
    Ai = [0,0,0,-wip*xi',yip*xi';
           wip*xi',0,0,0,-xip*xi'];
    A = [A;Ai];   %añade de dos en dos las filas en A
  end

  [U,D,V] = svd(A);
  H = reshape( V(:,9), 3, 3 )';
  H = H / H(3,3);
