import numpy as np
from ...utils import random_uniform_float
from typing import Union, Tuple, List
[docs]def change_gamma_unnormalized(img, l):
min_value = np.min(img)
max_value = np.max(img)
input_range = (min_value, max_value)
range_0_1 = (0, 1)
normalized = scale(img, input_range, range_0_1)
normalized = change_gamma(normalized, l)
return scale(normalized, range_0_1, input_range)
[docs]def change_gamma(img, l):
return np.power(img, l)
[docs]def scale(img, old_range, new_range):
shift = -old_range[0] + new_range[0] * (old_range[1] - old_range[0]) / (new_range[1] - new_range[0])
scale = (new_range[1] - new_range[0]) / (old_range[1] - old_range[0])
return (img + shift) * scale
[docs]def random_change_gamma(img, lambda_min=0.5, lambda_max=1.5,
seed: Union[np.random.RandomState, np.random.Generator, np.random.BitGenerator, int, None] = None,
legacy_random_state: bool = True):
l = random_uniform_float(lambda_min, lambda_max,
seed=seed,
legacy_random_state=legacy_random_state)
return change_gamma_unnormalized(img, l)