#pragma once #include #include #include #include // ================================================================================================= enum class CameraModel { Pinhole, Fisheye, }; const char *camera_model_name(CameraModel model); CameraModel parse_camera_model(const std::string &value); // ================================================================================================= struct Camera { std::string name; std::array, 3> K; std::array DC = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f}; std::array, 3> R; std::array, 3> T; int width = 0; int height = 0; CameraModel model = CameraModel::Pinhole; std::array, 3> invR {}; std::array center {}; std::array, 3> newK {}; std::array, 3> invK {}; friend std::ostream &operator<<(std::ostream &out, Camera const &camera); std::string to_string() const; }; Camera make_camera( std::string name, std::array, 3> K, std::array DC, std::array, 3> R, std::array, 3> T, int width, int height, CameraModel model); void undistort_point_pinhole(std::array &point, const std::array &distortion); void undistort_point_fisheye(std::array &point, const std::array &distortion);