PointCloudUtil.java 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. package com.hfln.device.common.util;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. /**
  5. * 点云数据处理工具类
  6. * 对应Python版本中的get_tracker_targets和get_tracker_targets_mult函数
  7. */
  8. public class PointCloudUtil {
  9. private PointCloudUtil() {
  10. // 私有构造函数,防止实例化
  11. }
  12. /**
  13. * 获取目标点 (对应Python版本的get_tracker_targets函数)
  14. *
  15. * Python版本实现:
  16. * def get_tracker_targets(point_cloud:list):
  17. * target_point = numpy.mean(point_cloud, axis=0).tolist()
  18. * tracker_targets = []
  19. * tracker_targets.append(target_point)
  20. * return tracker_targets
  21. *
  22. * @param pointCloud 点云数据列表,格式:List<List<Float>>,每个点包含[x, y, z]坐标
  23. * @return 跟踪目标列表,格式:List<List<Float>>,每个目标包含[x, y, z]
  24. */
  25. public static List<List<Float>> getTrackerTargets(List<List<Float>> pointCloud) {
  26. if (pointCloud == null || pointCloud.isEmpty()) {
  27. return new ArrayList<>();
  28. }
  29. // 对应Python: target_point = numpy.mean(point_cloud, axis=0).tolist()
  30. List<Float> targetPoint = calculateMeanPoint(pointCloud);
  31. // 对应Python: tracker_targets = []
  32. List<List<Float>> trackerTargets = new ArrayList<>();
  33. // 对应Python: tracker_targets.append(target_point)
  34. trackerTargets.add(targetPoint);
  35. // 对应Python: return tracker_targets
  36. return trackerTargets;
  37. }
  38. /**
  39. * 获取多个目标点 (对应Python版本的get_tracker_targets_mult函数)
  40. *
  41. * Python版本实现:
  42. * def get_tracker_targets_mult(point_cloud:list):
  43. * target_point = numpy.mean(point_cloud, axis=0).tolist()
  44. * tracker_targets = []
  45. * tracker_targets.append(target_point)
  46. * return tracker_targets
  47. *
  48. * 注意:在Python版本中,get_tracker_targets_mult与get_tracker_targets实现完全相同
  49. *
  50. * @param pointCloud 点云数据列表,格式:List<List<Float>>,每个点包含[x, y, z]坐标
  51. * @return 跟踪目标列表,格式:List<List<Float>>,每个目标包含[x, y, z]
  52. */
  53. public static List<List<Float>> getTrackerTargetsMult(List<List<Float>> pointCloud) {
  54. // 在Python版本中,get_tracker_targets_mult和get_tracker_targets实现相同
  55. return getTrackerTargets(pointCloud);
  56. }
  57. /**
  58. * 计算点云的平均点 (对应Python的numpy.mean(point_cloud, axis=0))
  59. *
  60. * @param pointCloud 点云数据列表
  61. * @return 平均点坐标 [x, y, z]
  62. */
  63. private static List<Float> calculateMeanPoint(List<List<Float>> pointCloud) {
  64. if (pointCloud.isEmpty()) {
  65. return new ArrayList<>();
  66. }
  67. int dimensions = pointCloud.get(0).size();
  68. List<Float> mean = new ArrayList<>(dimensions);
  69. // 初始化平均值列表
  70. for (int i = 0; i < dimensions; i++) {
  71. mean.add(0.0f);
  72. }
  73. // 累加所有点的坐标 (对应numpy.mean的求和步骤)
  74. for (List<Float> point : pointCloud) {
  75. for (int i = 0; i < dimensions; i++) {
  76. mean.set(i, mean.get(i) + point.get(i));
  77. }
  78. }
  79. // 计算平均值 (对应numpy.mean的除法步骤)
  80. for (int i = 0; i < dimensions; i++) {
  81. mean.set(i, mean.get(i) / pointCloud.size());
  82. }
  83. return mean;
  84. }
  85. }