Slight performance improvements.
This commit is contained in:
7638
media/RESULTS.md
7638
media/RESULTS.md
File diff suppressed because it is too large
Load Diff
@ -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];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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
2
skelda
Submodule skelda updated: 40d8c6efb8...3ca487825d
Reference in New Issue
Block a user