def augment_resize(sample_data, sample_seg, target_size, order=3, order_seg=1, cval_seg=0): """ Reshapes data (and seg) to target_size :param sample_data: np.ndarray or list/tuple of np.ndarrays, must be (c, x, y(, z))) (if list/tuple then each entry must be of this shape!) :param target_size: int or list/tuple of int :param order: interpolation order for data (see skimage.transform.resize) :param order_seg: interpolation order for seg (see skimage.transform.resize) :param cval_seg: cval for segmentation (see skimage.transform.resize) :param sample_seg: can be None, if not None then it will also be resampled to target_size. Can also be list/tuple of np.ndarray (just like data). Must also be (c, x, y(, z)) :return: """ dimensionality = len(sample_data.shape) - 1 if not isinstance(target_size, (list, tuple)): target_size_here = [target_size] * dimensionality else: assert len(target_size) == dimensionality, "If you give a tuple/list as target size, make sure it has " \ "the same dimensionality as data!" target_size_here = list(target_size) sample_data = resize_multichannel_image(sample_data, target_size_here, order) if sample_seg is not None: target_seg = np.ones([sample_seg.shape[0]] + target_size_here) for c in range(sample_seg.shape[0]): target_seg[c] = resize_segmentation(sample_seg[c], target_size_here, order_seg, cval_seg) else: target_seg = None return sample_data, target_seg
def augment_zoom(sample_data, sample_seg, zoom_factors, order=3, order_seg=1, cval_seg=0): """ zooms data (and seg) by factor zoom_factors :param sample_data: np.ndarray or list/tuple of np.ndarrays, must be (c, x, y(, z))) (if list/tuple then each entry must be of this shape!) :param zoom_factors: int or list/tuple of int (multiplication factor for the input size) :param order: interpolation order for data (see skimage.transform.resize) :param order_seg: interpolation order for seg (see skimage.transform.resize) :param cval_seg: cval for segmentation (see skimage.transform.resize) :param sample_seg: can be None, if not None then it will also be zoomed by zoom_factors. Can also be list/tuple of np.ndarray (just like data). Must also be (c, x, y(, z)) :return: """ dimensionality = len(sample_data.shape) - 1 shape = np.array(sample_data.shape[1:]) if not isinstance(zoom_factors, (list, tuple)): zoom_factors_here = np.array([zoom_factors] * dimensionality) else: assert len(zoom_factors) == dimensionality, "If you give a tuple/list as target size, make sure it has " \ "the same dimensionality as data!" zoom_factors_here = np.array(zoom_factors) target_shape_here = list(np.round(shape * zoom_factors_here).astype(int)) sample_data = resize_multichannel_image(sample_data, target_shape_here, order) if sample_seg is not None: target_seg = np.ones([sample_seg.shape[0]] + target_shape_here) for c in range(sample_seg.shape[0]): target_seg[c] = resize_segmentation(sample_seg[c], target_shape_here, order_seg, cval_seg) else: target_seg = None return sample_data, target_seg
def resize_data_and_seg(data, size, seg=None, order_data=3, order_seg=1, cval_seg=0): """ Args: data (np.ndarray): shape (b, c, h, w (, d)) seg (np.ndarray): shape (b, c, h, w (, d)). Defaults to None. size (list/tuple of int): size to resize to does not include the batch size or number of channels order_data (int): interpolation order for data (see skimage.transform.resize) order_seg (int): interpolation order for seg (see skimage.transform.resize) """ target_data = np.ones(list(data.shape[:2]) + size) if seg is not None: target_seg = np.ones(list(seg.shape[:2]) + size) else: target_seg = None for b in range(len(data)): target_data[b] = resize_multichannel_image(data[b], size, order_data) if seg is not None: for c in range(seg.shape[1]): target_seg[b, c] = resize_segmentation(seg[b, c], size, order_seg, cval_seg) return target_data, target_seg