@@ -116,7 +116,7 @@ Eigen::Matrix<double, 2, 3> Equidistant::getDerivativeTransformProjectWrtPoint3(
116116 return getDerivativeCam2ImaWrtPoint () * getDerivativeAddDistoWrtPt (P) * d_P_d_angles * d_angles_d_X * d_X_d_pt;
117117}
118118
119- Eigen::Matrix<double , 2 , 3 > Equidistant::getDerivativeTransformProjectWrtDisto (const Eigen::Matrix4d& pose, const Vec4& pt) const
119+ Eigen::Matrix<double , 2 , Eigen::Dynamic > Equidistant::getDerivativeTransformProjectWrtDistortion (const Eigen::Matrix4d& pose, const Vec4& pt) const
120120{
121121 Eigen::Matrix4d T = pose;
122122 const Vec4 X = T * pt; // apply pose
@@ -182,17 +182,11 @@ Eigen::Matrix<double, 2, 2> Equidistant::getDerivativeTransformProjectWrtPrincip
182182
183183Eigen::Matrix<double , 2 , Eigen::Dynamic> Equidistant::getDerivativeTransformProjectWrtParams (const Eigen::Matrix4d& pose, const Vec4& pt3D) const
184184{
185- Eigen::Matrix<double , 2 , Eigen::Dynamic> ret (2 , getParams ().size ());
185+ Eigen::Matrix<double , 2 , Eigen::Dynamic> ret (2 , getParameters ().size ());
186186
187187 ret.block <2 , 2 >(0 , 0 ) = getDerivativeTransformProjectWrtScale (pose, pt3D);
188188 ret.block <2 , 2 >(0 , 2 ) = getDerivativeTransformProjectWrtPrincipalPoint (pose, pt3D);
189189
190- if (_pDistortion != nullptr )
191- {
192- const size_t distortionSize = _pDistortion->getDistortionParametersCount ();
193- ret.block (0 , 4 , 2 , distortionSize) = getDerivativeTransformProjectWrtDisto (pose, pt3D);
194- }
195-
196190 return ret;
197191}
198192
@@ -270,21 +264,28 @@ Eigen::Matrix<double, 3, 2> Equidistant::getDerivativetoUnitSphereWrtScale(const
270264
271265Eigen::Matrix<double , 3 , Eigen::Dynamic> Equidistant::getDerivativeBackProjectUnitWrtParams (const Vec2& pt2D) const
272266{
273- size_t disto_size = getDistortionParamsSize ();
274-
275267 const Vec2 ptMeters = ima2cam (pt2D);
276268 const Vec2 ptUndist = removeDistortion (ptMeters);
277269 const Vec3 ptSphere = toUnitSphere (ptUndist);
278270
279- Eigen::Matrix<double , Eigen::Dynamic, Eigen::Dynamic> J (3 , getParams ().size ());
271+ Eigen::Matrix<double , Eigen::Dynamic, Eigen::Dynamic> J (3 , getParameters ().size ());
280272
281273 J.block <3 , 2 >(0 , 0 ) = getDerivativetoUnitSphereWrtScale (ptUndist);
282274 J.block <3 , 2 >(0 , 2 ) = getDerivativetoUnitSphereWrtPoint (ptUndist) * getDerivativeRemoveDistoWrtPt (ptMeters) * getDerivativeIma2CamWrtPrincipalPoint ();
283275
284- if (disto_size > 0 )
285- {
286- J.block (0 , 4 , 3 , disto_size) = getDerivativetoUnitSphereWrtPoint (ptUndist) * getDerivativeRemoveDistoWrtDisto (ptMeters);
287- }
276+ return J;
277+ }
278+
279+ Eigen::Matrix<double , 3 , Eigen::Dynamic> Equidistant::getDerivativeBackProjectUnitWrtDistortion (const Vec2& pt2D) const
280+ {
281+ size_t disto_size = getDistortionParamsSize ();
282+
283+ const Vec2 ptMeters = ima2cam (pt2D);
284+ const Vec2 ptUndist = removeDistortion (ptMeters);
285+ const Vec3 ptSphere = toUnitSphere (ptUndist);
286+
287+ Eigen::Matrix<double , Eigen::Dynamic, Eigen::Dynamic> J (3 , disto_size);
288+ J = getDerivativetoUnitSphereWrtPoint (ptUndist) * getDerivativeRemoveDistoWrtDisto (ptMeters);
288289
289290 return J;
290291}
0 commit comments