1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
|
%pythoncode %{
import numpy as np
class NDArrayITKBase(np.ndarray):
"""A numpy array that provides a view on the data associated with an optional itk "base" object."""
def __new__(cls, input_array, itk_base=None):
obj = np.asarray(input_array).view(cls)
obj.itk_base = itk_base
return obj
def __array_finalize__(self, obj):
if obj is None: return
self.itk_base = getattr(obj, 'itk_base', None)
try:
from distributed.protocol import dask_serialize, dask_deserialize
from typing import Dict, List, Tuple
except (ImportError, RuntimeError):
pass
else:
@dask_serialize.register(NDArrayITKBase)
def serialize(ndarray_itk_base: NDArrayITKBase) -> Tuple[Dict, List[bytes]]:
dumps = dask_serialize.dispatch(np.ndarray)
return dumps(ndarray_itk_base)
@dask_deserialize.register(NDArrayITKBase)
def deserialize(header: Dict, frames: List[bytes]) -> NDArrayITKBase:
loads = dask_deserialize.dispatch(np.ndarray)
return NDArrayITKBase(loads(header, frames))
def _get_numpy_pixelid(itk_Image_type) -> np.dtype:
"""Returns a ITK PixelID given a numpy array."""
# This is a Mapping from numpy array types to itk pixel types.
_np_itk = {"UC":np.dtype(np.uint8),
"US":np.dtype(np.uint16),
"UI":np.dtype(np.uint32),
"UL":np.dtype(np.uint64),
"ULL":np.dtype(np.uint64),
"SC":np.dtype(np.int8),
"SS":np.dtype(np.int16),
"SI":np.dtype(np.int32),
"SL":np.dtype(np.int64),
"SLL":np.dtype(np.int64),
"F":np.dtype(np.float32),
"D":np.dtype(np.float64),
"PF2":np.dtype(np.float32),
"PF3":np.dtype(np.float32),
}
import os
if os.name == 'nt':
_np_itk['UL'] = np.dtype(np.uint32)
_np_itk['SL'] = np.dtype(np.int32)
try:
return _np_itk[itk_Image_type]
except KeyError as e:
raise e
%}
|