Fixed size matrix in project_to_camera
							parent
							
								
									e5c3f4228a
								
							
						
					
					
						commit
						f9695f058e
					
				| 
						 | 
				
			
			@ -41,6 +41,10 @@ typedef Eigen::Matrix3d Matrix3;
 | 
			
		|||
typedef Eigen::Matrix4d Matrix4;
 | 
			
		||||
typedef Eigen::Matrix<double,6,6> Matrix6;
 | 
			
		||||
 | 
			
		||||
typedef Eigen::Matrix<double,2,3> Matrix23;
 | 
			
		||||
typedef Eigen::Matrix<double,2,5> Matrix25;
 | 
			
		||||
typedef Eigen::Matrix<double,3,6> Matrix36;
 | 
			
		||||
 | 
			
		||||
// Matrix expressions for accessing parts of matrices
 | 
			
		||||
typedef Eigen::Block<Matrix> SubMatrix;
 | 
			
		||||
typedef Eigen::Block<const Matrix> ConstSubMatrix;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -270,17 +270,15 @@ public:
 | 
			
		|||
   * @param Dpoint is the 2*3 Jacobian w.r.t. P
 | 
			
		||||
   */
 | 
			
		||||
  inline static Point2 project_to_camera(const Point3& P,
 | 
			
		||||
      boost::optional<Matrix&> Dpoint = boost::none) {
 | 
			
		||||
      boost::optional<Matrix23&> Dpoint = boost::none) {
 | 
			
		||||
#ifdef GTSAM_THROW_CHEIRALITY_EXCEPTION
 | 
			
		||||
    if (P.z() <= 0)
 | 
			
		||||
      throw CheiralityException();
 | 
			
		||||
#endif
 | 
			
		||||
    double d = 1.0 / P.z();
 | 
			
		||||
    const double u = P.x() * d, v = P.y() * d;
 | 
			
		||||
    if (Dpoint) {
 | 
			
		||||
      Dpoint->resize(2,3);
 | 
			
		||||
    if (Dpoint)
 | 
			
		||||
      *Dpoint << d, 0.0, -u * d, 0.0, d, -v * d;
 | 
			
		||||
    }
 | 
			
		||||
    return Point2(u, v);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -356,7 +354,7 @@ public:
 | 
			
		|||
    Dpc_pose.block(0, 0, 3, 3) = Dpc_rot;
 | 
			
		||||
 | 
			
		||||
    // camera to normalized image coordinate
 | 
			
		||||
    Matrix Dpn_pc; // 2*3
 | 
			
		||||
    Matrix23 Dpn_pc; // 2*3
 | 
			
		||||
    const Point2 pn = project_to_camera(pc, Dpn_pc);
 | 
			
		||||
 | 
			
		||||
    // uncalibration
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -174,12 +174,14 @@ public:
 | 
			
		|||
    } else {
 | 
			
		||||
 | 
			
		||||
      // Calculate derivatives. TODO if slow: optimize with Mathematica
 | 
			
		||||
      //     3*2        3*3       3*3        2*3
 | 
			
		||||
      Matrix D_1T2_dir, DdP2_rot, DP2_point, Dpn_dP2;
 | 
			
		||||
      //     3*2        3*3       3*3
 | 
			
		||||
      Matrix D_1T2_dir, DdP2_rot, DP2_point;
 | 
			
		||||
 | 
			
		||||
      Point3 _1T2 = E.direction().point3(D_1T2_dir);
 | 
			
		||||
      Point3 d1T2 = d * _1T2;
 | 
			
		||||
      Point3 dP2 = E.rotation().unrotate(dP1_ - d1T2, DdP2_rot, DP2_point);
 | 
			
		||||
 | 
			
		||||
      Matrix23 Dpn_dP2;
 | 
			
		||||
      pn = SimpleCamera::project_to_camera(dP2, Dpn_dP2);
 | 
			
		||||
 | 
			
		||||
      if (DE) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue