Source code for dltk.core.io.preprocessing

from __future__ import print_function
from __future__ import absolute_import
from __future__ import division

import numpy as np

epsilon = 1e-8

[docs]def whitening(image): """Whitening Normalises image to zero mean and unit variance Parameters ---------- image : np.ndarray image to be whitened Returns ------- np.ndarray whitened image """ ret = (image - np.mean(image)) / (np.std(image) + epsilon) return ret
[docs]def normalise_zero_one(image): """Image normalisation Normalises image to fit [0, 1] range Parameters ---------- image : np.ndarray image to be normalised Returns ------- np.ndarray normalised image """ image = image.astype(np.float32) ret = (image - np.min(image)) ret /= (np.max(image) + epsilon) return ret
[docs]def normalise_one_one(image): """Image normalisation Normalises image to fit [-1, 1] range Parameters ---------- image : np.ndarray image to be normalised Returns ------- np.ndarray normalised image """ ret = normalise_zero_one(image) ret *= 2. ret -= 1. return ret
[docs]def resize_image_with_crop_or_pad(image, img_size=[64,64,64], **kwargs): """Image resizing Resizes image by cropping or padding dimension to fit specified size. Parameters ---------- image : np.ndarray image to be resized img_size : list or tuple new image size kwargs additional arguments to be passed to np.pad Returns ------- np.ndarray resized image """ assert isinstance(image, (np.ndarray, np.generic)) assert (image.ndim - 1 == len(img_size) or image.ndim == len(img_size)), \ 'Example size doesnt fit image size' # find image dimensionality rank = len(img_size) # create placeholders for new shape from_indices = [[0, image.shape[dim]] for dim in range(rank)] to_padding = [[0, 0] for dim in range(rank)] slicer = [slice(None)] * rank for i in range(rank): # for each dimensions find whether it is supposed to be cropped or padded if image.shape[i] < img_size[i]: to_padding[i][0] = (img_size[i] - image.shape[i]) // 2 to_padding[i][1] = img_size[i] - image.shape[i] - to_padding[i][0] else: from_indices[i][0] = int(np.floor((image.shape[i] - img_size[i]) / 2.)) from_indices[i][1] = from_indices[i][0] + img_size[i] # create slicer object to crop or leave each dimension slicer[i] = slice(from_indices[i][0], from_indices[i][1]) # pad the cropped image to extend the missing dimension return np.pad(image[slicer], to_padding, **kwargs)