www.pudn.com > calibr8.zip > getTRZ_fun.m
function Res = getTRZ_fun( X0 ) % % function that is minimized in getTR3 % global GDLT; global GSp; global GIp; global GInt; global Gerrs; [n11, n12, n13] = sph2cart( X0(1,1), X0(2,1), 1 ); Fi1 = X0(3,1); Fi2 = Fi1 + pi/2; NR = dir2rot( [n11, n12, n13] ); v11 = cos( Fi1 ); v12 = sin( Fi1 ); v21 = cos( Fi2 ); v22 = sin( Fi2 ); ne1 = (NR') * [v11;v12;0]; ne2 = (NR') * [v21;v22;0]; ne1 = ne1 / vsize( ne1 ); ne2 = ne2 / vsize( ne2 ); ne3 = cross( ne1, ne2 ); ne3 = ne3 / vsize( ne3 ); z0 = X0(4,1); [n m] = size( GSp ); Q = GInt * [ne1, ne2, ne3]; imgP = inv(Q) * hext(GIp)'; imgP = hnorm( imgP' ); x0 = sum( (imgP(:,1) .* z0) - GSp(:,1) ) / n; y0 = sum( (imgP(:,2) .* z0) - GSp(:,2) ) / n; newE = [ne1, ne2, ne3] * [1,0,x0;0,1,y0;0,0,z0]; newP = (GInt * newE) * hext(GSp(:,1:2))'; newP = hnorm( newP' ); errs = vsize( GIp - newP ); Res = sum( errs .^ 2); %Res = errs; Gerrs = [Gerrs, mean(errs)];