Source code for ants.core.ants_metric_io

"""
"""
__all__ = ['new_ants_metric',
           'create_ants_metric',
           'supported_metrics']


import os
import numpy as np

from .. import utils
from . import ants_image as iio
from . import ants_metric as mio


_supported_metrics = {'MeanSquares',
                    'MattesMutualInformation',
                    'ANTSNeighborhoodCorrelation',
                    'Correlation',
                    'Demons',
                    'JointHistogramMutualInformation'}


[docs]def supported_metrics(): return _supported_metrics
[docs]def new_ants_metric(dimension=3, precision='float', metric_type='MeanSquares'): if metric_type not in _supported_metrics: raise ValueError('metric_type must be one of %s' % _supported_metrics) libfn = utils.get_lib_fn('new_ants_metricF%i'%dimension) itk_tx = libfn(precision, dimension, metric_type) ants_metric = mio.ANTsImageToImageMetric(itk_tx) return ants_metric
[docs]def create_ants_metric(fixed, moving, metric_type='MeanSquares', fixed_mask=None, moving_mask=None, sampling_strategy='regular', sampling_percentage=1): """ Arguments --------- metric_type : string which metric to use options: MeanSquares MattesMutualInformation ANTSNeighborhoodCorrelation Correlation Demons JointHistogramMutualInformation Example ------- >>> import ants >>> fixed = ants.image_read(ants.get_ants_data('r16')) >>> moving = ants.image_read(ants.get_ants_data('r64')) >>> metric_type = 'Correlation' >>> metric = ants.create_ants_metric(fixed, moving, metric_type) """ dimension = fixed.dimension pixeltype = fixed.pixeltype is_vector = False # For now, no multichannel images if metric_type not in _supported_metrics: raise ValueError('metric_type must be one of %s' % _supported_metrics) if (dimension < 2) or (dimension > 4): raise ValueError('unsupported dimension %i' % dimension) if not isinstance(moving, iio.ANTsImage): raise ValueError('invalid moving image') if moving.dimension != dimension: raise ValueError('Fixed and Moving images must have same dimension') if not isinstance(fixed, iio.ANTsImage): raise ValueError('invalid fixed image') fixed = fixed.clone('float') moving = moving.clone('float') libfn = utils.get_lib_fn('create_ants_metricF%i' % dimension) metric = libfn(pixeltype, dimension, metric_type, is_vector, fixed.pointer, moving.pointer) ants_metric = mio.ANTsImageToImageMetric(metric) ants_metric.set_fixed_image(fixed) ants_metric.set_moving_image(moving) if isinstance(fixed_mask, iio.ANTsImage): ants_metric.set_fixed_mask(fixed_mask) if isinstance(moving_mask, iio.ANTsImage): ants_metric.set_moving_mask(moving_mask) ants_metric.set_sampling(sampling_strategy, sampling_percentage) ants_metric.initialize() return ants_metric