Source code for openlifu.seg.seg_methods.uniform
from __future__ import annotations
import pandas as pd
import xarray as xa
from openlifu.seg.material import MATERIALS, Material
from openlifu.seg.seg_method import SegmentationMethod
[docs]
class UniformSegmentation(SegmentationMethod):
def _segment(self, volume: xa.DataArray):
return self._ref_segment(volume.coords)
[docs]
def to_table(self) -> pd.DataFrame:
"""
Get a table of the segmentation method parameters
:returns: Pandas DataFrame of the segmentation method parameters
"""
records = [{"Name": "Type", "Value": "Uniform", "Unit": ""},
{"Name": "Reference Material", "Value": self.ref_material, "Unit": ""}]
return pd.DataFrame.from_records(records)
[docs]
class UniformTissue(UniformSegmentation):
""" Assigns the tissue material to all voxels in the volume. """
def __init__(self, materials: dict[str, Material] | None = None):
if materials is None:
materials = MATERIALS.copy()
super().__init__(materials=materials, ref_material="tissue")
[docs]
def to_table(self) -> pd.DataFrame:
"""
Get a table of the segmentation method parameters
:returns: Pandas DataFrame of the segmentation method parameters
"""
records = [{"Name": "Type", "Value": "Uniform Tissue", "Unit": ""}]
return pd.DataFrame.from_records(records)
def to_dict(self):
d = super().to_dict()
d.pop("ref_material")
return d
[docs]
class UniformWater(UniformSegmentation):
""" Assigns the water material to all voxels in the volume. """
def __init__(self, materials: dict[str, Material] | None = None):
if materials is None:
materials = MATERIALS.copy()
super().__init__(materials=materials, ref_material="water")
[docs]
def to_table(self) -> pd.DataFrame:
"""
Get a table of the segmentation method parameters
:returns: Pandas DataFrame of the segmentation method parameters
"""
records = [{"Name": "Type", "Value": "Uniform Water", "Unit": ""}]
return pd.DataFrame.from_records(records)
def to_dict(self):
d = super().to_dict()
d.pop("ref_material")
return d