code: def keypoint_shift_scale_rotate(
      keypoint, angle, scale, dx, dy, rows, cols, **params
  ):
      (
          x,
          y,
          a,
          s,
      ) = keypoint[:4]
      height, width = rows, cols
      center = (cols - 1) * 0.5, (rows - 1) * 0.5
      matrix = cv2.getRotationMatrix2D(center, angle, scale)
      matrix[0, 2] += dx * width
      matrix[1, 2] += dy * height
  
      x, y = cv2.transform(np.array([[[x, y]]]), matrix).squeeze()
      angle = a + math.radians(angle)
      scale = s * scale
  
      return x, y, angle, scale
  
imports: import math
  from typing import List, Optional, Sequence, Tuple, Union
  import cv2
  import numpy
  import skimage.transform
  from scipy.ndimage import gaussian_filter
  from albumentations.augmentations.utils import _maybe_process_in_chunks, angle_2pi_range, clipped, preserve_channel_dim, preserve_shape
  from ...None import random_utils
  from ...core.bbox_utils import denormalize_bbox, normalize_bbox
  from ...core.transforms_interface import BoxInternalType, FillValueType, ImageColorType, KeypointInternalType
label_desc: Use image node_id 7 for calling a global function with example usage: keypoint_shift_scale_rotate(keypoint, angle, scale, dx, dy, rows, cols) and returns: x,  y,  angle,  scale