@@ -39,7 +39,7 @@ typename CameraProjectionTemplated<Scalar>::ProjectionVariant getProjectionVaria
3939template <typename Scalar>
4040CameraProjectionTemplated<Scalar>::CameraProjectionTemplated(
4141 const ModelType& type,
42- const Eigen::Matrix <Scalar, Eigen::Dynamic, 1 >& projectionParams)
42+ const Eigen::Vector <Scalar, Eigen::Dynamic>& projectionParams)
4343 : modelName_(type),
4444 projectionParams_ (projectionParams),
4545 projectionVariant_(getProjectionVariant<Scalar>(type)) {}
@@ -51,15 +51,50 @@ typename CameraProjectionTemplated<Scalar>::ModelType CameraProjectionTemplated<
5151}
5252
5353template <typename Scalar>
54- Eigen::Matrix <Scalar, Eigen::Dynamic, 1 > CameraProjectionTemplated<Scalar>::projectionParams()
54+ const Eigen::Vector <Scalar, Eigen::Dynamic>& CameraProjectionTemplated<Scalar>::projectionParams()
5555 const {
5656 return projectionParams_;
5757}
5858
5959template <typename Scalar>
60- Eigen::Matrix<Scalar, 2 , 1 > CameraProjectionTemplated<Scalar>::getFocalLengths() const {
60+ Eigen::Vector<Scalar, Eigen::Dynamic>& CameraProjectionTemplated<Scalar>::projectionParamsMut() {
61+ return projectionParams_;
62+ }
63+
64+ template <typename Scalar>
65+ int CameraProjectionTemplated<Scalar>::numParameters() const {
66+ return std::visit (
67+ [](auto && projection) -> int {
68+ using T = std::decay_t <decltype (projection)>;
69+ return T::kNumParams ;
70+ },
71+ projectionVariant_);
72+ }
73+
74+ template <typename Scalar>
75+ int CameraProjectionTemplated<Scalar>::numProjectionParameters() const {
76+ return std::visit (
77+ [](auto && projection) -> int {
78+ using T = std::decay_t <decltype (projection)>;
79+ return T::kNumParams - T::kNumDistortionParams ;
80+ },
81+ projectionVariant_);
82+ }
83+
84+ template <typename Scalar>
85+ int CameraProjectionTemplated<Scalar>::numDistortionParameters() const {
86+ return std::visit (
87+ [](auto && projection) -> int {
88+ using T = std::decay_t <decltype (projection)>;
89+ return T::kNumDistortionParams ;
90+ },
91+ projectionVariant_);
92+ }
93+
94+ template <typename Scalar>
95+ Eigen::Vector<Scalar, 2 > CameraProjectionTemplated<Scalar>::getFocalLengths() const {
6196 return std::visit (
62- [this ](auto && projection) -> Eigen::Matrix <Scalar, 2 , 1 > {
97+ [this ](auto && projection) -> Eigen::Vector <Scalar, 2 > {
6398 using T = std::decay_t <decltype (projection)>;
6499 int focalXIdx = T::kFocalXIdx ;
65100 int focalYIdx = T::kFocalYIdx ;
@@ -69,9 +104,9 @@ Eigen::Matrix<Scalar, 2, 1> CameraProjectionTemplated<Scalar>::getFocalLengths()
69104}
70105
71106template <typename Scalar>
72- Eigen::Matrix <Scalar, 2 , 1 > CameraProjectionTemplated<Scalar>::getPrincipalPoint() const {
107+ Eigen::Vector <Scalar, 2 > CameraProjectionTemplated<Scalar>::getPrincipalPoint() const {
73108 return std::visit (
74- [this ](auto && projection) -> Eigen::Matrix <Scalar, 2 , 1 > {
109+ [this ](auto && projection) -> Eigen::Vector <Scalar, 2 > {
75110 using T = std::decay_t <decltype (projection)>;
76111 int principalPointColIdx = T::kPrincipalPointColIdx ;
77112 int principalPointRowIdx = T::kPrincipalPointRowIdx ;
@@ -81,20 +116,25 @@ Eigen::Matrix<Scalar, 2, 1> CameraProjectionTemplated<Scalar>::getPrincipalPoint
81116}
82117
83118template <typename Scalar>
84- Eigen::Matrix<Scalar, 2 , 1 > CameraProjectionTemplated<Scalar>::project(
85- const Eigen::Matrix<Scalar, 3 , 1 >& pointInCamera,
86- Eigen::Matrix<Scalar, 2 , 3 >* jacobianWrtPoint) const {
119+ Eigen::Vector<Scalar, 2 > CameraProjectionTemplated<Scalar>::project(
120+ const Eigen::Vector<Scalar, 3 >& pointInCamera,
121+ Eigen::Ref<Eigen::Matrix<Scalar, 2 , 3 >> jacobianWrtPoint,
122+ Eigen::Ref<Eigen::Matrix<Scalar, 2 , Eigen::Dynamic>> jacobianWrtParams) const {
87123 return std::visit (
88124 [&](auto && projection) {
89125 using T = std::decay_t <decltype (projection)>;
90- return T::project (pointInCamera, projectionParams_, jacobianWrtPoint);
126+ return T::project (
127+ pointInCamera,
128+ projectionParams_,
129+ isNull (jacobianWrtPoint) ? nullptr : &jacobianWrtPoint,
130+ isNull (jacobianWrtParams) ? nullptr : &jacobianWrtParams);
91131 },
92132 projectionVariant_);
93133}
94134
95135template <typename Scalar>
96- Eigen::Matrix <Scalar, 3 , 1 > CameraProjectionTemplated<Scalar>::unproject(
97- const Eigen::Matrix <Scalar, 2 , 1 >& cameraPixel) const {
136+ Eigen::Vector <Scalar, 3 > CameraProjectionTemplated<Scalar>::unproject(
137+ const Eigen::Vector <Scalar, 2 >& cameraPixel) const {
98138 return std::visit (
99139 [&](auto && projection) {
100140 using T = std::decay_t <decltype (projection)>;
@@ -127,7 +167,7 @@ template <typename Scalar>
127167template <typename OtherScalar>
128168[[nodiscard]] CameraProjectionTemplated<OtherScalar> CameraProjectionTemplated<Scalar>::cast()
129169 const {
130- Eigen::Matrix <OtherScalar, Eigen::Dynamic, 1 > castedParams =
170+ Eigen::Vector <OtherScalar, Eigen::Dynamic> castedParams =
131171 projectionParams_.template cast <OtherScalar>();
132172 auto castedModelName =
133173 static_cast <typename CameraProjectionTemplated<OtherScalar>::ModelType>(modelName_);
0 commit comments