def METHOD_NAME(detection_corners, prediction_corners, iou_threshold):
    iou_matrix = np.zeros((len(detection_corners), len(prediction_corners)), dtype=np.float32)
    for d, det in enumerate(detection_corners):
        for t, trk in enumerate(prediction_corners):
            iou_matrix[d, t] = iou3D(det, trk)[0]
    detection_match_ids, prediction_match_ids = linear_sum_assignment(-iou_matrix)
    unmatched_detections = []
    unmatched_predictions = []
    for i in range(len(detection_corners)):
        if i not in detection_match_ids:
            unmatched_detections.append(i)
    for i in range(len(prediction_corners)):
        if i not in detection_match_ids:
            unmatched_predictions.append(i)
    matched_pairs = []
    for i in range(len(detection_match_ids)):
        detection_id = detection_match_ids[i]
        prediction_id = prediction_match_ids[i]
        if iou_matrix[detection_id, prediction_id] < iou_threshold:
            unmatched_detections.append(detection_id)
            unmatched_predictions.append(prediction_id)
        else:
            matched_pairs.append([detection_id, prediction_id])
    if len(matched_pairs) <= 0:
        matched_pairs = np.zeros((0, 2), dtype=np.int32)
    else:
        matched_pairs = np.array(matched_pairs, dtype=np.int32)
    return matched_pairs, unmatched_detections, unmatched_predictions