Source code for stimupy.utils.contrast_conversions

import numpy as np

__all__ = [
    "transparency",
    "adapt_michelson_contrast",
    "adapt_rms_contrast",
    "adapt_normalized_rms_contrast",
    "adapt_intensity_range",
    "adapt_michelson_contrast_dict",
    "adapt_rms_contrast_dict",
    "adapt_normalized_rms_contrast_dict",
    "adapt_intensity_range_dict",
]


[docs] def transparency(img, mask=None, alpha=0.5, tau=0.2): """Applies a transparency to image at specified (mask) location if provided Parameters ---------- img : np.array image to which transparency will be applied mask : np.array or None (default) if not None, transparency will be provided at non-zero locations provided in this mask alpha : Number alpha of transparency (i.e. how transparent the medium is), default 0.2 tau : Number tau of transparency (i.e. value of transparent medium), default 0.5 Returns ------- img with the applied transparency """ if mask is None: mask = np.ones(img.shape) img = np.where(mask, alpha * img + (1 - alpha) * tau, img) return img
[docs] def adapt_michelson_contrast(img, michelson_contrast, mean_luminance=None): """ Adapt Michelson contrast of image Parameters ---------- img : np.ndarray stimulus array michelson_contrast : float desired Michelson contrast mean_luminance : float desired mean luminance; if None (default), dont change mean luminance Returns ---------- img : np.ndarray image with adapted michelson contrast and mean luminance if passed """ if mean_luminance is None: mean_luminance = img.mean() # Adapt Michelson contrast img = (img - img.min()) / (img.max() - img.min()) img = img * michelson_contrast * 2.0 * mean_luminance img += mean_luminance - michelson_contrast * mean_luminance return img
[docs] def adapt_rms_contrast(img, rms_contrast, mean_luminance=None): """ Adapt rms contrast of image (std) Parameters ---------- img : np.ndarray stimulus array rms_contrast : float desired rms contrast (std divided by mean intensity) mean_luminance : float desired mean luminance; if None (default), dont change mean luminance Returns ---------- img : np.ndarray image with adapted rms contrast and mean luminance if passed """ if mean_luminance is None: mean_luminance = img.mean() # Adapt rms contrast img = img - img.mean() img = img / img.std() * rms_contrast + mean_luminance return img
[docs] def adapt_normalized_rms_contrast(img, rms_contrast, mean_luminance=None): """ Adapt normalized rms contrast of image (std divided by mean) Parameters ---------- img : np.ndarray stimulus array rms_contrast : float desired rms contrast (std divided by mean intensity) mean_luminance : float desired mean luminance; if None (default), dont change mean luminance Returns ---------- img : np.ndarray image with adapted rms contrast and mean luminance if passed """ if mean_luminance is None: mean_luminance = img.mean() img = img - img.mean() img = img / img.std() * rms_contrast * mean_luminance + mean_luminance return img
[docs] def adapt_intensity_range(img, intensity_min=0.0, intensity_max=1.0): """ Adapt intensity range of image Parameters ---------- img : np.ndarray stimulus array intensity_min : float new minimal intensity value intensity_max : float new maximal intensity value Returns ---------- img : np.ndarray image with adapted intensity range """ img = (img - img.min()) / (img.max() - img.min()) img = img * (intensity_max - intensity_min) + intensity_min return img
[docs] def adapt_michelson_contrast_dict(stim, michelson_contrast, mean_luminance=None): """ Adapt Michelson contrast of image in dict Parameters ---------- stim : dict stimulus dictionary containing at least key "img" michelson_contrast : float desired Michelson contrast mean_luminance : float desired mean luminance; if None (default), dont change mean luminance Returns ---------- dict[str, Any] dict with the stimulus (key: "img"), Michelson contrast (key: "michelson_contrast"), mean luminance ("mean_luminance") and additional keys containing stimulus parameters """ # Adapt Michelson contrast of image img = adapt_michelson_contrast(stim["img"], michelson_contrast, mean_luminance) stim["img"] = img stim["michelson_contrast"] = michelson_contrast stim["mean_luminance"] = mean_luminance return stim
[docs] def adapt_rms_contrast_dict(stim, rms_contrast, mean_luminance=None): """ Adapt rms contrast of image (std) Parameters ---------- stim : dict stimulus dictionary containing at least key "img" rms_contrast : float desired rms contrast (std divided by mean intensity) mean_luminance : float desired mean luminance; if None (default), dont change mean luminance Returns ---------- dict[str, Any] dict with the stimulus (key: "img"), RMS contrast (key: "rms_contrast"), mean luminance ("mean_luminance") and additional keys containing stimulus parameters """ # Adapt rms_contrast of image img = adapt_rms_contrast(stim["img"], rms_contrast, mean_luminance) stim["img"] = img stim["rms_contrast"] = rms_contrast stim["mean_luminance"] = mean_luminance return stim
[docs] def adapt_normalized_rms_contrast_dict(stim, rms_contrast, mean_luminance=None): """ Adapt normalized rms contrast of image (std divided by mean) Parameters ---------- stim : dict stimulus dictionary containing at least key "img" rms_contrast : float desired rms contrast (std divided by mean intensity) mean_luminance : float desired mean luminance; if None (default), dont change mean luminance Returns ---------- dict[str, Any] dict with the stimulus (key: "img"), RMS contrast (key: "rms_contrast"), mean luminance ("mean_luminance") and additional keys containing stimulus parameters """ # Adapt normalized rms contrast img = adapt_normalized_rms_contrast(stim["img"], rms_contrast, mean_luminance) stim["img"] = img stim["rms_contrast"] = rms_contrast stim["mean_luminance"] = mean_luminance return stim
[docs] def adapt_intensity_range_dict(stim, intensity_min=0.0, intensity_max=1.0): """ Adapt intensity range of image Parameters ---------- stim : dict stimulus dictionary containing at least key "img" intensity_min : float new minimal intensity value intensity_max : float new maximal intensity value Returns ---------- dict[str, Any] dict with the stimulus (key: "img"), intensity range (key: "intensity_range"), and additional keys containing stimulus parameters """ img = adapt_intensity_range(stim["img"], intensity_min, intensity_max) stim["img"] = img stim["intensity_range"] = (intensity_min, intensity_max) return stim