Calibration Library 1.0.0
A C++ library for camera calibration and vision-related geometric transformations
Loading...
Searching...
No Matches
pipeline.h
Go to the documentation of this file.
1#pragma once
2
3// std
4#include <memory>
5#include <ostream>
6#include <string>
7#include <unordered_map>
8#include <vector>
9
17
18namespace calib::pipeline {
19
21 std::string name;
22 bool success{false};
23 nlohmann::json summary;
24};
25
27 bool success{false};
28 std::vector<PipelineStageResult> stages;
29};
30
32class StageDecorator;
33class DatasetLoader;
34
35class PipelineContext final {
36 IntrinsicCalibrationConfig intrinsics_config_;
37 bool has_intrinsics_config_{false};
38 StereoCalibrationConfig stereo_config_;
39 bool has_stereo_config_{false};
40 HandEyePipelineConfig handeye_config_;
41 bool has_handeye_config_{false};
42 BundlePipelineConfig bundle_config_;
43 bool has_bundle_config_{false};
44
45 public:
47 std::unordered_map<std::string, IntrinsicCalibrationOutputs> intrinsic_results;
48 std::unordered_map<std::string, ExtrinsicOptimizationResult<PinholeCamera<BrownConradyd>>>
50 std::unordered_map<std::string, std::unordered_map<std::string, HandeyeResult>> handeye_results;
51 std::unordered_map<std::string, BundleResult<PinholeCamera<BrownConradyd>>> bundle_results;
52 nlohmann::json artifacts;
53
58 [[nodiscard]] auto has_intrinsics_config() const -> bool { return has_intrinsics_config_; }
59 [[nodiscard]] auto intrinsics_config() const -> const IntrinsicCalibrationConfig& {
60 return intrinsics_config_;
61 }
62 auto intrinsics_config() -> IntrinsicCalibrationConfig& { return intrinsics_config_; }
63 [[nodiscard]] auto has_stereo_config() const -> bool { return has_stereo_config_; }
64 [[nodiscard]] auto stereo_config() const -> const StereoCalibrationConfig& {
65 return stereo_config_;
66 }
67 auto stereo_config() -> StereoCalibrationConfig& { return stereo_config_; }
68 [[nodiscard]] auto has_handeye_config() const -> bool { return has_handeye_config_; }
69 [[nodiscard]] auto handeye_config() const -> const HandEyePipelineConfig& {
70 return handeye_config_;
71 }
72 auto handeye_config() -> HandEyePipelineConfig& { return handeye_config_; }
73 [[nodiscard]] auto has_bundle_config() const -> bool { return has_bundle_config_; }
74 [[nodiscard]] auto bundle_config() const -> const BundlePipelineConfig& {
75 return bundle_config_;
76 }
77 auto bundle_config() -> BundlePipelineConfig& { return bundle_config_; }
78};
79
81 public:
82 virtual ~CalibrationStage() = default;
83 [[nodiscard]] virtual auto name() const -> std::string = 0;
84 [[nodiscard]] virtual auto run(PipelineContext& context) -> PipelineStageResult = 0;
85};
86
88 public:
89 virtual ~StageDecorator() = default;
90 virtual void before_stage(const CalibrationStage& /*stage*/, PipelineContext& /*context*/) {}
91 virtual void after_stage(const CalibrationStage& /*stage*/, PipelineContext& /*context*/,
92 const PipelineStageResult& /*result*/) {}
93};
94
96 public:
97 virtual ~DatasetLoader() = default;
98 [[nodiscard]] virtual auto load() -> CalibrationDataset = 0;
99};
100
102 std::vector<std::unique_ptr<CalibrationStage>> stages_;
103 std::vector<std::shared_ptr<StageDecorator>> decorators_;
104
105 public:
106 void add_stage(std::unique_ptr<CalibrationStage> stage);
107 void add_decorator(std::shared_ptr<StageDecorator> decorator);
108
109 [[nodiscard]] auto execute(DatasetLoader& loader, PipelineContext& context)
111};
112
113class LoggingDecorator final : public StageDecorator {
114 std::ostream& out_;
115
116 public:
117 explicit LoggingDecorator(std::ostream& out) : out_(out) {}
118
119 void before_stage(const CalibrationStage& stage, PipelineContext& context) override;
120 void after_stage(const CalibrationStage& stage, PipelineContext& context,
121 const PipelineStageResult& result) override;
122};
123
124} // namespace calib::pipeline
virtual ~CalibrationStage()=default
virtual auto name() const -> std::string=0
virtual auto run(PipelineContext &context) -> PipelineStageResult=0
virtual ~DatasetLoader()=default
virtual auto load() -> CalibrationDataset=0
LoggingDecorator(std::ostream &out)
Definition pipeline.h:117
void set_intrinsics_config(IntrinsicCalibrationConfig cfg)
Definition pipeline.cpp:8
auto has_handeye_config() const -> bool
Definition pipeline.h:68
auto has_intrinsics_config() const -> bool
Definition pipeline.h:58
void set_handeye_config(HandEyePipelineConfig cfg)
Definition pipeline.cpp:18
std::unordered_map< std::string, ExtrinsicOptimizationResult< PinholeCamera< BrownConradyd > > > stereo_results
Definition pipeline.h:49
void set_stereo_config(StereoCalibrationConfig cfg)
Definition pipeline.cpp:13
CalibrationDataset dataset
Definition pipeline.h:46
auto stereo_config() const -> const StereoCalibrationConfig &
Definition pipeline.h:64
auto intrinsics_config() const -> const IntrinsicCalibrationConfig &
Definition pipeline.h:59
auto handeye_config() -> HandEyePipelineConfig &
Definition pipeline.h:72
std::unordered_map< std::string, std::unordered_map< std::string, HandeyeResult > > handeye_results
Definition pipeline.h:50
std::unordered_map< std::string, IntrinsicCalibrationOutputs > intrinsic_results
Definition pipeline.h:47
auto handeye_config() const -> const HandEyePipelineConfig &
Definition pipeline.h:69
std::unordered_map< std::string, BundleResult< PinholeCamera< BrownConradyd > > > bundle_results
Definition pipeline.h:51
auto bundle_config() const -> const BundlePipelineConfig &
Definition pipeline.h:74
void set_bundle_config(BundlePipelineConfig cfg)
Definition pipeline.cpp:23
auto has_stereo_config() const -> bool
Definition pipeline.h:63
auto has_bundle_config() const -> bool
Definition pipeline.h:73
auto bundle_config() -> BundlePipelineConfig &
Definition pipeline.h:77
auto stereo_config() -> StereoCalibrationConfig &
Definition pipeline.h:67
auto intrinsics_config() -> IntrinsicCalibrationConfig &
Definition pipeline.h:62
virtual void before_stage(const CalibrationStage &, PipelineContext &)
Definition pipeline.h:90
virtual ~StageDecorator()=default
virtual void after_stage(const CalibrationStage &, PipelineContext &, const PipelineStageResult &)
Definition pipeline.h:91
Hand-eye calibration algorithms and utilities.
Pipeline configuration helpers for hand-eye and bundle adjustment stages.
Aggregated dataset consumed by the calibration pipeline.
Definition dataset.h:44
std::vector< PipelineStageResult > stages
Definition pipeline.h:28