class_docstr: Calculates HomographyTransformation between points.
  
  The camera movement is represented as an homography that matches the optical flow between the previous reference frame
  and the current.
  
  Comparing consecutive frames can make differences too small to correctly estimate the homography, often resulting in the identity.
  For this reason the reference frame is kept fixed as we progress through the video.
  Eventually, if the transformation is no longer able to match enough points, the reference frame is updated.
  
  Parameters
  ----------
  method : Optional[int], optional
      One of openCV's method for finding homographies.
      Valid options are: `[0, cv.RANSAC, cv.LMEDS, cv.RHO]`, by default `cv.RANSAC`
  ransac_reproj_threshold : int, optional
      Maximum allowed reprojection error to treat a point pair as an inlier. More info in links below.
  max_iters : int, optional
      The maximum number of RANSAC iterations.  More info in links below.
  confidence : float, optional
      Confidence level, must be between 0 and 1. More info in links below.
  proportion_points_used_threshold : float, optional
      Proportion of points that must be matched, otherwise the reference frame must be updated.
  
  See Also
  --------
  [opencv.findHomography](https://docs.opencv.org/3.4/d9/d0c/group__calib3d.html#ga4abc2ece9fab9398f2e560d53c8c9780)
code: def __call__(
      self, curr_pts: np.ndarray, prev_pts: np.ndarray
  ) -> Tuple[bool, HomographyTransformation]:
      homography_matrix, points_used = cv2.findHomography(
          prev_pts,
          curr_pts,
          method=self.method,
          ransacReprojThreshold=self.ransac_reproj_threshold,
          maxIters=self.max_iters,
          confidence=self.confidence,
      )
  
      proportion_points_used = np.sum(points_used) / len(points_used)
  
      update_prvs = (
          proportion_points_used < self.proportion_points_used_threshold
      )
  
      try:
          homography_matrix = homography_matrix @ self.data
      except (TypeError, ValueError):
          pass
  
      if update_prvs:
          self.data = homography_matrix
  
      return update_prvs, HomographyTransformation(homography_matrix)
  
imports: from abc import ABC, abstractmethod
  from typing import Optional, Tuple
  import numpy
label_desc: Use image node_id 2 for calling the HomographyTransformationGetter obj's underlying member method code with example usage: obj.__call__(curr_pts, prev_pts) and returns: update_prvs,  HomographyTransformation