Skip to content

coregister_volumes

Resamples and co-registeres all volumes to occupy the same physical coordinates of a reference geometry (given as a itk_volume) and desired voxel size

Parameters:

Name Type Description Default
input_itk_volume str

path to itk compatible image volume (.mhd, .nrrd, .nii, etc.)

required
input_itk_geometry str

path to itk compatible image volume (.mhd, .nrrd, .nii, etc.) to use as a reference geometry

required
output_dir str

output/working directory

required
resample_pixel_spacing float

voxel size in mm

required
order int

interpolation order [0-5]

required
save_npy(bool)

whether to also save a numpy file representing the volume

required

Returns:

Name Type Description
dict

metadata about function call

Source code in src/luna/radiology/cli/coregister_volumes.py
def coregister_volumes(
    input_itk_volume: str,
    input_itk_geometry: str,
    resample_pixel_spacing: float,
    output_dir: str,
    order: int,
    save_npy: bool,
):
    """Resamples and co-registeres all volumes to occupy the same physical coordinates of a reference geometry (given as a itk_volume) and desired voxel size

    Args:
        input_itk_volume (str): path to itk compatible image volume (.mhd, .nrrd, .nii, etc.)
        input_itk_geometry (str): path to itk compatible image volume (.mhd, .nrrd, .nii, etc.) to use as a reference geometry
        output_dir (str): output/working directory
        resample_pixel_spacing (float): voxel size in mm
        order (int): interpolation order [0-5]
        save_npy(bool): whether to also save a numpy file representing the volume

    Returns:
        dict: metadata about function call
    """
    d_properties = {}

    resample_pixel_spacing = np.full((3), resample_pixel_spacing)

    image_class_object_volume = read_itk_image(
        input_itk_volume, modality=str(Path(input_itk_volume).stem)
    )
    image_class_object_geometry = read_itk_image(
        input_itk_geometry, modality=str(Path(input_itk_geometry).stem)
    )

    _ = interpolate(
        image_class_object_volume,
        resample_pixel_spacing,
        reference_geometry=image_class_object_geometry,
        order=order,
    )

    image_file = image_class_object_volume.export(file_path=output_dir)
    d_properties["itk_volume"] = image_file

    if save_npy:
        np.save(image_file + ".npy", image_class_object_volume.get_voxel_grid())
        d_properties["npy_volume"] = image_file + ".npy"

    # d_properties['volume_size']    = list (image_class_object_volume.size.flatten())
    # d_properties['volume_spacing'] = list (image_class_object_volume.spacing.flatten())
    # d_properties['volume_percentiles'] = list (np.percentile(image_class_object_volume.get_voxel_grid(), np.linspace(0, 100, 11)).flatten())

    output_file = f"{output_dir}/volume_registered_features.parquet"
    pd.DataFrame([d_properties]).to_parquet(output_file)

    d_properties["feature_data"] = output_file

    return d_properties