protected boolean projectOntoEssential ( DMatrixRMaj E ) { if ( ! svdConstraints . decompose ( E ) ) { return false ; } svdV = svdConstraints . getV ( svdV , false ) ; svdU = svdConstraints . getU ( svdU , false ) ; svdS = svdConstraints . getW ( svdS ) ; SingularOps_DDRM . descendingOrder ( svdU , false , svdS , svdV , false ) ; // project it into essential space // the scale factor is arbitrary, but the first two singular values need // to be the same. so just set them to one svdS . unsafe_set ( 0 , 0 , 1 ) ; svdS . unsafe_set ( 1 , 1 , 1 ) ; svdS . unsafe_set ( 2 , 2 , 0 ) ; // recompute F CommonOps_DDRM . mult ( svdU , svdS , temp0 ) ; CommonOps_DDRM . multTransB ( temp0 , svdV , E ) ; return true ; }
Projects the found estimate of E onto essential space .