Source code for antspynet.utilities.mri_super_resolution

import numpy as np
import tensorflow as tf
import ants

[docs]def mri_super_resolution(image, expansion_factor=[1,1,2], feature="vgg", target_range=[1,0], poly_order='hist', verbose=False): """ Perform super-resolution of MRI data using deep back projection network. Work described in https://www.medrxiv.org/content/10.1101/2023.02.02.23285376v1 with the GitHub repo located at https://github.com/stnava/siq Note that some preprocessing possibilities for the input includes: * Truncate intensity (see ants.iMath(..., 'TruncateIntensity', ...) Arguments --------- image : ANTsImage magnetic resonance image expansion_factor : 3-tuple Specifies the increase in resolution per dimension. Possibilities include: * [1,1,2] * [1,1,3] * [1,1,4] * [1,1,6] * [2,2,2] * [2,2,4] feature : string Type of network. Choices include "grader" or "vgg". target_range : 2-tuple Range for apply_super_resolution_model. poly_order : int or 'hist' Parameter for regression matching or specification of histogram matching. verbose : boolean Print progress to the screen. Returns ------- The super-resolved image. Example ------- >>> image = ants.image_read("t1.nii.gz") >>> image_sr = mri_super_resolution(image) """ from ..utilities import get_pretrained_network from ..utilities import apply_super_resolution_model_to_image if image.dimension != 3: raise ValueError("Image dimension must be 3.") network_basename = ("sig_smallshort_train_" + 'x'.join(map(str, expansion_factor)) + '_1chan_feat' + feature + 'L6_best_mdl') model_and_weights_filename = get_pretrained_network(network_basename) model_sr = tf.keras.models.load_model(model_and_weights_filename, compile=False) image_sr = apply_super_resolution_model_to_image( image, model_sr, target_range=target_range, regression_order=None, verbose=verbose) if poly_order is not None: if verbose: print("Match intensity with " + str(poly_order)) if poly_order == "hist": if verbose: print("Histogram match input/output images.") image_sr = ants.histogram_match_image(image_sr, image) else: if verbose: print("Regression match input/output images.") image_resampled = ants.resample_image_to_target(image, image_sr) image_sr = ants.regression_match_image(image_sr, image_resampled, poly_order=poly_order) return image_sr