10#include <ceres/ceres.h>
12#include "../detail/observationutils.h"
20 const std::vector<PlanarView>
views;
28 v.begin(), v.end(), size_t(0),
29 [](size_t sum, const
PlanarView& view) {
return sum + view.size(); })) {}
32 bool operator()(T
const*
const* params, T* residuals)
const {
33 std::vector<Observation<T>> o;
36 auto c_se3_t = Eigen::Transform<T, 3, Eigen::Isometry>::Identity();
38 for (
size_t i = 0; i <
views.size(); ++i) {
39 c_se3_t.linear() = quat_array_to_rotmat<T>(params[2 * i + 1]);
40 c_se3_t.translation() = array_to_translation<T>(params[2 * i + 2]);
41 std::vector<Observation<T>> new_obs(
views[i].size());
43 o.insert(o.end(), new_obs.begin(), new_obs.end());
46 const T* intr = params[0];
47 const CameraMatrixT<T> intrinsics{intr[0], intr[1], intr[2], intr[3], intr[4]};
52 const auto& r = dr->residuals;
53 for (
int i = 0; i < r.size(); ++i) {
59 static auto*
create(
const std::vector<PlanarView>&
views,
int num_radial) {
61 auto* cost =
new ceres::DynamicAutoDiffCostFunction(functor);
62 cost->AddParameterBlock(5);
63 for (
size_t i = 0; i <
views.size(); ++i) {
64 cost->AddParameterBlock(4);
65 cost->AddParameterBlock(3);
67 const size_t total_obs =
68 std::accumulate(
views.begin(),
views.end(),
size_t(0),
69 [](
size_t sum,
const PlanarView& v) { return sum + v.size(); });
70 cost->SetNumResiduals(
static_cast<int>(total_obs * 2));
Lens distortion models and correction algorithms.
Linear multi-camera extrinsics initialisation (DLT)
static void planar_observables_to_observables(const PlanarView &planar_obs, std::vector< Observation< T > > &obs, const Eigen::Transform< T, 3, Eigen::Isometry > &camera_se3_target)
std::vector< PlanarObservation > PlanarView
auto fit_distortion_full(const std::vector< Observation< T > > &observations, const CameraMatrixT< T > &intrinsics, int num_radial=2, std::span< const int > fixed_indices={}, std::span< const T > fixed_values={}) -> std::optional< DistortionWithResiduals< T > >
const std::vector< PlanarView > views
static auto * create(const std::vector< PlanarView > &views, int num_radial)
CalibVPResidual(const std::vector< PlanarView > &v, int num_radial)
bool operator()(T const *const *params, T *residuals) const