class_docstr: Another naive and quick pixel-level domain adaptation. It fits a simple transform (such as PCA, StandardScaler
  or MinMaxScaler) on both original and reference image, transforms original image with transform trained on this
  image and then performs inverse transformation using transform fitted on reference image.
  
  Args:
      reference_images (Sequence[Any]): Sequence of objects that will be converted to images by `read_fn`. By default,
      it expects a sequence of paths to images.
      blend_ratio (float, float): Tuple of min and max blend ratio. Matched image will be blended with original
          with random blend factor for increased diversity of generated images.
      read_fn (Callable): Used-defined function to read image. Function should get an element of `reference_images`
      and return numpy array of image pixels. Default: takes as input a path to an image and returns a numpy array.
      transform_type (str): type of transform; "pca", "standard", "minmax" are allowed.
      p (float): probability of applying the transform. Default: 1.0.
  
  Targets:
      image
  
  Image types:
      uint8, float32
  
  See also: https://github.com/arsenyinfo/qudida
code: def ensure_uint8(self, img: np.ndarray) -> Tuple[np.ndarray, bool]:
      if img.dtype == np.float32:
          if img.min() < 0 or img.max() > 1:
              message = (
                  "PixelDistributionAdaptation uses uint8 under the hood, so float32 should be converted,"
                  "Can not do it automatically when the image is out of [0..1] range."
              )
              raise TypeError(message)
          return (img * 255).astype("uint8"), True
      return img, False
  
imports: import random
  from typing import Any, Callable, Literal, Sequence, Tuple
  import cv2
  import numpy
  from qudida import DomainAdapter
  from skimage.exposure import match_histograms
  from sklearn.decomposition import PCA
  from sklearn.preprocessing import MinMaxScaler, StandardScaler
  from albumentations.augmentations.utils import clipped, get_opencv_dtype_from_numpy, is_grayscale_image, is_multispectral_image, preserve_shape, read_rgb_image
  from ..core.transforms_interface import ImageOnlyTransform, ScaleFloatType, to_tuple
label_desc: Use image node_id 3 for calling the PixelDistributionAdaptation obj's underlying member method code with example usage: obj.ensure_uint8(img) and returns: img,  False, unknown,  True