Keep with few limbs.

This commit is contained in:
Daniel
2024-09-25 15:42:06 +02:00
parent 42ac2731f1
commit 21f0a20d79
3 changed files with 299 additions and 325 deletions

View File

@ -515,7 +515,7 @@ std::vector<std::vector<std::array<float, 4>>> TriangulatorInternal::triangulate
// Run post-processing steps
std::vector<cv::Mat> final_poses_3d = all_merged_poses;
add_extra_joints(final_poses_3d, joint_names);
filter_poses(final_poses_3d, roomparams, core_joint_idx, core_limbs_idx, true);
filter_poses(final_poses_3d, roomparams, core_joint_idx, core_limbs_idx);
add_missing_joints(final_poses_3d, joint_names);
last_poses_3d = final_poses_3d;
@ -1492,8 +1492,7 @@ void TriangulatorInternal::filter_poses(
std::vector<cv::Mat> &poses,
const std::array<std::array<float, 3>, 2> &roomparams,
const std::vector<size_t> &core_joint_idx,
const std::vector<std::array<size_t, 2>> &core_limbs_idx,
bool drop_few_limbs = true)
const std::vector<std::array<size_t, 2>> &core_limbs_idx)
{
const float min_score = 0.1;
std::vector<int> drop_indices;
@ -1608,30 +1607,6 @@ void TriangulatorInternal::filter_poses(
continue;
}
if (drop_few_limbs)
{
// Drop poses with less than 3 valid limbs
size_t found_limbs = 0;
for (size_t j = 0; j < core_limbs_idx.size(); ++j)
{
size_t start_idx = core_joint_idx[core_limbs_idx[j][0]];
size_t end_idx = core_joint_idx[core_limbs_idx[j][1]];
float *joint_start_ptr = pose.ptr<float>(start_idx);
float *joint_end_ptr = pose.ptr<float>(end_idx);
if (joint_start_ptr[3] > min_score && joint_end_ptr[3] > min_score)
{
found_limbs++;
}
}
if (found_limbs < 3)
{
drop_indices.push_back(i);
continue;
}
}
// Calculate total limb length and average limb length
const float max_avg_length = 0.5f;
const float min_avg_length = 0.1f;