← Back to all transforms
HistogramMatching
Description
Adjust the pixel values of an input image to match the histogram of a reference image. This transform applies histogram matching, a technique that modifies the distribution of pixel intensities in the input image to closely resemble that of a reference image. This process is performed independently for each channel in multi-channel images, provided both the input and reference images have the same number of channels. Histogram matching is particularly useful for: - Normalizing images from different sources or captured under varying conditions. - Preparing images for feature matching or other computer vision tasks where consistent tone and contrast are important. - Simulating different lighting or camera conditions in a controlled manner. Args: reference_images (Sequence[Any]): A sequence of reference image sources. These can be file paths, URLs, or any objects that can be converted to images by the `read_fn`. blend_ratio (tuple[float, float]): Range for the blending factor between the original and the matched image. Must be two floats between 0 and 1, where: - 0 means no blending (original image is returned) - 1 means full histogram matching A random value within this range is chosen for each application. Default: (0.5, 1.0) read_fn (Callable[[Any], np.ndarray]): A function that takes an element from `reference_images` and returns a numpy array representing the image. Default: read_rgb_image (reads image file from disk) p (float): Probability of applying the transform. Default: 0.5 Targets: image Image types: uint8, float32 Note: - This transform cannot be directly serialized due to its dependency on external image data. - The effectiveness of the matching depends on the similarity between the input and reference images. - For best results, choose reference images that represent the desired tone and contrast. Example: >>> import numpy as np >>> import albumentations as A >>> image = np.random.randint(0, 256, [100, 100, 3], dtype=np.uint8) >>> reference_image = np.random.randint(0, 256, [100, 100, 3], dtype=np.uint8) >>> transform = A.HistogramMatching( ... reference_images=[reference_image], ... blend_ratio=(0.5, 1.0), ... read_fn=lambda x: x, ... p=1 ... ) >>> result = transform(image=image) >>> matched_image = result["image"] References: - Histogram Matching in scikit-image: https://scikit-image.org/docs/dev/auto_examples/color_exposure/plot_histogram_matching.html
Parameters
- p: float (default: 0.5)
- reference_images: Sequence[Any] (default: null)
- blend_ratio: tuple[float, float] (default: (0.5, 1))
- read_fn: Callable[[typing.Any], ndarray] (default: '(path: str | Path) -> np.ndarray')
Targets
- Image
Try it out
Original Image (width = 484, height = 733):
Reference Image:
Transformed Image:
Transform not yet applied