Source code for lesion_metrics.utils

"""Utilities for lesion metrics
Author: Jacob Reinhold (jcreinhold@gmail.com)
Created on: 16 Aug 2021
"""

__all__ = [
    "bbox",
    "to_numpy",
]

import builtins
import itertools
import typing

import lesion_metrics.typing as lmt


[docs]def bbox(label: lmt.Label) -> typing.List[builtins.slice]: ndim = label.ndim assert isinstance(ndim, int) dims = reversed(range(ndim)) indices: typing.List[builtins.slice] = [] for dim in itertools.combinations(dims, ndim - 1): nonzero = label.any(dim).nonzero() is_numpy = isinstance(nonzero, tuple) nonzero = nonzero[0] if is_numpy else nonzero.squeeze() indices.append(slice(nonzero[0], nonzero[-1] + 1)) return indices
[docs]def to_numpy(label: lmt.Label) -> lmt.Label: if hasattr(label, "numpy"): label = label.numpy() # type: ignore[attr-defined] return label