Calibration Library 1.0.0
A C++ library for camera calibration and vision-related geometric transformations
Loading...
Searching...
No Matches
camera_matrix.h
Go to the documentation of this file.
1#pragma once
2
3// Eigen
4#include <Eigen/Core>
5#include <Eigen/Dense>
6
8
9namespace calib {
10
11// keep it simple aggregate for json io
12template <typename Scalar>
13struct CameraMatrixT final {
14 Scalar fx = Scalar(0);
15 Scalar fy = Scalar(0);
16 Scalar cx = Scalar(0);
17 Scalar cy = Scalar(0);
18 Scalar skew = Scalar(0);
19};
20
21template <typename Scalar>
22[[nodiscard]] auto matrix(const CameraMatrixT<Scalar>& cam) -> Eigen::Matrix<Scalar, 3, 3> {
23 Eigen::Matrix<Scalar, 3, 3> kmtx = Eigen::Matrix<Scalar, 3, 3>::Zero();
24 kmtx(0, 0) = cam.fx;
25 kmtx(1, 1) = cam.fy;
26 kmtx(0, 1) = cam.skew;
27 kmtx(0, 2) = cam.cx;
28 kmtx(1, 2) = cam.cy;
29 kmtx(2, 2) = Scalar(1);
30 return kmtx;
31}
32
33template <typename T, typename Scalar>
34[[nodiscard]] auto normalize(const CameraMatrixT<Scalar>& cam, const Eigen::Matrix<T, 2, 1>& pixel)
35 -> Eigen::Matrix<T, 2, 1> {
36 T y_coord = (pixel.y() - T(cam.cy)) / T(cam.fy);
37 T x_coord = (pixel.x() - T(cam.cx) - T(cam.skew) * y_coord) / T(cam.fx);
38 return {x_coord, y_coord};
39}
40
41template <typename T, typename Scalar>
42[[nodiscard]] auto denormalize(const CameraMatrixT<Scalar>& cam,
43 const Eigen::Matrix<T, 2, 1>& norm_xy) -> Eigen::Matrix<T, 2, 1> {
44 return {T(cam.fx) * norm_xy.x() + T(cam.skew) * norm_xy.y() + T(cam.cx),
45 T(cam.fy) * norm_xy.y() + T(cam.cy)};
46}
47
49
50struct CalibrationBounds final {
51 static constexpr double k_fx_min = 0.0;
52 static constexpr double k_fx_max = 2000.0;
53 static constexpr double k_fy_min = 0.0;
54 static constexpr double k_fy_max = 2000.0;
55 static constexpr double k_cx_min = 0.0;
56 static constexpr double k_cx_max = 1280.0;
57 static constexpr double k_cy_min = 0.0;
58 static constexpr double k_cy_max = 720.0;
59 static constexpr double k_skew_min = -0.01;
60 static constexpr double k_skew_max = 0.01;
61
62 double fx_min = k_fx_min;
63 double fx_max = k_fx_max;
64 double fy_min = k_fy_min;
65 double fy_max = k_fy_max;
66 double cx_min = k_cx_min;
67 double cx_max = k_cx_max;
68 double cy_min = k_cy_min;
69 double cy_max = k_cy_max;
72};
73
74} // namespace calib
std::vector< Eigen::Isometry3d > cam
Linear multi-camera extrinsics initialisation (DLT)
auto normalize(const CameraMatrixT< Scalar > &cam, const Eigen::Matrix< T, 2, 1 > &pixel) -> Eigen::Matrix< T, 2, 1 >
auto matrix(const CameraMatrixT< Scalar > &cam) -> Eigen::Matrix< Scalar, 3, 3 >
auto denormalize(const CameraMatrixT< Scalar > &cam, const Eigen::Matrix< T, 2, 1 > &norm_xy) -> Eigen::Matrix< T, 2, 1 >
static constexpr double k_fx_min
static constexpr double k_cx_min
static constexpr double k_fy_max
static constexpr double k_skew_max
static constexpr double k_cy_min
static constexpr double k_fy_min
static constexpr double k_cy_max
static constexpr double k_skew_min
static constexpr double k_fx_max
static constexpr double k_cx_max