dosma.core.numpy_routines.pad
- dosma.core.numpy_routines.pad(x: dosma.core.med_volume.MedicalVolume, pad_width, mode='constant', **kwargs)[source]
Implementation of
numpy.pad()forMedicalVolume.Padding a MedicalVolume can affect the affine matrix of the volume. When spatial dimensions are padded, the scanner origin changes.
In addition to standard numpy syntax for
pad_width, this function provides some shortcuts for padding particular dimensions.Either
Noneor0can be used to indicate a dimension should not be padded. For example:>>> mv = MedicalVolume(np.ones(3,4,5), affine=np.eye(4)) >>> pad(mv, (None, 0, (2,3))) # dimensions 0 and 1 will not be padded >>> pad(mv, ((0,0), (0,0), (2,3))) # equivalent to previous, but in numpy syntax
Integers can also be used to indicate the dimension should be padded by the same amount on both sides:
>>> mv = MedicalVolume(np.ones(3,4,5), affine=np.eye(4)) >>> pad(mv, (5, (1,2), (2,3))) # dimension 0 padded by 5 on both sides >>> pad(mv, ((5,5), (1,2), (2,3))) # equivalent to previous, but in numpy syntax
pad_widthcan also be shorter than the total MedicalVolume dimensions. In this case, the padding is applying in a broadcasting fashion. For example, if the MedicalVolume is 3D, then specifying padding widths for only two dimensions will pad the last two dimensions:>>> mv = MedicalVolume(np.ones(3,4,5), affine=np.eye(4)) >>> pad(mv, (4, 6)) # last dimension padded by 6, second to last padded by 4 >>> pad(mv, ((0,0), (4,4), (6,6))) # equivalent to previous, but in numpy syntax
- Parameters
x (MedicalVolume) – The medical image.
pad_width (Union[Sequence, int]) – Same as
numpy.pad().mode (str) – Same as
numpy.pad().kwargs – Same as
numpy.pad().
- Returns
The padded medical image.
- Return type
Note
Currently, headers are not preserved upon padding. The returned medical image will not have any headers. This may change in the future.
Examples
>>> arr = np.random.rand(3,4,5) >>> mv = MedicalVolume(arr, affine=np.eye(4)) >>> mv_pad = np.pad(mv, 1) # pad all dimensions by 1