medpy.iterators.patchwise.CentredPatchIterator#
- class medpy.iterators.patchwise.CentredPatchIterator(array, psize, cval=0)[source]#
Iterated patch-wise over the array, where the central patch is centred on the image centre.
All yielded patches will be of size
psize. Areas outside of the array are filled withcval. Besides the patch, a patch mask is returned, that denoted the outside values. Additionally, the n-dimensional grid id and a slicer object are returned.To extract the same patch from another array of the same size as
array, use theapplyslicermethod.The following schematic overview explains the behaviour to expect for even and odd images respectively patches. All
Odenote image voxels,|the patch borders and#padded voxels.One-dimensional image of size 5 with patch sizes 1, 2, 3, 4 and 5:
|O|O|O|O|O| |#O|OO|OO| |##O|OOO|O##| |OOOO|O###| |OOOOO|
One-dimensional image of size 4 with patch sizes 1, 2, 3 and 4:
|O|O|O|O| |#O|OO|O#| |OOO|O##| |OOOO|
- Parameters:
- arrayarray_like
A n-dimensional array.
- psizeint or sequence
The patch size. If a single integer interpreted as hyper-cube.
- cvalnumber
Value to fill undefined positions.
Examples
>>> import numpy >>> from medpy.iterators import CentredPatchIterator >>> arr = numpy.arange(0, 25).reshape((5,5)) >>> arr array([[ 0, 1, 2, 3, 4], [ 5, 6, 7, 8, 9], [10, 11, 12, 13, 14], [15, 16, 17, 18, 19], [20, 21, 22, 23, 24]]) >>> patches, pmasks, gridids, slicers = zip(*CentredPatchIterator(arr, 3)) Total number of patches: >>> len(patches) 9 Central patch: >>> patches[4] array([[ 6, 7, 8], [11, 12, 13], [16, 17, 18]]) Bottom-right corner patch: >>> patches[-1] array([[24, 0, 0], [ 0, 0, 0], [ 0, 0, 0]]) And its definition mask: >>> pmasks[-1] array([[ True, False, False], [False, False, False], [False, False, False]], dtype=bool) One dimensional behaviour examples: >>> arr = range(1, 5) >>> len(arr) 4 >>> patches, pmasks, _, _ = zip(*CentredPatchIterator(arr, 1)) >>> arr, patches ([1, 2, 3, 4], (array([1]), array([2]), array([3]), array([4]))) >>> patches, _, _, _ = zip(*CentredPatchIterator(arr, 2)) >>> arr, patches ([1, 2, 3, 4], (array([0, 1]), array([2, 3]), array([4, 0]))) >>> patches, _, _, _ = zip(*CentredPatchIterator(arr, 3)) >>> arr, patches ([1, 2, 3, 4], (array([1, 2, 3]), array([4, 0, 0]))) >>> patches, _, _, _ = zip(*CentredPatchIterator(arr, 4)) >>> arr, patches ([1, 2, 3, 4], (array([1, 2, 3, 4]),))
Methods
__init__(array, psize[, cval])applyslicer(array, slicer, pmask[, cval])Apply a slicer returned by the iterator to a new array of the same dimensionality as the one used to initialize the iterator.
assembleimage(patches, pmasks, gridids)Assemble an image from a number of patches, patch masks and their grid ids.
next()Yields the next patch.