NDEVR
API Documentation
GeometricCamera.h
1
2#pragma once
3#include "DLLInfo.h"
4#include "Base/Headers/Buffer.hpp"
5#include <Eigen/Geometry>
6namespace Sophus {
7 template <class Scalar_, int Options>
8 class SE3;
9 using SE3d = SE3<double, 0>;
10 using SE3f = SE3<float, 0>;
11} // namespace Sophus
12
13namespace cv
14{
15 template<typename _Tp> class Point3_;
16 typedef Point3_<float> Point3f;
17 template<typename _Tp> class Point_;
18 typedef Point_<float> Point2f;
19 class Mat;
20 class KeyPoint;
21}
22namespace NDEVR
23{
26
27 public:
32 GeometricCamera(const Buffer<float> &_vParameters)
33 : mvParameters(_vParameters)
34 {}
35 virtual ~GeometricCamera() {}
36
38 virtual cv::Point2f project(const cv::Point3f &p3D) = 0;
40 virtual Eigen::Vector2d project(const Eigen::Vector3d & v3D) = 0;
42 virtual Eigen::Vector2f project(const Eigen::Vector3f & v3D) = 0;
44 virtual Eigen::Vector2f projectMat(const cv::Point3f& p3D) = 0;
45
48 virtual float uncertainty2(const Eigen::Matrix<g_type,2,1> &p2D) = 0;
49
51 virtual Eigen::Vector3f unprojectEig(const cv::Point2f &p2D) = 0;
53 virtual cv::Point3f unproject(const cv::Point2f &p2D) = 0;
54
57 virtual Eigen::Matrix<g_type,2,3> projectJac(const Eigen::Vector3<g_type>& v3D) = 0;
58
59 virtual bool ReconstructWithTwoViews(
60 const PrimitiveAlignedBuffer<cv::KeyPoint, 32>& vKeys1
61 , const PrimitiveAlignedBuffer<cv::KeyPoint, 32>& vKeys2
62 , const Buffer<uint04> &vMatches12
63 , Sophus::SE3f &T21
64 , AlocatingAlignedBuffer<cv::Point3f, 8>& vP3D
65 , Buffer<bool> &vbTriangulated) = 0;
66
68 virtual cv::Mat toK() = 0;
70 virtual Eigen::Matrix3f toK_() = 0;
71
81 virtual bool epipolarConstrain(GeometricCamera* otherCamera, const cv::KeyPoint& kp1, const cv::KeyPoint& kp2, const Eigen::Matrix3f& R12, const Eigen::Vector3f& t12, const float sigmaLevel, const float unc) = 0;
82
84 float getParameter(const int i){return mvParameters[i];}
86 void setParameter(const float p, const uint04 i){mvParameters[i] = p;}
87
89 uint04 size() const {return mvParameters.size();}
90
91 virtual bool matchAndtriangulate(const cv::KeyPoint& kp1, const cv::KeyPoint& kp2, GeometricCamera* pOther,
92 Sophus::SE3f& Tcw1, Sophus::SE3f& Tcw2,
93 const float sigmaLevel1, const float sigmaLevel2,
94 Eigen::Vector3f& x3Dtriangulated) = 0;
95
97 uint04 GetId() { return mnId; }
99 virtual bool isEqual(const GeometricCamera* pCam) const = 0;
101 uint04 type() const { return mnType; }
102
103 static constexpr uint04 CAM_PINHOLE = 0;
104 static constexpr uint04 CAM_FISHEYE = 1;
105
107
108 protected:
110 uint04 mnId = Constant<uint04>::Invalid;
111 uint04 mnType = Constant<uint04>::Invalid;
112 };
113}
The equivelent of std::vector but with a bit more control.
Definition Buffer.hpp:58
Abstract interface for geometric camera models (pinhole, fisheye, etc.).
virtual float uncertainty2(const Eigen::Matrix< g_type, 2, 1 > &p2D)=0
Computes the squared uncertainty at a 2D image point.
virtual Eigen::Vector2f projectMat(const cv::Point3f &p3D)=0
Projects a cv::Point3f to 2D and returns as Eigen vector.
virtual bool isEqual(const GeometricCamera *pCam) const =0
Checks equality with another camera model.
static uint04 nNextId
Global counter for assigning unique camera IDs.
virtual Eigen::Vector2d project(const Eigen::Vector3d &v3D)=0
Projects a 3D point to 2D image coordinates (double precision).
virtual Eigen::Matrix< g_type, 2, 3 > projectJac(const Eigen::Vector3< g_type > &v3D)=0
Computes the 2x3 Jacobian of the projection function.
static constexpr uint04 CAM_PINHOLE
Pinhole camera type identifier.
GeometricCamera()
Default constructor.
virtual Eigen::Vector2f project(const Eigen::Vector3f &v3D)=0
Projects a 3D point to 2D image coordinates (single precision).
GeometricCamera(const Buffer< float > &_vParameters)
Constructs with the given intrinsic parameters.
static constexpr uint04 CAM_FISHEYE
Fisheye camera type identifier.
virtual Eigen::Vector3f unprojectEig(const cv::Point2f &p2D)=0
Unprojects a 2D point to a 3D ray as an Eigen vector.
virtual bool epipolarConstrain(GeometricCamera *otherCamera, const cv::KeyPoint &kp1, const cv::KeyPoint &kp2, const Eigen::Matrix3f &R12, const Eigen::Vector3f &t12, const float sigmaLevel, const float unc)=0
Checks whether two keypoints satisfy the epipolar constraint.
float getParameter(const int i)
Returns the i-th intrinsic parameter.
Buffer< float > mvParameters
Camera intrinsic parameters.
void setParameter(const float p, const uint04 i)
Sets the i-th intrinsic parameter.
uint04 size() const
Returns the number of intrinsic parameters.
uint04 mnType
Camera model type.
uint04 mnId
Unique camera identifier.
virtual Eigen::Matrix3f toK_()=0
Returns the camera calibration matrix as an Eigen matrix.
uint04 GetId()
Returns the unique camera id.
uint04 type() const
Returns the camera type (CAM_PINHOLE or CAM_FISHEYE).
virtual cv::Point2f project(const cv::Point3f &p3D)=0
Projects a 3D point to 2D image coordinates (cv::Point3f overload).
virtual cv::Point3f unproject(const cv::Point2f &p2D)=0
Unprojects a 2D point to a 3D point.
virtual cv::Mat toK()=0
Returns the camera calibration matrix as a cv::Mat.
The primary namespace for the NDEVR SDK.
uint32_t uint04
-Defines an alias representing a 4 byte, unsigned integer -Can represent exact integer values 0 throu...