ITK Segmentation

raw JSON →
5.4.6 verified Mon Apr 27 auth: no python

ITK is an open-source, cross-platform toolkit for N-dimensional image analysis, segmentation, and registration. The itk-segmentation subpackage provides segmentation algorithms, including level sets, watershed, region growing, and threshold-based methods. Current version 5.4.6 requires Python >=3.8, with ongoing development toward ITK 6.0 (currently in beta). Regular maintenance releases occur approximately quarterly.

pip install itk-segmentation
error AttributeError: module 'itk' has no attribute 'SegmentationLevelSetImageFilter'
cause ITK's Python module does not expose all C++ classes directly; some require loading submodules or using different names.
fix
Use functional interface: itk.segmentation_level_set_image_filter(...) or import the specific filter via itk.LevelSetExtension.LevelSetExtensionBase.
error RuntimeError: ImportError: libitkcommon.so.6: cannot open shared object file
cause Missing ITK shared libraries in the system's library path.
fix
Install the 'itk' metapackage or use conda: conda install -c conda-forge itk
error TypeError: in method 'New', argument 1 of type 'itk::ImageIOBase::Pointer'
cause Passing an invalid argument to a filter's New method, often due to wrong template type.
fix
Check that template types and dimensions match. For example: itk.CastImageFilter[InputType, OutputType].New()
error ValueError: could not broadcast input array from shape (512,512) into shape (512,512,1)
cause ITK expects 2D image arrays for 2D images, not 3D with singleton dimension.
fix
Use itk.GetArrayFromImage to get a numpy array, then squeeze: np.squeeze(array) if needed.
gotcha ITK uses snake_case for simple filter wrappers (e.g., itk.binary_threshold_image_filter) but PascalCase for full filter classes (e.g., itk.BinaryThresholdImageFilter).
fix For quick scripting use itk.function_name; for advanced control use itk.ClassName.New()
breaking ITK 6.0 requires C++17 compiler; not all legacy systems have it. Python wheels may not be available for all platforms.
fix Ensure your build environment supports C++17. Consider using conda or pre-built wheels if available.
deprecated ImageIO factory classes like itk.GDCMImageIO are replaced by itk.GDCMImageIO.New() or automatically detected.
fix Use itk.imread/imwrite without specifying ImageIO. If needed, use itk.ImageIOFactory.CreateImageIO and set manually.
gotcha itk.imread assumes fixed integer types (e.g., itk.UC for unsigned char). For floating point, use itk.F or itk.D.
fix Explicitly specify pixel type: itk.imread('file', itk.F) reads as float.
gotcha Template parameters in ITK are specified via brackets: filter = itk.BinaryThresholdImageFilter[InputImageType, OutputImageType].New()
fix Always provide the image types when using class-based filters; use simple wrappers for convenience.

Reads an image, applies a binary threshold, and writes the segmentation.

import itk

# Read an image (replace with actual file path or use a sample image)
image = itk.imread('input.nii.gz', itk.F)

# Apply binary threshold segmentation
segmented = itk.binary_threshold_image_filter(
    image,
    lower_threshold=100,
    upper_threshold=500,
    inside_value=255,
    outside_value=0
)

# Write result
itk.imwrite(segmented, 'segmented.nii.gz')