Source code for antspynet.utilities.histology
import numpy as np
import ants
import warnings
[docs]def arterial_lesion_segmentation(image,
antsxnet_cache_directory=None,
verbose=False):
"""
Perform arterial lesion segmentation using U-net.
Arguments
---------
image : ANTsImage
input image
antsxnet_cache_directory : string
Destination directory for storing the downloaded template and model weights.
Since these can be reused, if is None, these data will be downloaded to a
~/.keras/ANTsXNet/.
verbose : boolean
Print progress to the screen.
Returns
-------
Foreground probability image.
Example
-------
>>> output = arterial_lesion_segmentation(histology_image)
"""
from ..architectures import create_unet_model_2d
from ..utilities import get_pretrained_network
if image.dimension != 2:
raise ValueError( "Image dimension must be 2." )
channel_size = 1
weights_file_name = get_pretrained_network("arterialLesionWeibinShi",
antsxnet_cache_directory=antsxnet_cache_directory)
resampled_image_size = (512, 512)
unet_model = create_unet_model_2d((*resampled_image_size, channel_size),
number_of_outputs=1, mode="sigmoid",
number_of_filters=(64, 96, 128, 256, 512),
convolution_kernel_size=(3, 3), deconvolution_kernel_size=(2, 2),
dropout_rate=0.0, weight_decay=0,
additional_options=("initialConvolutionKernelSize[5]", "attentionGating"))
unet_model.load_weights(weights_file_name)
if verbose == True:
print("Preprocessing: Resampling and N4 bias correction.")
preprocessed_image = ants.image_clone(image)
preprocessed_image = preprocessed_image / preprocessed_image.max()
preprocessed_image = ants.resample_image(preprocessed_image, resampled_image_size, use_voxels=True, interp_type=0)
mask = ants.image_clone(preprocessed_image) * 0 + 1
preprocessed_image = ants.n4_bias_field_correction(preprocessed_image, mask=mask, shrink_factor=2, return_bias_field=False, verbose=verbose)
batchX = np.expand_dims(preprocessed_image.numpy(), axis=0)
batchX = np.expand_dims(batchX, axis=-1)
batchX = (batchX - batchX.min()) / (batchX.max() - batchX.min())
predicted_data = unet_model.predict(batchX, verbose=int(verbose))
origin = preprocessed_image.origin
spacing = preprocessed_image.spacing
direction = preprocessed_image.direction
foreground_probability_image = ants.from_numpy(np.squeeze(predicted_data[0, :, :, 0]),
origin=origin, spacing=spacing, direction=direction)
if verbose == True:
print("Post-processing: resampling to original space.")
foreground_probability_image = ants.resample_image_to_target(foreground_probability_image, image)
return(foreground_probability_image)