@staticmethod
def eval_pointcloud(pointcloud, pointcloud_tgt, normals=None, normals_tgt=None, thresholds=np.linspace((1.0 / 1000), 1, 1000)):
    ' Evaluates a point cloud.\n\n        Args:\n            pointcloud (numpy array): predicted point cloud\n            pointcloud_tgt (numpy array): target point cloud\n            normals (numpy array): predicted normals\n            normals_tgt (numpy array): target normals\n            thresholds (numpy array): threshold values for the F-score calculation\n        '
    if (pointcloud.shape[0] == 0):
        logger.warning('Empty pointcloud / mesh detected!')
        out_dict = EMPTY_PCL_DICT.copy()
        if ((normals is not None) and (normals_tgt is not None)):
            out_dict.update(EMPTY_PCL_DICT_NORMALS)
        return out_dict
    pointcloud = np.asarray(pointcloud)
    pointcloud_tgt = np.asarray(pointcloud_tgt)
    (completeness, completeness_normals) = distance_p2p(pointcloud_tgt, normals_tgt, pointcloud, normals)
    recall = get_threshold_percentage(completeness, thresholds)
    completeness2 = (completeness ** 2)
    completeness = completeness.mean()
    completeness2 = completeness2.mean()
    completeness_normals = completeness_normals.mean()
    (accuracy, accuracy_normals) = distance_p2p(pointcloud, normals, pointcloud_tgt, normals_tgt)
    precision = get_threshold_percentage(accuracy, thresholds)
    accuracy2 = (accuracy ** 2)
    accuracy = accuracy.mean()
    accuracy2 = accuracy2.mean()
    accuracy_normals = accuracy_normals.mean()
    chamferL2 = (0.5 * (completeness2 + accuracy2))
    normals_correctness = ((0.5 * completeness_normals) + (0.5 * accuracy_normals))
    chamferL1 = (0.5 * (completeness + accuracy))
    F = [(((2 * precision[i]) * recall[i]) / (precision[i] + recall[i])) for i in range(len(precision))]
    out_dict = {'completeness': completeness, 'accuracy': accuracy, 'normals completeness': completeness_normals, 'normals accuracy': accuracy_normals, 'normals': normals_correctness, 'completeness2': completeness2, 'accuracy2': accuracy2, 'chamfer-L2': chamferL2, 'chamfer-L1': chamferL1, 'f-score': F[9], 'f-score-15': F[14], 'f-score-20': F[19]}
    return out_dict
Evaluates a point cloud.

Args:
    pointcloud (numpy array): predicted point cloud
    pointcloud_tgt (numpy array): target point cloud
    normals (numpy array): predicted normals
    normals_tgt (numpy array): target normals
    thresholds (numpy array): threshold values for the F-score calculation
@staticmethod
def eval_pointcloud(pointcloud, pointcloud_tgt, normals=None, normals_tgt=None, thresholds=np.linspace((1.0 / 1000), 1, 1000)):
    ' Evaluates a point cloud.\n\n        Args:\n            pointcloud (numpy array): predicted point cloud\n            pointcloud_tgt (numpy array): target point cloud\n            normals (numpy array): predicted normals\n            normals_tgt (numpy array): target normals\n            thresholds (numpy array): threshold values for the F-score calculation\n        '
    if (pointcloud.shape[0] == 0):
        logger.warning('Empty pointcloud / mesh detected!')
        out_dict = EMPTY_PCL_DICT.copy()
        if ((normals is not None) and (normals_tgt is not None)):
            out_dict.update(EMPTY_PCL_DICT_NORMALS)
        return out_dict
    pointcloud = np.asarray(pointcloud)
    pointcloud_tgt = np.asarray(pointcloud_tgt)
    (completeness, completeness_normals) = distance_p2p(pointcloud_tgt, normals_tgt, pointcloud, normals)
    recall = get_threshold_percentage(completeness, thresholds)
    completeness2 = (completeness ** 2)
    completeness = completeness.mean()
    completeness2 = completeness2.mean()
    completeness_normals = completeness_normals.mean()
    (accuracy, accuracy_normals) = distance_p2p(pointcloud, normals, pointcloud_tgt, normals_tgt)
    precision = get_threshold_percentage(accuracy, thresholds)
    accuracy2 = (accuracy ** 2)
    accuracy = accuracy.mean()
    accuracy2 = accuracy2.mean()
    accuracy_normals = accuracy_normals.mean()
    chamferL2 = (0.5 * (completeness2 + accuracy2))
    normals_correctness = ((0.5 * completeness_normals) + (0.5 * accuracy_normals))
    chamferL1 = (0.5 * (completeness + accuracy))
    F = [(((2 * precision[i]) * recall[i]) / (precision[i] + recall[i])) for i in range(len(precision))]
    out_dict = {'completeness': completeness, 'accuracy': accuracy, 'normals completeness': completeness_normals, 'normals accuracy': accuracy_normals, 'normals': normals_correctness, 'completeness2': completeness2, 'accuracy2': accuracy2, 'chamfer-L2': chamferL2, 'chamfer-L1': chamferL1, 'f-score': F[9], 'f-score-15': F[14], 'f-score-20': F[19]}
    return out_dict