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>,每个点包含[x, y, z]坐标 * @return 跟踪目标列表,格式:List>,每个目标包含[x, y, z] */ public static List> getTrackerTargets(List> pointCloud) { if (pointCloud == null || pointCloud.isEmpty()) { return new ArrayList<>(); } // 对应Python: target_point = numpy.mean(point_cloud, axis=0).tolist() List targetPoint = calculateMeanPoint(pointCloud); // 对应Python: tracker_targets = [] List> 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>,每个点包含[x, y, z]坐标 * @return 跟踪目标列表,格式:List>,每个目标包含[x, y, z] */ public static List> getTrackerTargetsMult(List> 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 calculateMeanPoint(List> pointCloud) { if (pointCloud.isEmpty()) { return new ArrayList<>(); } int dimensions = pointCloud.get(0).size(); List mean = new ArrayList<>(dimensions); // 初始化平均值列表 for (int i = 0; i < dimensions; i++) { mean.add(0.0f); } // 累加所有点的坐标 (对应numpy.mean的求和步骤) for (List 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; } }