 |
AliceVision
Photogrammetric Computer Vision Framework
|
9 #include <aliceVision/numeric/numeric.hpp>
10 #include <aliceVision/numeric/projection.hpp>
11 #include <aliceVision/camera/cameraCommon.hpp>
12 #include <aliceVision/camera/IntrinsicScaleOffsetDisto.hpp>
13 #include <aliceVision/geometry/Pose3.hpp>
15 #include "DistortionFisheye1.hpp"
37 double focalLengthPix,
40 std::shared_ptr<Distortion> distortion =
nullptr)
42 _circleRadius(std::min(
w,
h) * 0.5),
43 _circleCenter(
w / 2.0,
h / 2.0)
48 double focalLengthPix,
51 double circleRadiusPix,
52 std::shared_ptr<Distortion> distortion =
nullptr)
54 _circleRadius(circleRadiusPix != 0.0 ? circleRadiusPix : std::min(
w,
h) * 0.5),
55 _circleCenter(
w / 2.0,
h / 2.0)
62 static std::shared_ptr<Equidistant> cast(std::shared_ptr<IntrinsicBase> sptr);
68 EINTRINSIC
getType()
const override;
70 Vec2
transformProject(
const Eigen::Matrix4d& pose,
const Vec4& pt,
bool applyDistortion =
true)
const override;
77 Vec2
project(
const Vec4& pt,
bool applyDistortion =
true)
const override;
81 Eigen::Matrix<double, 2, 2> getDerivativeTransformProjectWrtScale(
const Eigen::Matrix4d& pose,
const Vec4& pt)
const;
83 Eigen::Matrix<double, 2, 2> getDerivativeTransformProjectWrtPrincipalPoint(
const Eigen::Matrix4d& pose,
const Vec4& pt)
const;
89 Eigen::Matrix<double, 3, 2> getDerivativetoUnitSphereWrtPoint(
const Vec2& pt)
const;
91 Eigen::Matrix<double, 3, 2> getDerivativetoUnitSphereWrtScale(
const Vec2& pt)
const;
100 Eigen::Matrix<double, 2, Eigen::Dynamic> getDerivativeTransformProjectWrtDistortion(
const Eigen::Matrix4d& pose,
const Vec4& pt)
const override;
102 Eigen::Matrix<double, 3, Eigen::Dynamic> getDerivativeBackProjectUnitWrtDistortion(
const Vec2& pt2D)
const override;
107 Vec2
cam2ima(
const Vec2& p)
const override;
109 Eigen::Matrix2d getDerivativeCam2ImaWrtPoint()
const override;
112 Vec2
ima2cam(
const Vec2& p)
const override;
114 Eigen::Matrix2d getDerivativeIma2CamWrtPoint()
const override;
116 Eigen::Matrix2d getDerivativeIma2CamWrtPrincipalPoint()
const override;
125 inline double getCircleRadius()
const {
return _circleRadius; }
127 inline void setCircleRadius(
double radius) { _circleRadius = radius; }
129 inline double getCircleCenterX()
const {
return _circleCenter(0); }
131 inline void setCircleCenterX(
double x) { _circleCenter(0) = x; }
133 inline double getCircleCenterY()
const {
return _circleCenter(1); }
135 inline void setCircleCenterY(
double y) { _circleCenter(1) = y; }
137 inline Vec2 getCircleCenter()
const {
return _circleCenter; }
158 double _circleRadius{0.0};
159 Vec2 _circleCenter{0.0, 0.0};
double imagePlaneToCameraPlaneError(double value) const override
Normalize a given unit pixel error to the camera plane.
Definition: Equidistant.cpp:290
Eigen::Matrix< double, 3, Eigen::Dynamic > getDerivativeBackProjectUnitWrtParams(const Vec2 &pt2D) const override
Get the derivative of the unit sphere backprojection.
Definition: Equidistant.cpp:263
bool isVisibleRay(const Vec3 &ray) const override
Return true if this ray should be visible in the image.
Definition: Equidistant.cpp:302
EINTRINSIC getType() const override
Get embed camera type.
Definition: Equidistant.cpp:318
Equidistant * clone() const override
Polymorphic clone.
Definition: Equidistant.hpp:60
unsigned int h() const
Get the intrinsic image height.
Definition: IntrinsicBase.hpp:58
virtual bool isValid() const
Return true if the intrinsic is valid.
Definition: IntrinsicBase.hpp:379
Definition: checkerDetector.cpp:32
Eigen::Matrix< double, 2, Eigen::Dynamic > getDerivativeTransformProjectWrtParams(const Eigen::Matrix4d &pose, const Vec4 &pt3D) const override
Get the derivative of a projection of a 3D point into the camera plane.
Definition: Equidistant.cpp:181
void assign(const IntrinsicBase &other) override
Assign object.
Definition: Equidistant.hpp:64
double pixelProbability() const override
how a one pixel change relates to an angular change
Definition: Equidistant.cpp:332
unsigned int w() const
Get the intrinsic image width.
Definition: IntrinsicBase.hpp:52
double getHorizontalFov() const override
Get the horizontal FOV in radians.
Definition: Equidistant.cpp:320
double getVerticalFov() const override
Get the vertical FOV in radians.
Definition: Equidistant.cpp:330
Class with disto.
Definition: IntrinsicScaleOffsetDisto.hpp:23
Equidistant is a camera model used for fisheye optics. See https://en.wikipedia.org/wiki/Fisheye_lens...
Definition: Equidistant.hpp:28
bool isValid() const override
Return true if the intrinsic is valid.
Definition: Equidistant.hpp:66
Vec2 ima2cam(const Vec2 &p) const override
Transform a point from the image plane to the camera plane.
Definition: Equidistant.cpp:296
Vec2 cam2ima(const Vec2 &p) const override
Transform a point from the camera plane to the image plane.
Definition: Equidistant.cpp:292
Vec2 transformProject(const Eigen::Matrix4d &pose, const Vec4 &pt, bool applyDistortion=true) const override
Projection of a 3D point into the camera plane (Apply pose, disto (if any) and Intrinsics)
Definition: Equidistant.cpp:17
Basis class for all intrinsic parameters of a camera.
Definition: IntrinsicBase.hpp:27
Vec3 toUnitSphere(const Vec2 &pt) const override
Transform a given point (in pixels) to unit sphere in meters.
Definition: Equidistant.cpp:191
Vec2 project(const Vec4 &pt, bool applyDistortion=true) const override
Projection of a 3D point into the camera plane (Apply disto (if any) and Intrinsics)
Definition: Equidistant.cpp:43
Eigen::Matrix< double, 2, 3 > getDerivativeTransformProjectWrtPoint3(const Eigen::Matrix4d &pose, const Vec4 &pt) const override
Get the derivative of a projection of a 3D point into the camera plane.
Definition: Equidistant.cpp:67