32 #define TEST_NAME "base/camera_models"
39 template <
typename CameraModel>
42 double u, v,
x,
y, xx, yy;
43 CameraModel::WorldToImage(params.data(), u0, v0, &
x, &
y);
45 BOOST_CHECK_EQUAL(
x, xx);
46 BOOST_CHECK_EQUAL(
y, yy);
47 CameraModel::ImageToWorld(params.data(),
x,
y, &u, &v);
48 BOOST_CHECK_LT(std::abs(u - u0), 1
e-6);
49 BOOST_CHECK_LT(std::abs(v - v0), 1
e-6);
52 template <
typename CameraModel>
55 double u, v,
x,
y, uu, vv;
56 CameraModel::ImageToWorld(params.data(), x0, y0, &u, &v);
58 BOOST_CHECK_EQUAL(u, uu);
59 BOOST_CHECK_EQUAL(v, vv);
60 CameraModel::WorldToImage(params.data(), u, v, &
x, &
y);
61 BOOST_CHECK_LT(std::abs(
x - x0), 1
e-6);
62 BOOST_CHECK_LT(std::abs(
y - y0), 1
e-6);
65 template <
typename CameraModel>
69 const std::vector<double> default_params =
74 CameraModel::params_info);
76 &CameraModel::focal_length_idxs);
78 &CameraModel::principal_point_idxs);
80 &CameraModel::extra_params_idxs);
82 CameraModel::num_params);
85 100, 100, 0.1, 2.0, 1.0));
87 100, 100, 0.1, 0.5, 1.0));
89 100, 100, 1.5, 2.0, 1.0));
90 if (CameraModel::extra_params_idxs.
size() > 0) {
92 100, 100, 0.1, 2.0, -0.1));
111 CameraModel::model_id);
114 CameraModel::model_name);
116 for (
double u = -0.5; u <= 0.5; u += 0.1) {
117 for (
double v = -0.5; v <= 0.5; v += 0.1) {
118 TestWorldToImageToWorld<CameraModel>(params, u, v);
122 for (
double x = 0;
x <= 800;
x += 50) {
123 for (
double y = 0;
y <= 800;
y += 50) {
124 TestImageToWorldToImage<CameraModel>(params,
x,
y);
128 const auto pp_idxs = CameraModel::principal_point_idxs;
129 TestImageToWorldToImage<CameraModel>(params, params[pp_idxs.at(0)],
130 params[pp_idxs.at(1)]);
134 std::vector<double> params = {655.123, 386.123, 511.123};
135 TestModel<SimplePinholeCameraModel>(params);
139 std::vector<double> params = {651.123, 655.123, 386.123, 511.123};
140 TestModel<PinholeCameraModel>(params);
144 std::vector<double> params = {651.123, 386.123, 511.123, 0};
145 TestModel<SimpleRadialCameraModel>(params);
147 TestModel<SimpleRadialCameraModel>(params);
151 std::vector<double> params = {651.123, 386.123, 511.123, 0, 0};
152 TestModel<RadialCameraModel>(params);
154 TestModel<RadialCameraModel>(params);
156 TestModel<RadialCameraModel>(params);
158 TestModel<RadialCameraModel>(params);
162 std::vector<double> params = {651.123, 655.123, 386.123, 511.123,
163 -0.471, 0.223, -0.001, 0.001};
164 TestModel<OpenCVCameraModel>(params);
168 std::vector<double> params = {651.123, 655.123, 386.123, 511.123,
169 -0.471, 0.223, -0.001, 0.001};
170 TestModel<OpenCVFisheyeCameraModel>(params);
174 std::vector<double> params = {651.123, 655.123, 386.123, 511.123,
175 -0.471, 0.223, -0.001, 0.001,
176 0.001, 0.02, -0.02, 0.001};
177 TestModel<FullOpenCVCameraModel>(params);
181 std::vector<double> params = {651.123, 655.123, 386.123, 511.123, 0.9};
182 TestModel<FOVCameraModel>(params);
184 TestModel<FOVCameraModel>(params);
186 TestModel<FOVCameraModel>(params);
188 TestModel<FOVCameraModel>(params);
196 std::vector<double> params = {651.123, 386.123, 511.123, 0};
197 TestModel<SimpleRadialFisheyeCameraModel>(params);
199 TestModel<SimpleRadialFisheyeCameraModel>(params);
203 std::vector<double> params = {651.123, 386.123, 511.123, 0, 0};
204 TestModel<RadialFisheyeCameraModel>(params);
206 TestModel<RadialFisheyeCameraModel>(params);
208 TestModel<RadialFisheyeCameraModel>(params);
210 TestModel<RadialFisheyeCameraModel>(params);
214 std::vector<double> params = {651.123, 655.123, 386.123, 511.123,
215 -0.471, 0.223, -0.001, 0.001,
216 0.001, 0.02, -0.02, 0.001};
217 TestModel<ThinPrismFisheyeCameraModel>(params);
void TestWorldToImageToWorld(const std::vector< double > params, const double u0, const double v0)
BOOST_AUTO_TEST_CASE(TestSimplePinhole)
void TestImageToWorldToImage(const std::vector< double > params, const double x0, const double y0)
void TestModel(const std::vector< double > ¶ms)
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)
bool ExistsCameraModelWithId(const int model_id)
bool ExistsCameraModelWithName(const std::string &model_name)
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 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)
static const int model_id