13 const auto& refine = out.refine_result;
14 if (refine.view_errors.empty()) {
18 std::size_t total_measurements = 0;
19 for (std::size_t i = 0; i < refine.view_errors.size(); ++i) {
20 const double view_rms = refine.view_errors[i];
21 const std::size_t points =
22 i < out.active_views.size() ? out.active_views[i].corner_count : 0;
23 const std::size_t measurements = points * 2;
24 sum_sq += view_rms * view_rms *
static_cast<double>(measurements);
25 total_measurements += measurements;
27 if (total_measurements == 0) {
30 return std::sqrt(sum_sq /
static_cast<double>(total_measurements));
39 camera.
model = cam_cfg.model;
43 initial_guess.
intrinsics = outputs.linear_kmtx;
50 result.
intrinsics = outputs.refine_result.camera.kmtx;
53 std::vector<double>(outputs.refine_result.camera.distortion.coeffs.data(),
54 outputs.refine_result.camera.distortion.coeffs.data() +
55 outputs.refine_result.camera.distortion.coeffs.size());
58 for (std::size_t i = 0; i < outputs.active_views.size(); ++i) {
59 const auto& view = outputs.active_views[i];
60 const double view_rms = i < outputs.refine_result.view_errors.size()
61 ? outputs.refine_result.view_errors[i]
63 const bool used_in_linear =
64 std::find(outputs.linear_view_indices.begin(), outputs.linear_view_indices.end(), i) !=
65 outputs.linear_view_indices.end();
70 camera.
result = std::move(result);
73 calibration.
type =
"intrinsics";
75 calibration.
options = cfg.options;
79 calibration.
detector = nlohmann::json::object();
81 calibration.
cameras.push_back(std::move(camera));