gtsam  4.0.0
gtsam
Cal3_S2Stereo.h
Go to the documentation of this file.
1 /* ----------------------------------------------------------------------------
2 
3  * GTSAM Copyright 2010, Georgia Tech Research Corporation,
4  * Atlanta, Georgia 30332-0415
5  * All Rights Reserved
6  * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
7 
8  * See LICENSE for the license information
9 
10  * -------------------------------------------------------------------------- */
11 
18 #pragma once
19 
20 #include <gtsam/geometry/Cal3_S2.h>
21 
22 namespace gtsam {
23 
29  class Cal3_S2Stereo {
30  private:
31 
32  Cal3_S2 K_;
33  double b_;
34 
35  public:
36 
37  enum { dimension = 6 };
38  typedef boost::shared_ptr<Cal3_S2Stereo> shared_ptr;
39 
42 
45  K_(1, 1, 0, 0, 0), b_(1.0) {
46  }
47 
49  Cal3_S2Stereo(double fx, double fy, double s, double u0, double v0, double b) :
50  K_(fx, fy, s, u0, v0), b_(b) {
51  }
52 
54  Cal3_S2Stereo(const Vector &d): K_(d(0), d(1), d(2), d(3), d(4)), b_(d(5)){}
55 
57  Cal3_S2Stereo(double fov, int w, int h, double b) :
58  K_(fov, w, h), b_(b) {
59  }
60 
64 
65  void print(const std::string& s = "") const {
66  K_.print(s+"K: ");
67  std::cout << s << "Baseline: " << b_ << std::endl;
68  }
69 
71  bool equals(const Cal3_S2Stereo& other, double tol = 10e-9) const {
72  if (fabs(b_ - other.b_) > tol) return false;
73  return K_.equals(other.K_,tol);
74  }
75 
79 
81  const Cal3_S2& calibration() const { return K_;}
82 
84  Matrix matrix() const { return K_.matrix();}
85 
87  inline double fx() const { return K_.fx();}
88 
90  inline double fy() const { return K_.fy();}
91 
93  inline double skew() const { return K_.skew();}
94 
96  inline double px() const { return K_.px();}
97 
99  inline double py() const { return K_.py();}
100 
102  Point2 principalPoint() const { return K_.principalPoint();}
103 
105  inline double baseline() const { return b_; }
106 
108  Vector6 vector() const {
109  Vector6 v;
110  v << K_.vector(), b_;
111  return v;
112  }
113 
117 
119  inline size_t dim() const {
120  return 6;
121  }
122 
124  static size_t Dim() {
125  return 6;
126  }
127 
129  inline Cal3_S2Stereo retract(const Vector& d) const {
130  return Cal3_S2Stereo(K_.fx() + d(0), K_.fy() + d(1), K_.skew() + d(2), K_.px() + d(3), K_.py() + d(4), b_ + d(5));
131  }
132 
134  Vector6 localCoordinates(const Cal3_S2Stereo& T2) const {
135  return T2.vector() - vector();
136  }
137 
138 
142 
143  private:
146  template<class Archive>
147  void serialize(Archive & ar, const unsigned int /*version*/)
148  {
149  ar & BOOST_SERIALIZATION_NVP(K_);
150  ar & BOOST_SERIALIZATION_NVP(b_);
151  }
153 
154  };
155 
156  // Define GTSAM traits
157  template<>
158  struct traits<Cal3_S2Stereo> : public internal::Manifold<Cal3_S2Stereo> {
159  };
160 
161  template<>
162  struct traits<const Cal3_S2Stereo> : public internal::Manifold<Cal3_S2Stereo> {
163  };
164 
165 } // \ namespace gtsam
double py() const
image center in y
Definition: Cal3_S2.h:117
Cal3_S2Stereo()
default calibration leaves coordinates unchanged
Definition: Cal3_S2Stereo.h:44
Definition: Cal3_S2Stereo.h:29
Vector6 localCoordinates(const Cal3_S2Stereo &T2) const
Unretraction for the calibration.
Definition: Cal3_S2Stereo.h:134
const Cal3_S2 & calibration() const
return calibration, same for left and right
Definition: Cal3_S2Stereo.h:81
double px() const
image center in x
Definition: Cal3_S2Stereo.h:96
bool equals(const Cal3_S2 &K, double tol=10e-9) const
Check if equal up to specified tolerance.
Definition: Cal3_S2.cpp:67
The most common 5DOF 3D->2D calibration.
bool equals(const Cal3_S2Stereo &other, double tol=10e-9) const
Check if equal up to specified tolerance.
Definition: Cal3_S2Stereo.h:71
double px() const
image center in x
Definition: Cal3_S2.h:112
Point2 principalPoint() const
return the principal point
Definition: Cal3_S2.h:122
double fy() const
focal length x
Definition: Cal3_S2Stereo.h:90
Cal3_S2Stereo retract(const Vector &d) const
Given 6-dim tangent vector, create new calibration.
Definition: Cal3_S2Stereo.h:129
Matrix3 matrix() const
Definition: Cal3_S2.h:141
double fx() const
focal length x
Definition: Cal3_S2Stereo.h:87
Definition: Cal3_S2.h:33
Point2 principalPoint() const
return the principal point
Definition: Cal3_S2Stereo.h:102
friend class boost::serialization::access
Serialization function.
Definition: Cal3_S2Stereo.h:145
size_t dim() const
return DOF, dimensionality of tangent space
Definition: Cal3_S2Stereo.h:119
double fy() const
focal length y
Definition: Cal3_S2.h:97
boost::shared_ptr< Cal3_S2Stereo > shared_ptr
shared pointer to stereo calibration object
Definition: Cal3_S2Stereo.h:38
Both ManifoldTraits and Testable.
Definition: Manifold.h:120
Definition: Point2.h:40
Cal3_S2Stereo(double fov, int w, int h, double b)
easy constructor; field-of-view in degrees, assumes zero skew
Definition: Cal3_S2Stereo.h:57
static size_t Dim()
return DOF, dimensionality of tangent space
Definition: Cal3_S2Stereo.h:124
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition: concepts.h:30
double skew() const
skew
Definition: Cal3_S2.h:107
void print(const std::string &s="Cal3_S2") const
print with optional string
Definition: Cal3_S2.cpp:62
Cal3_S2Stereo(const Vector &d)
constructor from vector
Definition: Cal3_S2Stereo.h:54
Vector6 vector() const
vectorized form (column-wise)
Definition: Cal3_S2Stereo.h:108
double skew() const
skew
Definition: Cal3_S2Stereo.h:93
double fx() const
focal length x
Definition: Cal3_S2.h:92
Vector5 vector() const
vectorized form (column-wise)
Definition: Cal3_S2.h:127
Matrix matrix() const
return calibration matrix K, same for left and right
Definition: Cal3_S2Stereo.h:84
Cal3_S2Stereo(double fx, double fy, double s, double u0, double v0, double b)
constructor from doubles
Definition: Cal3_S2Stereo.h:49
double py() const
image center in y
Definition: Cal3_S2Stereo.h:99
double baseline() const
return baseline
Definition: Cal3_S2Stereo.h:105
Global functions in a separate testing namespace.
Definition: chartTesting.h:28