40 static const double kNaN = std::numeric_limits<double>::quiet_NaN();
53 num_correspondences_(0),
54 num_visible_points3D_(0),
55 qvec_(1.0, 0.0, 0.0, 0.0),
57 qvec_prior_(kNaN, kNaN, kNaN, kNaN),
58 tvec_prior_(kNaN, kNaN, kNaN) {}
61 CHECK_EQ(camera_id_, camera.
CameraId());
62 point3D_visibility_pyramid_ =
72 CHECK(points2D_.empty());
73 points2D_.resize(
points.size());
74 num_correspondences_have_point3D_.resize(
points.size(), 0);
77 points2D_[point2D_idx].SetXY(
points[point2D_idx]);
82 CHECK(points2D_.empty());
84 num_correspondences_have_point3D_.resize(
points.size(), 0);
90 class Point2D& point2D = points2D_.at(point2D_idx);
98 class Point2D& point2D = points2D_.at(point2D_idx);
106 return std::find_if(points2D_.begin(), points2D_.end(),
107 [point3D_id](
const class Point2D& point2D) {
108 return point2D.Point3DId() == point3D_id;
109 }) != points2D_.end();
113 const class Point2D& point2D = points2D_.at(point2D_idx);
115 num_correspondences_have_point3D_[point2D_idx] += 1;
116 if (num_correspondences_have_point3D_[point2D_idx] == 1) {
117 num_visible_points3D_ += 1;
120 point3D_visibility_pyramid_.
SetPoint(point2D.
X(), point2D.
Y());
122 assert(num_visible_points3D_ <= num_observations_);
126 const class Point2D& point2D = points2D_.at(point2D_idx);
128 num_correspondences_have_point3D_[point2D_idx] -= 1;
129 if (num_correspondences_have_point3D_[point2D_idx] == 0) {
130 num_visible_points3D_ -= 1;
133 point3D_visibility_pyramid_.
ResetPoint(point2D.
X(), point2D.
Y());
135 assert(num_visible_points3D_ <= num_observations_);
camera_t CameraId() const
static const int kNumPoint3DVisibilityPyramidLevels
Eigen::Matrix3x4d ProjectionMatrix() const
void SetPoints2D(const std::vector< Eigen::Vector2d > &points)
void ResetPoint3DForPoint2D(const point2D_t point2D_idx)
void DecrementCorrespondenceHasPoint3D(const point2D_t point2D_idx)
Eigen::Matrix3x4d InverseProjectionMatrix() const
Eigen::Vector3d ViewingDirection() const
bool HasPoint3D(const point3D_t point3D_id) const
void SetUp(const Camera &camera)
void IncrementCorrespondenceHasPoint3D(const point2D_t point2D_idx)
Eigen::Matrix3d RotationMatrix() const
Eigen::Vector3d ProjectionCenter() const
void SetPoint3DForPoint2D(const point2D_t point2D_idx, const point3D_t point3D_id)
void SetPoint3DId(const point3D_t point3D_id)
void ResetPoint(const double x, const double y)
void SetPoint(const double x, const double y)
Matrix< double, 3, 4 > Matrix3x4d
Eigen::Vector4d NormalizeQuaternion(const Eigen::Vector4d &qvec)
const camera_t kInvalidCameraId
Eigen::Matrix3x4d InvertProjectionMatrix(const Eigen::Matrix3x4d &proj_matrix)
const point3D_t kInvalidPoint3DId
Eigen::Vector3d ProjectionCenterFromPose(const Eigen::Vector4d &qvec, const Eigen::Vector3d &tvec)
const image_t kInvalidImageId
Eigen::Matrix3x4d ComposeProjectionMatrix(const Eigen::Vector4d &qvec, const Eigen::Vector3d &tvec)
Eigen::Matrix3d QuaternionToRotationMatrix(const Eigen::Vector4d &qvec)