function [VarianceIn3D, ArrResiduals] = VarOfBackProjectTraj( TrajByFrame, offsetForFrameNums, Kbig, Rbig, Tbig ) iBegin = 1; iEnd = size(TrajByFrame,1); iCentral = ceil( iEnd / 2); % % --------Shortcut------------ % frameNumCentral = TrajByFrame(iCentral, 1); % iInBig = frameNumCentral - offsetForFrameNums; % Pa = Kbig(:,:, iInBig ) * Rbig(:,:, iInBig ) * [eye(3) -Tbig(:,:, iInBig )]; % xa = TrajByFrame(iCentral, 2:3)'; % % frameNumCur = TrajByFrame(iBegin, 1); % iInBig = frameNumCur - offsetForFrameNums; % Pb = Kbig(:,:, iInBig ) * Rbig(:,:, iInBig ) * [eye(3) -Tbig(:,:, iInBig )]; % xb = TrajByFrame(iBegin, 2:3)'; % [X1, res1] = BackProject2UVsBy2Projs( xa, xb, Pa, Pb ); % %[WorldCoord, residual] = BackProject2UVsBy2Projs( xa, xb, Pa, Pb ); % % frameNumCur = TrajByFrame(iEnd, 1); % iInBig = frameNumCur - offsetForFrameNums; % Pb = Kbig(:,:, iInBig ) * Rbig(:,:, iInBig ) * [eye(3) -Tbig(:,:, iInBig )]; % xb = TrajByFrame(iEnd, 2:3)'; % [X2, res2] = BackProject2UVsBy2Projs( xa, xb, Pa, Pb ); % % %VarianceIn3D = X1-X2; ArrResiduals = norm([res1 res2]); % %VarianceIn3D = det(cov(X1-X2)); ArrResiduals = norm([res1 res2]); % % VarianceIn3D = X1-X2; % V01, then norm'd % % xBeg = Pa*[X1;1]; xBeg = xBeg / xBeg(3); % % xEnd = Pa*[X2;1]; xEnd = xEnd / xEnd(3); % % ArrResiduals = norm( var([xBeg(1:2) xa xEnd(1:2)]') ); % V02 % % ArrResiduals = norm([res1 res2]); % V03 % return; % V01 V02 V03 % %---------Endof shortcut------------ ArrWorldPts = zeros( size(TrajByFrame,1) -1, 3); ArrResiduals = zeros( size(TrajByFrame,1) -1, 4); indexArrWorldPts = 1; frameNumCentral = TrajByFrame(iCentral, 1); iInBig = frameNumCentral - offsetForFrameNums; Pa = Kbig(:,:, iInBig ) * Rbig(:,:, iInBig ) * [eye(3) -Tbig(:,:, iInBig )]; xa = TrajByFrame(iCentral, 2:3)'; for( iFrame = iBegin:iEnd ) if( iFrame == iCentral ) continue; % Skip it, since we can't triangulate against same frame. end; frameNumCur = TrajByFrame(iFrame, 1); iInBig = frameNumCur - offsetForFrameNums; Pb = Kbig(:,:, iInBig ) * Rbig(:,:, iInBig ) * [eye(3) -Tbig(:,:, iInBig )]; xb = TrajByFrame(iFrame, 2:3)'; [WorldCoord, residual] = BackProject2UVsBy2Projs( xa, xb, Pa, Pb ); ArrWorldPts( indexArrWorldPts, 1:3 ) = WorldCoord'; ArrResiduals( indexArrWorldPts, 1:4 ) = residual'; indexArrWorldPts = indexArrWorldPts +1; end; VarianceIn3D = var(ArrWorldPts); ArrResiduals = norm(var(ArrResiduals)); %V04 %VarianceIn3D = det(cov(ArrWorldPts)); % numPts = size(ArrWorldPts,1); % VarianceIn3D = sum(abs(ArrWorldPts(1:numPts-1, :) - ArrWorldPts(2:numPts, : )) ) / (numPts-1) ; %V05