code: public Se3_F64 decompose( DMatrixRMaj H )
  	{
  		// step through each calibration grid and compute its parameters
  		DMatrixRMaj h[] = SpecializedOps_DDRM.splitIntoVectors(H, true);
  
  		// lambda = 1/norm(inv(K)*h1) or 1/norm(inv(K)*h2)
  		// use the average to attempt to reduce error
  		CommonOps_DDRM.mult(K_inv,h[0],temp);
  		double lambda = NormOps_DDRM.normF(temp);
  		CommonOps_DDRM.mult(K_inv,h[1],temp);
  		lambda += NormOps_DDRM.normF(temp);
  		lambda = 2.0/lambda;
  
  		// compute the column in the rotation matrix
  		CommonOps_DDRM.mult(lambda,K_inv,h[0],r1);
  		CommonOps_DDRM.mult(lambda,K_inv,h[1],r2);
  		CommonOps_DDRM.mult(lambda,K_inv,h[2],t);
  
  		Vector3D_F64 v1 = UtilVector3D_F64.convert(r1);
  		Vector3D_F64 v2 = UtilVector3D_F64.convert(r2);
  		Vector3D_F64 v3 = v1.cross(v2);
  
  		UtilVector3D_F64.createMatrix(R, v1, v2, v3);
  
  		Se3_F64 ret = new Se3_F64();
  		// the R matrix is probably not a real rotation matrix.  So find
  		// the closest real rotation matrix
  		ConvertRotation3D_F64.approximateRotationMatrix(R,ret.getR());
  		ret.getT().set(t.data[0],t.data[1],t.data[2]);
  
  		return ret;
  	}
docs: Compute the rigid body motion that composes the homography matrix H.  It is assumed
  that H was computed using {@link Zhang99ComputeTargetHomography}.
  
  @param H homography matrix.
  @return Found camera motion.