#pragma once #include #include #include #include // ================================================================================================= struct Camera { std::string name; std::array, 3> K; std::vector DC; std::array, 3> R; std::array, 3> T; int width; int height; std::string type; friend std::ostream &operator<<(std::ostream &out, Camera const &camera); std::string to_string() const; }; // ================================================================================================= class CameraInternal { public: CameraInternal(const Camera &cam); Camera cam; std::array, 3> invR; std::array center; std::array, 3> newK; std::array, 3> invK; static std::array, 3> transpose3x3( const std::array, 3> &M); static std::array, 3> invert3x3( const std::array, 3> &M); static void undistort_point_pinhole(std::array &p, const std::vector &k); static void undistort_point_fisheye(std::array &p, const std::vector &k); std::array, 3> calc_optimal_camera_matrix_fisheye( float balance, std::pair new_size); std::array, 3> calc_optimal_camera_matrix_pinhole( float alpha, std::pair new_size); };