Skip to content

Commit 1d4a235

Browse files
committed
still small deltas in x
1 parent f3a4de2 commit 1d4a235

File tree

1 file changed

+15
-66
lines changed

1 file changed

+15
-66
lines changed

src/mrcal-uncertainty.hpp

Lines changed: 15 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -310,62 +310,13 @@ Eigen::Matrix<double, 2, Eigen::Dynamic, Eigen::RowMajor> _dq_db_projection_unce
310310
}
311311

312312
double _observed_pixel_uncertainty_from_inputs(
313-
const std::vector<double> &intrinsics,
314-
const std::vector<mrcal_pose_t> &rt_ref_frame,
315-
const mrcal_observation_board_t *observations_board,
316-
const mrcal_point3_t *observations_board_pool,
317-
int Nobservations_board,
318-
const mrcal_lensmodel_t *lensmodel,
319-
const mrcal_problem_selections_t &problem_selections,
320-
int calibration_object_width_n,
321-
int calibration_object_height_n,
322-
double calibration_object_spacing)
313+
std::vector<double> &x, int num_measurements_board, int measurement_index_board)
323314
{
324-
int Nstate = mrcal_num_states(
325-
1, 0, rt_ref_frame.size(), 0, 0,
326-
Nobservations_board, problem_selections, lensmodel);
327-
328-
int Nmeasurements_boards = mrcal_num_measurements(
329-
Nobservations_board, 0,
330-
NULL, 0,
331-
calibration_object_width_n, calibration_object_height_n,
332-
1, 0, 6, 0, 0, problem_selections, lensmodel);
333-
334-
std::vector<double> b_packed(Nstate);
335-
std::vector<double> x(Nmeasurements_boards);
336-
337-
double point_min_range = -1.0, point_max_range = -1.0;
338-
mrcal_problem_constants_t problem_constants = {
339-
.point_min_range = point_min_range, .point_max_range = point_max_range};
340-
341-
bool ret = mrcal_optimizer_callback(
342-
b_packed.data(), Nstate,
343-
x.data(), Nmeasurements_boards,
344-
nullptr, // no Jacobian needed
345-
intrinsics.data(),
346-
nullptr, rt_ref_frame.data(),
347-
nullptr, nullptr,
348-
1, 0, static_cast<int>(rt_ref_frame.size()),
349-
0, 0,
350-
observations_board, nullptr,
351-
Nobservations_board, 0,
352-
nullptr, 0,
353-
observations_board_pool, nullptr,
354-
lensmodel, nullptr,
355-
problem_selections, &problem_constants,
356-
calibration_object_spacing,
357-
calibration_object_width_n, calibration_object_height_n,
358-
false);
359-
360-
if (!ret)
361-
{
362-
throw std::runtime_error("mrcal_optimizer_callback failed");
363-
}
364-
365315
// Compute variance from residuals
366316
double sum = 0.0, sum_sq = 0.0;
367-
for (double val : x)
317+
for (size_t i = measurement_index_board; i < measurement_index_board + num_measurements_board; i++)
368318
{
319+
double val = x[i];
369320
sum += val;
370321
sum_sq += val * val;
371322
}
@@ -427,16 +378,18 @@ double _propagate_calibration_uncertainty(
427378
1, 0, rt_ref_frame.size(), 0, 0,
428379
Nobservations_board, problem_selections, &lensmodel);
429380

430-
int Nmeasurements_boards = mrcal_num_measurements(
431-
Nobservations_board, 0,
381+
int Nmeasurements = mrcal_num_measurements(
382+
Nobservations_board, 0,
432383
NULL, 0,
433384
calibration_object_width_n, calibration_object_height_n,
434385
1, 0, 6, 0, 0, problem_selections, &lensmodel);
386+
int Nmeasurements_boards = mrcal_num_measurements_boards(
387+
Nobservations_board,
388+
calibration_object_width_n, calibration_object_height_n);
389+
int imeas0 = mrcal_measurement_index_boards(0, Nobservations_board, 0, calibration_object_width_n, calibration_object_height_n);
435390

436391
// Allocate buffers for Jt sparse matrix
437-
int Nmeasurements = Nmeasurements_boards; // Total measurements (boards only for now)
438392
int N_j_nonzero = Nstate * Nmeasurements; // Upper bound, actual will be less
439-
440393
std::vector<int32_t> Jt_p(Nmeasurements + 1);
441394
std::vector<int32_t> Jt_i(N_j_nonzero);
442395
std::vector<double_t> Jt_x(N_j_nonzero);
@@ -468,15 +421,15 @@ double _propagate_calibration_uncertainty(
468421
cholmod_start(&common);
469422

470423
// TODO fill this in
471-
mrcal_calobject_warp_t warp { .x2 = 0.0, .y2 = 0.0 };
424+
mrcal_calobject_warp_t warp{.x2 = 0.0, .y2 = 0.0};
472425

473426
// TODO fill this in
474-
int imagersize[2] {1280, 720};
427+
int imagersize[2]{1280, 720};
475428

476429
bool ret = mrcal_optimizer_callback(
477430
b_packed.data(), b_packed.size() * sizeof(double), // out
478-
x.data(), x.size() * sizeof(double), // out
479-
&Jt, // Get the Jacobian
431+
x.data(), x.size() * sizeof(double), // out
432+
&Jt, // Get the Jacobian
480433
// IN parameters
481434
intrinsics.data(),
482435
nullptr, // no extrinsics
@@ -501,11 +454,7 @@ double _propagate_calibration_uncertainty(
501454
throw std::runtime_error("mrcal_optimizer_callback failed");
502455
}
503456

504-
double observed_pixel_uncertainty = _observed_pixel_uncertainty_from_inputs(
505-
intrinsics, rt_ref_frame, observations_board, observations_board_pool,
506-
Nobservations_board, &lensmodel, problem_selections,
507-
calibration_object_width_n, calibration_object_height_n,
508-
calibration_object_spacing);
457+
double observed_pixel_uncertainty = _observed_pixel_uncertainty_from_inputs(x, Nmeasurements_boards, imeas0);
509458

510459
// Create factorization from Jt
511460
cholmod_factor *factorization = create_factorization(&Jt, &common);
@@ -629,7 +578,7 @@ bool projection_uncertainty(mrcal_point3_t pcam,
629578
auto dq_db{_dq_db_projection_uncertainty(pcam, lensmodel, rt_ref_frames, Nstate, istate_frames0, intrinsics)};
630579

631580
return _propagate_calibration_uncertainty(dq_db, problem_selections, lensmodel,
632-
intrinsics, rt_ref_frames, c_observations_board, reinterpret_cast<const mrcal_point3_t*>(observations_board.data()),
581+
intrinsics, rt_ref_frames, c_observations_board, reinterpret_cast<const mrcal_point3_t *>(observations_board.data()),
633582
rt_ref_frames.size(), calibration_object_width_n_example, calibration_object_height_n_example, calibration_object_spacing_example);
634583
}
635584

0 commit comments

Comments
 (0)