Source code for antspynet.utilities.cropping_and_padding_utilities

import ants

import numpy as np
import math

[docs]def crop_image_center(image, crop_size): """ Crop the center of an image. Arguments --------- image : ANTsImage Input image crop_size: n-D tuple Width, height, depth (if 3-D), and time (if 4-D) of crop region. Returns ------- ANTs image. Example ------- >>> import ants >>> image = ants.image_read(ants.get_ants_data('r16')) >>> cropped_image = crop_image_center(image, crop_size=(64, 64)) """ image_size = np.array(image.shape) if len(image_size) != len(crop_size): raise ValueError("crop_size does not match image size.") if (np.asarray(crop_size) > np.asarray(image_size)).any(): raise ValueError("A crop_size dimension is larger than image_size.") start_index = (np.floor(0.5 * (np.asarray(image_size) - np.asarray(crop_size)))).astype(int) end_index = start_index + np.asarray(crop_size).astype(int) cropped_image = ants.crop_indices(ants.image_clone(image) * 1, start_index, end_index) return(cropped_image)
[docs]def pad_image_by_factor(image, factor): """ Pad an image based on a factor. Pad image of size (x, y, z) to (x', y', z') where (x', y', z') is a divisible by a user-specified factor. Arguments --------- image : ANTsImage Input image factor: scalar or n-D tuple Padding factor Returns ------- ANTs image. Example ------- >>> import ants >>> image = ants.image_read(ants.get_ants_data('r16')) >>> padded_image = pad_image_by_factor(image, factor=4) """ factor_vector = factor if isinstance(factor, int): factor_vector = np.repeat(factor, image.dimension) if len(factor_vector) != image.dimension: raise ValueError("factor must be scalar or the length of the image dimension.") image_size = np.array(image.shape) delta_size = image_size % factor_vector padded_size = image_size for i in range(len(padded_size)): if delta_size[i] > 0: padded_size[i] = image_size[i] - delta_size[i] + factor_vector[i] padded_image = pad_or_crop_image_to_size(image, padded_size) return(padded_image)
[docs]def pad_or_crop_image_to_size(image, size): """ Pad or crop an image to a specified size Arguments --------- image : ANTsImage Input image size : tuple size of output image Returns ------- A cropped or padded image Example ------- >>> import ants >>> image = ants.image_read(ants.get_ants_data('r16')) >>> padded_image = pad_or_crop_image_to_size(image, (333, 333)) """ image_size = np.array(image.shape) delta = image_size - np.array(size) if np.any(delta < 0): pad_size = 2 * math.ceil(0.5 * abs(delta.min())) pad_shape = image_size + pad_size image = ants.pad_image(image, shape=pad_shape) cropped_image = crop_image_center(image, size) return(cropped_image)