CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/pypi-itk

Insight Toolkit for N-dimensional image processing, segmentation, and registration in medical and scientific applications

Pending
Overview
Eval results
Files

label-operations.mddocs/reference/filtering/

Label Image Operations

Operations for working with label images including label statistics, relabeling, and label map manipulation.

Capabilities

Label Statistics

def label_statistics_image_filter(input, label_image):
    """
    Compute statistics for each label region.
    
    Parameters:
    - input: itk.Image - Intensity image
    - label_image: itk.Image - Label image
    
    Returns:
    Filter with computed statistics
    """

class LabelStatisticsImageFilter:
    """
    Compute intensity statistics for labeled regions.
    
    Template parameters:
    - input_image_type: Input intensity image type
    - label_image_type: Label image type
    """
    
    def SetInput(self, image):
        """Set the intensity image."""
    
    def SetLabelInput(self, label_image):
        """Set the label image."""
    
    def Update(self):
        """Compute statistics."""
    
    def GetNumberOfLabels(self):
        """Get number of labels found."""
    
    def GetMean(self, label):
        """Get mean intensity for label."""
    
    def GetSigma(self, label):
        """Get standard deviation for label."""
    
    def GetMinimum(self, label):
        """Get minimum intensity for label."""
    
    def GetMaximum(self, label):
        """Get maximum intensity for label."""
    
    def GetSum(self, label):
        """Get sum of intensities for label."""
    
    def GetCount(self, label):
        """Get number of pixels for label."""
    
    def GetRegion(self, label):
        """Get bounding box region for label."""

Label Manipulation

def relabel_component_image_filter(input, minimum_object_size=0, sort_by_object_size=True):
    """
    Relabel connected components, optionally by size.
    
    Parameters:
    - input: itk.Image - Label image
    - minimum_object_size: int - Remove objects smaller than this
    - sort_by_object_size: bool - Sort labels by size (largest=1)
    
    Returns:
    itk.Image - Relabeled image
    """

class RelabelComponentImageFilter:
    """Relabel components, optionally sorted by size."""
    
    def SetMinimumObjectSize(self, size):
        """Set minimum object size."""
    
    def SetSortByObjectSize(self, sort):
        """Enable/disable sorting by size."""
    
    def GetNumberOfObjects(self):
        """Get the number of objects after filtering."""
    
    def GetSizeOfObjectsInPixels(self):
        """Get sizes of all objects."""

def change_label_image_filter(input, change_map):
    """
    Change specific label values.
    
    Parameters:
    - input: itk.Image - Label image
    - change_map: dict - Mapping from old to new labels
    
    Returns:
    itk.Image - Relabeled image
    """

class ChangeLabelImageFilter:
    """Change specific label values."""
    
    def SetChangeMap(self, old_label, new_label):
        """Map old_label to new_label."""

Label Maps

class LabelMap:
    """
    Efficient label map data structure.
    
    Template parameter:
    - label_object_type: Type of label object
    """
    
    def GetNumberOfLabelObjects(self):
        """Get number of label objects."""
    
    def GetLabelObject(self, label):
        """Get label object by label value."""
    
    def GetNthLabelObject(self, n):
        """Get nth label object."""

class BinaryImageToLabelMapFilter:
    """Convert binary image to label map."""

class LabelImageToLabelMapFilter:
    """Convert label image to label map."""

class LabelMapToLabelImageFilter:
    """Convert label map back to label image."""

class ShapeLabelMapFilter:
    """
    Compute shape attributes for label objects.
    
    Attributes computed:
    - Size (number of pixels)
    - Physical size
    - Centroid
    - Bounding box
    - Perimeter
    - Roundness
    - Elongation
    - And more...
    """

class StatisticsLabelMapFilter:
    """Compute intensity statistics for label objects."""

class LabelMapMaskImageFilter:
    """Mask image using label map."""

class LabelMapOverlayImageFilter:
    """Overlay label map on image with colors."""

Connected Components

def connected_component_image_filter(input, fully_connected=False):
    """
    Label connected components in binary image.
    
    Parameters:
    - input: itk.Image - Binary image
    - fully_connected: bool - Use full connectivity
    
    Returns:
    itk.Image - Labeled image
    """

class ConnectedComponentImageFilter:
    """Label connected components."""
    
    def SetFullyConnected(self, fully_connected):
        """Set connectivity (4 vs 8 in 2D, 6 vs 26 in 3D)."""

class ScalarConnectedComponentImageFilter:
    """Label components in scalar image."""

class VectorConnectedComponentImageFilter:
    """Label components in vector image."""

Usage Examples

Label Statistics

import itk

# Load intensity and label images
intensity = itk.imread('intensity.png', itk.F)
labels = itk.imread('labels.png', itk.UL)

# Compute statistics
IntensityType = itk.Image[itk.F, 2]
LabelType = itk.Image[itk.UL, 2]
stats = itk.LabelStatisticsImageFilter[IntensityType, LabelType].New()
stats.SetInput(intensity)
stats.SetLabelInput(labels)
stats.Update()

# Get statistics for each label
num_labels = stats.GetNumberOfLabels()
for i in range(num_labels):
    label = stats.GetNthLabel(i)
    mean = stats.GetMean(label)
    sigma = stats.GetSigma(label)
    count = stats.GetCount(label)
    print(f"Label {label}: mean={mean:.2f}, std={sigma:.2f}, pixels={count}")

Relabel by Size

import itk

# Load label image
labels = itk.imread('labels.png', itk.UL)

# Relabel components by size (largest=1)
relabeled = itk.relabel_component_image_filter(
    labels,
    minimum_object_size=100,  # Remove small objects
    sort_by_object_size=True   # Sort by size
)

itk.imwrite(relabeled, 'relabeled.png')

Connected Components

import itk

# Load binary image
binary = itk.imread('binary.png', itk.UC)

# Label connected components
labeled = itk.connected_component_image_filter(binary, fully_connected=False)

# Relabel by size
sorted_labels = itk.relabel_component_image_filter(labeled, sort_by_object_size=True)

itk.imwrite(sorted_labels, 'components.png')

Working with Label Maps

import itk

# Convert binary image to label map
binary = itk.imread('binary.png', itk.UC)

BinaryType = itk.Image[itk.UC, 2]
converter = itk.BinaryImageToLabelMapFilter[BinaryType].New()
converter.SetInput(binary)
converter.Update()
label_map = converter.GetOutput()

# Compute shape attributes
shape_filter = itk.ShapeLabelMapFilter[type(label_map)].New()
shape_filter.SetInput(label_map)
shape_filter.Update()

# Access shape attributes
num_objects = label_map.GetNumberOfLabelObjects()
for i in range(num_objects):
    obj = label_map.GetNthLabelObject(i)
    centroid = obj.GetCentroid()
    size = obj.GetNumberOfPixels()
    print(f"Object {i}: centroid={centroid}, size={size}")

Install with Tessl CLI

npx tessl i tessl/pypi-itk

docs

index.md

tile.json