← Back to all transforms

# RandomGridShuffle

## Description

Randomly shuffles the grid's cells on an image, mask, or keypoints, effectively rearranging patches within the image. This transformation divides the image into a grid and then permutes these grid cells based on a random mapping. Args: grid (tuple[int, int]): Size of the grid for splitting the image into cells. Each cell is shuffled randomly. For example, (3, 3) will divide the image into a 3x3 grid, resulting in 9 cells to be shuffled. Default: (3, 3) p (float): Probability that the transform will be applied. Should be in the range [0, 1]. Default: 0.5 Targets: image, mask, keypoints Image types: uint8, float32 Note: - This transform maintains consistency across all targets. If applied to an image and its corresponding mask or keypoints, the same shuffling will be applied to all. - The number of cells in the grid should be at least 2 (i.e., grid should be at least (1, 2), (2, 1), or (2, 2)) for the transform to have any effect. - Keypoints are moved along with their corresponding grid cell. - This transform could be useful when only micro features are important for the model, and memorizing the global structure could be harmful. For example: - Identifying the type of cell phone used to take a picture based on micro artifacts generated by phone post-processing algorithms, rather than the semantic features of the photo. See more at https://ieeexplore.ieee.org/abstract/document/8622031 - Identifying stress, glucose, hydration levels based on skin images. Mathematical Formulation: 1. The image is divided into a grid of size (m, n) as specified by the 'grid' parameter. 2. A random permutation P of integers from 0 to (m*n - 1) is generated. 3. Each cell in the grid is assigned a number from 0 to (m*n - 1) in row-major order. 4. The cells are then rearranged according to the permutation P. Example: >>> import numpy as np >>> import albumentations as A >>> image = np.array([ ... [1, 1, 1, 2, 2, 2], ... [1, 1, 1, 2, 2, 2], ... [1, 1, 1, 2, 2, 2], ... [3, 3, 3, 4, 4, 4], ... [3, 3, 3, 4, 4, 4], ... [3, 3, 3, 4, 4, 4] ... ]) >>> transform = A.RandomGridShuffle(grid=(2, 2), p=1.0) >>> result = transform(image=image) >>> transformed_image = result['image'] # The resulting image might look like this (one possible outcome): # [[4, 4, 4, 2, 2, 2], # [4, 4, 4, 2, 2, 2], # [4, 4, 4, 2, 2, 2], # [3, 3, 3, 1, 1, 1], # [3, 3, 3, 1, 1, 1], # [3, 3, 3, 1, 1, 1]]

## Parameters

- grid: tuple[int, int] (default: (3, 3))
- p: float (default: 0.5)

## Targets

- Image
- Mask
- Keypoints

## Try it out

ⓘ