Source code for ewoksndreg.transformation.base

from typing import Type, Sequence, Optional
import numpy
from .types import TransformationType
from ..registry import Registered

__all__ = ["Transformation"]


[docs] class Transformation(Registered, register=False): def __init__(self, transfo_type: TransformationType) -> None: if isinstance(transfo_type, str): transfo_type = TransformationType(transfo_type) self._type = transfo_type @property def type(self) -> TransformationType: return self._type
[docs] def as_type(self, cls: Type["Transformation"]) -> "Transformation": if isinstance(self, cls): return self raise TypeError(f"cannot convert '{type(self).__name__}' to '{cls.__name__}'")
[docs] def is_homography(self): return self._type in [ "identity", "translation", "rigid", "similarity", "affine", "projective", ]
[docs] def apply_coordinates(self, coord: Sequence[numpy.ndarray]) -> numpy.ndarray: """ :param coord: shape `(N, M)` :returns: shape `(N, M)` """ raise NotImplementedError
[docs] def apply_data( self, data: numpy.ndarray, offset: Optional[numpy.ndarray] = None, shape: Optional[numpy.ndarray] = None, cval=numpy.nan, interpolation_order: int = 1, ) -> numpy.ndarray: """ :param data: shape `(N1, N2, ..., M1, M2, ...)` with `len((N1, N2, ...)) = N` :param offset: shape `(N,)` :param shape: shape `(N,) = [N1', N2', ...]` :param cval: missing value :param interpolation_order: order of interpolation: 0 is nearest neighbor, 1 is bilinear,... :returns: shape `(N1', N2', ..., M1, M2, ...)` """ raise NotImplementedError
def __mul__(self, other: "Transformation") -> "Transformation": """When appyling the transformation, `other` comes after `self`""" raise NotImplementedError