code: def get_points3D(
      self, image_id, return_points2D=True, return_colors=False
  ):
      image = self.images[image_id]
  
      mask = image.point3D_ids != SceneManager.INVALID_POINT3D
  
      point3D_idxs = np.array(
          [
              self.point3D_id_to_point3D_idx[point3D_id]
              for point3D_id in image.point3D_ids[mask]
          ]
      )
      # detect filtered points
      filter_mask = point3D_idxs != SceneManager.INVALID_POINT3D
      point3D_idxs = point3D_idxs[filter_mask]
      result = [self.points3D[point3D_idxs, :]]
  
      if return_points2D:
          mask[mask] &= filter_mask
          result += [image.points2D[mask]]
      if return_colors:
          result += [self.point3D_colors[point3D_idxs, :]]
  
      return result if len(result) > 1 else result[0]
  
imports: from collections import OrderedDict, defaultdict
  from io import StringIO
  from itertools import combinations
  import os
  import struct
  from .camera import Camera
  from .image import Image
  import numpy
  from .rotation import Quaternion
label_desc: Use image node_id 25 for calling the SceneManager obj's underlying member method code with example usage: obj.get_points3D(image_id, return_points2D, return_colors) and returns: unknown