class sophus::BrownConradyTransformΒΆ

#include <brown_conrady.h>

class BrownConradyTransform {
public:
    // typedefs

    using ProjInCameraZ1Plane = Eigen::Matrix<TScalar, 2, 1> ;
    using PixelImage = Eigen::Matrix<TScalar, 2, 1> ;
    using Params = Eigen::Matrix<TScalar, kNumParams, 1> ;
    using DistorationParams = Eigen::Matrix<TScalar, kNumDistortionParams, 1> ;

    // fields

    static constexpr int kNumDistortionParams = 8;
    static constexpr int kNumParams = kNumDistortionParams + 4;
    static constexpr const std::string_view kProjectionModel =       "BrownConrady: fx, fy, cx, cy, k1, k2, p1, p2, k3, k4, k5, k6";

    // methods

    template <class TParamScalarT, class TPointScalarT>
    static PixelImage<typename Eigen::ScalarBinaryOpTraits<TParamScalarT, TPointScalarT>::ReturnType> projImpl(
        DistorationParams<TParamScalarT> const& distortion,
        PixelImage<TPointScalarT> const& point_normalized
        );

    template <class TScalar>
    static PixelImage<TScalar> unprojImpl(
        DistorationParams<TScalar> const& distortion,
        PixelImage<TScalar> const& uv_normalized
        );

    template <class TParamsTypeT, class TPointTypeT>
    static PixelImage<typename TPointTypeT::Scalar> distort(
        Eigen::MatrixBase<TParamsTypeT> const& params,
        Eigen::MatrixBase<TPointTypeT> const& proj_point_in_camera_z1_plane
        );

    template <class TScalar>
    static ProjInCameraZ1Plane<TScalar> undistort(
        Params<TScalar> const& params,
        PixelImage<TScalar> const& pixel_image
        );

    template <class TParamsTypeT, class TPointTypeT>
    static Eigen::Matrix<typename TPointTypeT::Scalar, 2, 2> dxDistort(
        Eigen::MatrixBase<TParamsTypeT> const& params,
        Eigen::MatrixBase<TPointTypeT> const& proj_point_in_camera_z1_plane
        );
};