function [WorldCoord, residual] = BackProject2UVsBy2Projs( xa, xb, Pa, Pb ) if( size( xa, 1) == 3 ) xa = xa(1:2) / xa(3); end; if( size( xb, 1) == 3 ) xb = xb(1:2) / xb(3); end; % Rename all image a and b params to be like "Left and Right": uL = xa(1); vL = xa(2); uR = xb(1); vR = xb(2); aL11 = Pa(1,1); aL12 = Pa(1,2); aL13 = Pa(1,3); aL14 = Pa(1,4); aL21 = Pa(2,1); aL22 = Pa(2,2); aL23 = Pa(2,3); aL24 = Pa(2,4); aL31 = Pa(3,1); aL32 = Pa(3,2); aL33 = Pa(3,3); aL34 = Pa(3,4); aR11 = Pb(1,1); aR12 = Pb(1,2); aR13 = Pb(1,3); aR14 = Pb(1,4); aR21 = Pb(2,1); aR22 = Pb(2,2); aR23 = Pb(2,3); aR24 = Pb(2,4); aR31 = Pb(3,1); aR32 = Pb(3,2); aR33 = Pb(3,3); aR34 = Pb(3,4); B = zeros( 4, 3 ); B(1,1) = uR * aR31 - aR11; B(1,2) = uR * aR32 - aR12; B(1,3) = uR * aR33 - aR13; B(2,1) = vR * aR31 - aR21; B(2,2) = vR * aR32 - aR22; B(2,3) = vR * aR33 - aR23; B(3,1) = uL * aL31 - aL11; B(3,2) = uL * aL32 - aL12; B(3,3) = uL * aL33 - aL13; B(4,1) = vL * aL31 - aL21; B(4,2) = vL * aL32 - aL22; B(4,3) = vL * aL33 - aL23; q = zeros(4,1); q(1) = aR14 - uR * aR34; q(2) = aR24 - vR * aR34; q(3) = aL14 - uL * aL34; q(4) = aL24 - vL * aL34; WorldCoord = B \ q; residual = B * WorldCoord - q;