47 prior_focal_length_(false) {}
76 Eigen::Matrix3d K = Eigen::Matrix3d::Identity();
79 if (idxs.size() == 1) {
80 K(0, 0) = params_[idxs[0]];
81 K(1, 1) = params_[idxs[0]];
82 }
else if (idxs.size() == 2) {
83 K(0, 0) = params_[idxs[0]];
84 K(1, 1) = params_[idxs[1]];
87 <<
"Camera model must either have 1 or 2 focal length parameters.";
102 double focal_length = 0;
103 for (
const auto idx : focal_length_idxs) {
104 focal_length += params_[idx];
106 return focal_length / focal_length_idxs.size();
111 CHECK_EQ(idxs.size(), 1);
112 return params_[idxs[0]];
117 CHECK_EQ(idxs.size(), 2);
118 return params_[idxs[0]];
123 CHECK_EQ(idxs.size(), 2);
124 return params_[idxs[1]];
129 for (
const auto idx : idxs) {
130 params_[idx] = focal_length;
136 CHECK_EQ(idxs.size(), 2);
137 params_[idxs[0]] = focal_length_x;
142 CHECK_EQ(idxs.size(), 2);
143 params_[idxs[1]] = focal_length_y;
148 CHECK_EQ(idxs.size(), 2);
149 return params_[idxs[0]];
154 CHECK_EQ(idxs.size(), 2);
155 return params_[idxs[1]];
160 CHECK_EQ(idxs.size(), 2);
161 params_[idxs[0]] = ppx;
166 CHECK_EQ(idxs.size(), 2);
167 params_[idxs[1]] = ppy;
173 const std::vector<double> new_camera_params = CSVToVector<double>(
string);
178 params_ = new_camera_params;
187 const double max_focal_length_ratio,
188 const double max_extra_param)
const {
190 min_focal_length_ratio,
191 max_focal_length_ratio, max_extra_param);
196 if (std::abs(params_[idx]) > 1
e-8) {
206 model_id_ = model_id;
213 const double focal_length,
const size_t width,
220 Eigen::Vector2d world_point;
222 &world_point(0), &world_point(1));
231 Eigen::Vector2d image_point;
233 &image_point(0), &image_point(1));
238 CHECK_GT(scale, 0.0);
239 const double scale_x =
240 std::round(scale * width_) /
static_cast<double>(width_);
241 const double scale_y =
242 std::round(scale * height_) /
static_cast<double>(height_);
243 width_ =
static_cast<size_t>(std::round(scale * width_));
244 height_ =
static_cast<size_t>(std::round(scale * height_));
254 <<
"Camera model must either have 1 or 2 focal length parameters.";
259 const double scale_x =
260 static_cast<double>(
width) /
static_cast<double>(width_);
261 const double scale_y =
262 static_cast<double>(
height) /
static_cast<double>(height_);
274 <<
"Camera model must either have 1 or 2 focal length parameters.";
bool VerifyParams() const
void InitializeWithName(const std::string &model_name, const double focal_length, const size_t width, const size_t height)
double FocalLengthY() const
void InitializeWithId(const int model_id, const double focal_length, const size_t width, const size_t height)
Eigen::Vector2d ImageToWorld(const Eigen::Vector2d &image_point) const
double MeanFocalLength() const
void SetModelIdFromName(const std::string &model_name)
double ImageToWorldThreshold(const double threshold) const
bool SetParamsFromString(const std::string &string)
std::string ModelName() const
void SetPrincipalPointX(const double ppx)
std::string ParamsToString() const
void SetFocalLengthX(const double focal_length_x)
const std::vector< size_t > & PrincipalPointIdxs() const
void Rescale(const double scale)
void SetFocalLengthY(const double focal_length_y)
void SetFocalLength(const double focal_length)
bool HasBogusParams(const double min_focal_length_ratio, const double max_focal_length_ratio, const double max_extra_param) const
double FocalLength() const
void SetPrincipalPointY(const double ppy)
std::string ParamsInfo() const
const std::vector< size_t > & ExtraParamsIdxs() const
Eigen::Matrix3d CalibrationMatrix() const
double FocalLengthX() const
const std::vector< size_t > & FocalLengthIdxs() const
double PrincipalPointX() const
Eigen::Vector2d WorldToImage(const Eigen::Vector2d &world_point) const
double PrincipalPointY() const
void SetModelId(const int model_id)
bool IsUndistorted() const
void CameraModelImageToWorld(const int model_id, const std::vector< double > ¶ms, const double x, const double y, double *u, double *v)
const std::vector< size_t > & CameraModelFocalLengthIdxs(const int model_id)
static const int kInvalidCameraModelId
bool ExistsCameraModelWithId(const int model_id)
bool ExistsCameraModelWithName(const std::string &model_name)
const camera_t kInvalidCameraId
bool CameraModelHasBogusParams(const int model_id, const std::vector< double > ¶ms, const size_t width, const size_t height, const double min_focal_length_ratio, const double max_focal_length_ratio, const double max_extra_param)
size_t CameraModelNumParams(const int model_id)
bool CameraModelVerifyParams(const int model_id, const std::vector< double > ¶ms)
const std::vector< size_t > & CameraModelExtraParamsIdxs(const int model_id)
std::string CameraModelIdToName(const int model_id)
const std::vector< size_t > & CameraModelPrincipalPointIdxs(const int model_id)
double CameraModelImageToWorldThreshold(const int model_id, const std::vector< double > ¶ms, const double threshold)
std::string VectorToCSV(const std::vector< T > &values)
std::string CameraModelParamsInfo(const int model_id)
void CameraModelWorldToImage(const int model_id, const std::vector< double > ¶ms, const double u, const double v, double *x, double *y)
std::vector< double > CameraModelInitializeParams(const int model_id, const double focal_length, const size_t width, const size_t height)
int CameraModelNameToId(const std::string &model_name)