Simplify triangulation API with config struct

This commit is contained in:
2026-03-12 00:08:56 +08:00
parent 7df34b18c3
commit c23f25f871
6 changed files with 158 additions and 198 deletions
+25 -32
View File
@@ -150,43 +150,44 @@ struct TriangulationOptions
size_t min_group_size = 1;
};
struct TriangulationConfig
{
std::vector<Camera> cameras;
std::array<std::array<float, 3>, 2> roomparams {{{0.0f, 0.0f, 0.0f}, {0.0f, 0.0f, 0.0f}}};
std::vector<std::string> joint_names;
TriangulationOptions options;
};
// =================================================================================================
std::vector<PairCandidate> build_pair_candidates(const PoseBatch2DView &poses_2d);
PreviousPoseFilterDebug filter_pairs_with_previous_poses(
const PoseBatch2DView &poses_2d,
const std::vector<Camera> &cameras,
const std::vector<std::string> &joint_names,
const TriangulationConfig &config,
const PoseBatch3DView &previous_poses_3d,
const TriangulationOptions &options = {});
const TriangulationOptions *options_override = nullptr);
inline PreviousPoseFilterDebug filter_pairs_with_previous_poses(
const PoseBatch2D &poses_2d,
const std::vector<Camera> &cameras,
const std::vector<std::string> &joint_names,
const TriangulationConfig &config,
const PoseBatch3D &previous_poses_3d,
const TriangulationOptions &options = {})
const TriangulationOptions *options_override = nullptr)
{
return filter_pairs_with_previous_poses(
poses_2d.view(), cameras, joint_names, previous_poses_3d.view(), options);
return filter_pairs_with_previous_poses(poses_2d.view(), config, previous_poses_3d.view(), options_override);
}
TriangulationTrace triangulate_debug(
const PoseBatch2DView &poses_2d,
const std::vector<Camera> &cameras,
const std::array<std::array<float, 3>, 2> &roomparams,
const std::vector<std::string> &joint_names,
const TriangulationConfig &config,
const PoseBatch3DView *previous_poses_3d = nullptr,
const TriangulationOptions &options = {});
const TriangulationOptions *options_override = nullptr);
inline TriangulationTrace triangulate_debug(
const PoseBatch2D &poses_2d,
const std::vector<Camera> &cameras,
const std::array<std::array<float, 3>, 2> &roomparams,
const std::vector<std::string> &joint_names,
const TriangulationConfig &config,
const PoseBatch3D *previous_poses_3d = nullptr,
const TriangulationOptions &options = {})
const TriangulationOptions *options_override = nullptr)
{
PoseBatch3DView previous_view_storage;
const PoseBatch3DView *previous_view = nullptr;
@@ -195,8 +196,7 @@ inline TriangulationTrace triangulate_debug(
previous_view_storage = previous_poses_3d->view();
previous_view = &previous_view_storage;
}
return triangulate_debug(
poses_2d.view(), cameras, roomparams, joint_names, previous_view, options);
return triangulate_debug(poses_2d.view(), config, previous_view, options_override);
}
// =================================================================================================
@@ -205,28 +205,22 @@ inline TriangulationTrace triangulate_debug(
* Calculate a triangulation using a padded pose tensor.
*
* @param poses_2d Padded poses of shape [views, max_persons, joints, 3].
* @param cameras List of cameras.
* @param roomparams Room parameters (room size, room center).
* @param joint_names List of 2D joint names.
* @param options Triangulation options.
* @param config Triangulation configuration (cameras, room parameters, joint names, options).
* @param options_override Optional per-call options override. Defaults to config.options.
*
* @return Pose tensor of shape [persons, joints, 4].
*/
PoseBatch3D triangulate_poses(
const PoseBatch2DView &poses_2d,
const std::vector<Camera> &cameras,
const std::array<std::array<float, 3>, 2> &roomparams,
const std::vector<std::string> &joint_names,
const TriangulationConfig &config,
const PoseBatch3DView *previous_poses_3d = nullptr,
const TriangulationOptions &options = {});
const TriangulationOptions *options_override = nullptr);
inline PoseBatch3D triangulate_poses(
const PoseBatch2D &poses_2d,
const std::vector<Camera> &cameras,
const std::array<std::array<float, 3>, 2> &roomparams,
const std::vector<std::string> &joint_names,
const TriangulationConfig &config,
const PoseBatch3D *previous_poses_3d = nullptr,
const TriangulationOptions &options = {})
const TriangulationOptions *options_override = nullptr)
{
PoseBatch3DView previous_view_storage;
const PoseBatch3DView *previous_view = nullptr;
@@ -235,6 +229,5 @@ inline PoseBatch3D triangulate_poses(
previous_view_storage = previous_poses_3d->view();
previous_view = &previous_view_storage;
}
return triangulate_poses(
poses_2d.view(), cameras, roomparams, joint_names, previous_view, options);
return triangulate_poses(poses_2d.view(), config, previous_view, options_override);
}