| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- package com.hfln.device.common.util;
- import java.util.ArrayList;
- import java.util.List;
- /**
- * 点云数据处理工具类
- * 对应Python版本中的get_tracker_targets和get_tracker_targets_mult函数
- */
- public class PointCloudUtil {
-
- private PointCloudUtil() {
- // 私有构造函数,防止实例化
- }
-
- /**
- * 获取目标点 (对应Python版本的get_tracker_targets函数)
- *
- * Python版本实现:
- * def get_tracker_targets(point_cloud:list):
- * target_point = numpy.mean(point_cloud, axis=0).tolist()
- * tracker_targets = []
- * tracker_targets.append(target_point)
- * return tracker_targets
- *
- * @param pointCloud 点云数据列表,格式:List<List<Float>>,每个点包含[x, y, z]坐标
- * @return 跟踪目标列表,格式:List<List<Float>>,每个目标包含[x, y, z]
- */
- public static List<List<Float>> getTrackerTargets(List<List<Float>> pointCloud) {
- if (pointCloud == null || pointCloud.isEmpty()) {
- return new ArrayList<>();
- }
-
- // 对应Python: target_point = numpy.mean(point_cloud, axis=0).tolist()
- List<Float> targetPoint = calculateMeanPoint(pointCloud);
-
- // 对应Python: tracker_targets = []
- List<List<Float>> trackerTargets = new ArrayList<>();
-
- // 对应Python: tracker_targets.append(target_point)
- trackerTargets.add(targetPoint);
-
- // 对应Python: return tracker_targets
- return trackerTargets;
- }
-
- /**
- * 获取多个目标点 (对应Python版本的get_tracker_targets_mult函数)
- *
- * Python版本实现:
- * def get_tracker_targets_mult(point_cloud:list):
- * target_point = numpy.mean(point_cloud, axis=0).tolist()
- * tracker_targets = []
- * tracker_targets.append(target_point)
- * return tracker_targets
- *
- * 注意:在Python版本中,get_tracker_targets_mult与get_tracker_targets实现完全相同
- *
- * @param pointCloud 点云数据列表,格式:List<List<Float>>,每个点包含[x, y, z]坐标
- * @return 跟踪目标列表,格式:List<List<Float>>,每个目标包含[x, y, z]
- */
- public static List<List<Float>> getTrackerTargetsMult(List<List<Float>> pointCloud) {
- // 在Python版本中,get_tracker_targets_mult和get_tracker_targets实现相同
- return getTrackerTargets(pointCloud);
- }
-
- /**
- * 计算点云的平均点 (对应Python的numpy.mean(point_cloud, axis=0))
- *
- * @param pointCloud 点云数据列表
- * @return 平均点坐标 [x, y, z]
- */
- private static List<Float> calculateMeanPoint(List<List<Float>> pointCloud) {
- if (pointCloud.isEmpty()) {
- return new ArrayList<>();
- }
-
- int dimensions = pointCloud.get(0).size();
- List<Float> mean = new ArrayList<>(dimensions);
-
- // 初始化平均值列表
- for (int i = 0; i < dimensions; i++) {
- mean.add(0.0f);
- }
-
- // 累加所有点的坐标 (对应numpy.mean的求和步骤)
- for (List<Float> point : pointCloud) {
- for (int i = 0; i < dimensions; i++) {
- mean.set(i, mean.get(i) + point.get(i));
- }
- }
-
- // 计算平均值 (对应numpy.mean的除法步骤)
- for (int i = 0; i < dimensions; i++) {
- mean.set(i, mean.get(i) / pointCloud.size());
- }
-
- return mean;
- }
- }
|