← Back to all transforms
RandomBrightnessContrast
Description
Randomly changes the brightness and contrast of the input image. This transform adjusts the brightness and contrast of an image simultaneously, allowing for a wide range of lighting and contrast variations. It's particularly useful for data augmentation in computer vision tasks, helping models become more robust to different lighting conditions. Args: brightness_limit (float | tuple[float, float]): Factor range for changing brightness. If a single float value is provided, the range will be (-brightness_limit, brightness_limit). Values should typically be in the range [-1.0, 1.0], where 0 means no change, 1.0 means maximum brightness, and -1.0 means minimum brightness. Default: (-0.2, 0.2). contrast_limit (float | tuple[float, float]): Factor range for changing contrast. If a single float value is provided, the range will be (-contrast_limit, contrast_limit). Values should typically be in the range [-1.0, 1.0], where 0 means no change, 1.0 means maximum increase in contrast, and -1.0 means maximum decrease in contrast. Default: (-0.2, 0.2). brightness_by_max (bool): If True, adjusts brightness by scaling pixel values up to the maximum value of the image's dtype. If False, uses the mean pixel value for adjustment. Default: True. p (float): Probability of applying the transform. Default: 0.5. Targets: image Image types: uint8, float32 Number of channels: Any Note: - The order of operation is: contrast adjustment, then brightness adjustment. - For uint8 images, the output is clipped to [0, 255] range. - For float32 images, the output may exceed the [0, 1] range. - The `brightness_by_max` parameter affects how brightness is adjusted: * If True, brightness adjustment is more pronounced and can lead to more saturated results. * If False, brightness adjustment is more subtle and preserves the overall lighting better. - This transform is useful for: * Simulating different lighting conditions * Enhancing low-light or overexposed images * Data augmentation to improve model robustness Mathematical Formulation: Let a be the contrast adjustment factor and β be the brightness adjustment factor. For each pixel value x: 1. Contrast adjustment: x' = clip((x - mean) * (1 + a) + mean) 2. Brightness adjustment: If brightness_by_max is True: x'' = clip(x' * (1 + β)) If brightness_by_max is False: x'' = clip(x' + β * max_value) Where clip() ensures values stay within the valid range for the image dtype. Examples: >>> import numpy as np >>> import albumentations as A >>> image = np.random.randint(0, 256, [100, 100, 3], dtype=np.uint8) # Default usage >>> transform = A.RandomBrightnessContrast(p=1.0) >>> augmented_image = transform(image=image)["image"] # Custom brightness and contrast limits >>> transform = A.RandomBrightnessContrast( ... brightness_limit=0.3, ... contrast_limit=0.3, ... p=1.0 ... ) >>> augmented_image = transform(image=image)["image"] # Adjust brightness based on mean value >>> transform = A.RandomBrightnessContrast( ... brightness_limit=0.2, ... contrast_limit=0.2, ... brightness_by_max=False, ... p=1.0 ... ) >>> augmented_image = transform(image=image)["image"] References: - Brightness: https://en.wikipedia.org/wiki/Brightness - Contrast: https://en.wikipedia.org/wiki/Contrast_(vision)
Parameters
- brightness_limit: int | tuple[int, int] | float | tuple[float, float] (default: (-0.2, 0.2))
- contrast_limit: int | tuple[int, int] | float | tuple[float, float] (default: (-0.2, 0.2))
- brightness_by_max: bool (default: true)
- p: float (default: 0.5)
Targets
- Image
Try it out
ⓘ
Original Image:
Result:
Transform result will appear here