class_docstr: This one finds a mask of nonzero elements (must be nonzero in all modalities) and crops the image to that mask.
  In the case of BRaTS and ISLES data this results in a significant reduction in image size.
  Args:
      num_threads (int): Number of threads. Default: None.
      output_folder (str, None): path to store the cropped data. Default: None.
code: def run_cropping(
      self, list_of_files, overwrite_existing=False, output_folder=None
  ):
      if output_folder is not None:
          self.output_folder = output_folder
  
      output_folder_gt = join_paths(
          self.output_folder, "gt_segmentations"
      )
      os.makedirs(output_folder_gt, exist_ok=True)
      for j, case in enumerate(list_of_files):
          if case[-1] is not None:
              shutil.copy(case[-1], output_folder_gt)
  
      list_of_args = []
      for j, case in enumerate(list_of_files):
          case_identifier = get_case_identifier(case)
          list_of_args.append(
              (case, case_identifier, overwrite_existing)
          )
  
      p = Pool(self.num_threads)
      p.starmap(self.load_crop_save, list_of_args)
      p.close()
      p.join()
  
imports: import os
  import json
  import shutil
  import pickle
  import numpy
  import SimpleITK
  from scipy.ndimage import binary_fill_holes
  from multiprocessing import Pool
  from collections import OrderedDict
  from .path_utils import join_paths
label_desc: Use image node_id 5 for calling the ImageCropper obj's underlying member method code with example usage: obj.run_cropping(list_of_files, overwrite_existing, output_folder) without return types