Slight performance improvements.

This commit is contained in:
Daniel
2025-07-07 11:43:27 +02:00
parent 53f13d6f97
commit ed5d25f595
4 changed files with 3834 additions and 3827 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1405,7 +1405,7 @@ std::array<float, 3> calc_ray_dir(const CameraInternal &icam, const std::array<f
return ray_dir; return ray_dir;
} }
std::array<float, 3> triangulate_midpoint( std::array<float, 4> triangulate_midpoint(
const CameraInternal &icam1, const CameraInternal &icam1,
const CameraInternal &icam2, const CameraInternal &icam2,
const std::array<float, 2> &pt1, const std::array<float, 2> &pt1,
@ -1435,7 +1435,10 @@ std::array<float, 3> triangulate_midpoint(
// Compute midpoint between c1 and c2. // Compute midpoint between c1 and c2.
std::array<float, 3> midpoint = multiply(add(c1, c2), 0.5); std::array<float, 3> midpoint = multiply(add(c1, c2), 0.5);
return midpoint; float dist = std::sqrt(dot(subtract(c1, c2), subtract(c1, c2)));
std::array<float, 4> result = {midpoint[0], midpoint[1], midpoint[2], dist};
return result;
} }
// ================================================================================================= // =================================================================================================
@ -1491,9 +1494,11 @@ std::pair<std::vector<std::array<float, 4>>, float> TriangulatorInternal::triang
{ {
auto &pt1 = pose1[i]; auto &pt1 = pose1[i];
auto &pt2 = pose2[i]; auto &pt2 = pose2[i];
std::array<float, 3> pt3d = triangulate_midpoint( std::array<float, 4> pt3d = triangulate_midpoint(
cam1, cam2, {pt1[0], pt1[1]}, {pt2[0], pt2[1]}); cam1, cam2, {pt1[0], pt1[1]}, {pt2[0], pt2[1]});
pose3d[i] = {pt3d[0], pt3d[1], pt3d[2], 1.0};
float score = std::max(0.0, 1.0 - pt3d[3]);
pose3d[i] = {pt3d[0], pt3d[1], pt3d[2], score};
} }
} }
@ -1546,13 +1551,15 @@ std::pair<std::vector<std::array<float, 4>>, float> TriangulatorInternal::triang
std::vector<float> score1 = score_projection(pose1, repro1, dists1, mask, iscale); std::vector<float> score1 = score_projection(pose1, repro1, dists1, mask, iscale);
std::vector<float> score2 = score_projection(pose2, repro2, dists2, mask, iscale); std::vector<float> score2 = score_projection(pose2, repro2, dists2, mask, iscale);
// Add scores to 3D pose // Update scores of 3D pose
for (size_t i = 0; i < num_joints; ++i) for (size_t i = 0; i < num_joints; ++i)
{ {
if (mask[i]) if (mask[i])
{ {
// Using mainly the reprojection score leads to slightly better average results,
// but the triangulation score is used to penalize some bad outliers.
float scoreT = 0.5 * (score1[i] + score2[i]); float scoreT = 0.5 * (score1[i] + score2[i]);
pose3d[i][3] = scoreT; pose3d[i][3] = 0.9 * scoreT + 0.1 * pose3d[i][3];
} }
} }

View File

@ -114,7 +114,7 @@ datasets = {
"take_interval": 1, "take_interval": 1,
"fps": 25, "fps": 25,
"min_match_score": 0.95, "min_match_score": 0.95,
"min_group_size": 2, "min_group_size": 3,
"max_track_distance": 0.3 + default_max_movement_speed / 25, "max_track_distance": 0.3 + default_max_movement_speed / 25,
}, },
"ikeaasm": { "ikeaasm": {

2
skelda

Submodule skelda updated: 40d8c6efb8...3ca487825d