# Image Processing Functions

This module contains functions for processing images, including extracting patches, adding synthetic noise, and normalizing image stacks.

## Usage Examples

Extracting Patches

    from image_processing import extract_patches
    import numpy as np

    data = np.random.rand(100, 64, 64)  # Example dataset of 100 images, each 64x64
    patches = extract_patches(data, num_patches=500, patch_size=16, strategy='random')

Adding Noise to Images

    from image_processing import add_noise
    import numpy as np

    images = np.random.rand(100, 64, 64)  # Example dataset of 100 images, each 64x64
    noisy_images = add_noise(images, gaussian_sigma=0.1)

Normalizing an Image Stack

    from image_processing import normalize_image_stack
    import numpy as np

    stack = np.random.rand(100, 64, 64)  # Example image stack
    normalized_stack = normalize_image_stack(stack)

## Functions

encoding_information.image_utils._extract_random_patches(data, num_patches, patch_size, verbose)

  Extract random patches from a dataset, used by both random and uniform_random strategies.

  Parameters:

    - data (ndarray) – Input dataset to extract patches from.

    - num_patches (int) – The number of patches to extract.

    - patch_size (int) – Size of each patch.

    - verbose (bool) – If True, show progress with tqdm.

  Returns:

    Array of extracted patches.

  Return type:

    ndarray

encoding_information.image_utils.extract_patches(data, num_patches=1000, patch_size=16, strategy='random', crop_location=None, num_masked_pixels=256, seed=None, verbose=False) → Array

  Extract patches from a dataset using various strategies.

  Parameters:

    - data (ndarray) – Input data from which to extract patches. Can have shapes (N, W, H), (N, W, H, C), or (N, D).

    - num_patches (int, optional) – Number of patches to extract.

    - patch_size (int, optional) – Size of the square patches.

    - strategy (str, optional) – Strategy for patch extraction (‘random’, ‘uniform_random’, ‘tiled’, ‘cropped’, ‘masked’).

    - crop_location (tuple, optional) – Top-left corner of the patch for ‘cropped’ strategy. If None, a random location is chosen.

    - num_masked_pixels (int, optional) – Number of pixels to mask in the ‘masked’ strategy.

    - seed (int, optional) – Random seed for reproducibility.

    - verbose (bool, optional) – If True, show progress during patch extraction.

  Returns:

    Extracted patches.

  Return type:

    ndarray

encoding_information.image_utils.add_noise(images, ensure_positive=True, gaussian_sigma=None, key=None, seed=None, batch_size=1000)

  Add Poisson or Gaussian noise to a stack of images.

  Parameters:

    - images (ndarray) – A stack of images (NxHxW) or patches (Nx(num pixels)).

    - ensure_positive (bool, optional) – Whether to ensure all resulting pixel values are non-negative.

    - gaussian_sigma (float, optional) – Standard deviation for Gaussian noise. If None, Poisson noise is added.

    - key (jax.random.PRNGKey, optional) – PRNGKey for generating noise. If None, a key is generated based on the seed.

    - seed (int, optional) – Seed for generating noise, if no key is provided.

    - batch_size (int, optional) – Number of images to process in batches.

  Returns:

    Noisy images.

  Return type:

    ndarray

encoding_information.image_utils.normalize_image_stack(stack)

  Rescale pixel values to normalize the average energy across images.

  Parameters:

    stack (ndarray) – Stack of images to normalize.

  Returns:

    Normalized image stack.

  Return type:

    ndarray