code: public static DMatrixRMaj projectiveToFundamental( DMatrixRMaj P1 , DMatrixRMaj P2 , @Nullable DMatrixRMaj F21 )
  	{
  		if( F21 == null )
  			F21 = new DMatrixRMaj(3,3);
  
  		ProjectiveToIdentity p2i = new ProjectiveToIdentity();
  		if( !p2i.process(P1) )
  			throw new RuntimeException("Failed!");
  
  		DMatrixRMaj P1inv = p2i.getPseudoInvP();
  		DMatrixRMaj U = p2i.getU();
  
  		DMatrixRMaj e = new DMatrixRMaj(3,1);
  		CommonOps_DDRM.mult(P2,U,e);
  
  		DMatrixRMaj tmp = new DMatrixRMaj(3,4);
  		DMatrixRMaj e_skew = new DMatrixRMaj(3,3);
  		GeometryMath_F64.crossMatrix(e.data[0],e.data[1],e.data[2],e_skew);
  		CommonOps_DDRM.mult(e_skew,P2,tmp);
  		CommonOps_DDRM.mult(tmp,P1inv,F21);
  
  		return F21;
  	}
docs: <p>Given two general camera matrices compute fundamental matrix.</p>
  
  {@code F= [e']_x P2*P1+, where P1+ is the pseudo inverse of P1, and e' = P2*C, with P*C=0}
  
  @param P1 (Input) camera matrix for view 1
  @param P2 (Input) camera matrix for view 2
  @param F21 (Output) Fundamental matrix from view 1 to 2
  @return Fundamental matrix.