ANTsImageToANTsImage#

petpal.utils.decorators.ANTsImageToANTsImage(func)#

A decorator for functions that process an ANTs image and output another ANTs image. Assumes that the argument of the passed in function is an ANTs image.

This decorator is designed to extend functions that take an ANTs image as input and output another ANTs image. It supports seamless handling of input images provided as either file paths (str) or ants.core.ANTsImage objects. The resulting processed image can optionally be saved to a specified file path.

Parameters:

func (Callable) – The function to be decorated. It should accept an ANTs image as the first argument and return a processed ANTs image.

Returns:

Callable

A wrapper function that:
  • Reads the input image if a file path (str) is provided.

  • Passes an ants.core.ANTsImage object to the decorated function.

  • Saves the output image to the specified file path if out_path is provided.

Example

import ants
from petpal.utils.decorators import ANTsImageToANTsImage
from petpal.preproc.segmentaion_tools import calc_vesselness_measure_image

# Defining the decorated function
@ANTsImageToANTsImage
def step_calc_vesselness_measure_image(input_image: ants.core.ANTsImage,
                                       sigma_min: float = 2.0,
                                       sigma_max: float = 8.0,
                                       alpha: float = 0.5,
                                       beta: float = 0.5,
                                       gamma: float = 5.0,
                                       morph_open_radius: int = 1,
                                       **hessian_func_kwargs):
    return calc_vesselness_measure_image(input_image=input_image,
                                         sigma_min=sigma_min,
                                         sigma_max=sigma_max,
                                         alpha=alpha,
                                         beta=beta,
                                         gamma=gamma,
                                         morph_open_radius=morph_open_radius,
                                         **hessian_func_kwargs)

# Conventional use of calc_vesselness_measure_image

input_img = ants.image_read('/path/to/3d/img/.nii.gz')
vess_img = calc_vesselness_measure_image(input_img) # Using all default values
ants.image_write(vess_img, '/path/to/out/img/.nii.gz')


# Using the decorated version
## Using paths as inputs
vess_img = step_calc_vesselness_measure_image('/path/to/3d/img/.nii.gz',
                                              '/path/to/out/img/.nii.gz')

### Not saving output image
vess_img = step_calc_vesselness_measure_image('/path/to/3d/img/.nii.gz',
                                              None)

## Using images as inputs
input_img = ants.image_read('/path/to/3d/img/.nii.gz')
vess_img = step_calc_vesselness_measure_image(input_img,
                                              '/path/to/out/img/.nii.gz')

## Ignoring the return value to just save image
step_calc_vesselness_measure_image('/path/to/3d/img/.nii.gz',
                                   '/path/to/out/img/.nii.gz')
Raises:

TypeError – If in_img is not a string or ants.core.ANTsImage.

Notes

  • If in_img is provided as a file path, the image is read using ants.image_read.

  • The output image is written to the desired path using ants.image_write if out_path is specified.