code: def collect_anomaly_scores(anomaly_maps, ground_truth_maps):
      """
      Extract anomaly scores for each ground truth connected component as well as anomaly scores for each potential false
      positive pixel from anomaly maps.
  
      Args:
          anomaly_maps: List of anomaly maps (2D numpy arrays) that contain a real-valued anomaly score at each pixel.
          ground_truth_maps: List of ground truth maps (2D numpy arrays) that contain binary-valued ground truth labels
                             for each pixel. 0 indicates that a pixel is anomaly-free. 1 indicates that a pixel contains
                             an anomaly.
      Returns:
          ground_truth_components: A list of all ground truth connected components that appear in the dataset.
              For each component, a sorted list of its anomaly scores is stored.
          anomaly_scores_ok_pixels: A sorted list of anomaly scores of all anomaly-free pixels of the dataset.
              This list can be used to quickly select thresholds that fix a certain false positive rate.
      """
      # Make sure an anomaly map is present for each ground truth map.
      assert len(anomaly_maps) == len(ground_truth_maps)
  
      # Initialize ground truth components and scores of potential fp pixels.
      ground_truth_components = []
      anomaly_scores_ok_pixels = np.zeros(
          len(ground_truth_maps) * ground_truth_maps[0].size
      )
  
      # Structuring element for computing connected components.
      structure = np.ones((3, 3), dtype=int)
  
      # Collect anomaly scores within each ground truth region and for all potential fp pixels.
      ok_index = 0
      for gt_map, prediction in zip(ground_truth_maps, anomaly_maps):
          # Compute the connected components in the ground truth map.
          labeled, n_components = label(gt_map, structure)
  
          # Store all potential fp scores.
          num_ok_pixels = len(prediction[labeled == 0])
          anomaly_scores_ok_pixels[
              ok_index : ok_index + num_ok_pixels
          ] = prediction[labeled == 0].copy()
          ok_index += num_ok_pixels
  
          # Fetch anomaly scores within each GT component.
          for k in range(n_components):
              component_scores = prediction[labeled == (k + 1)]
              ground_truth_components.append(
                  GroundTruthComponent(component_scores)
              )
  
      # Sort all potential false positive scores.
      anomaly_scores_ok_pixels = np.resize(
          anomaly_scores_ok_pixels, ok_index
      )
      anomaly_scores_ok_pixels.sort()
  
      return ground_truth_components, anomaly_scores_ok_pixels
  
file_path: anomalib/tests/helpers/aupro_reference.py
imports: from bisect import bisect
  import numpy
  from scipy.ndimage.measurements import label
label_desc: Use image node_id 2 for calling a global function with example usage: collect_anomaly_scores(anomaly_maps, ground_truth_maps) and returns: ground_truth_components,  anomaly_scores_ok_pixels