Advertisement
Guest User

Untitled

a guest
May 26th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.79 KB | None | 0 0
  1. def est_nl_transf(im_ref, im_mov, fixed_image_mask='None'): # TODO: provide input parameters
  2.     im_ref = sitk.GetImageFromArray(im_ref)
  3.     im_mov = sitk.GetImageFromArray(im_mov)
  4.  
  5.     im_ref =  sitk.Cast(im_ref, sitk.sitkFloat32)
  6.     im_mov = sitk.Cast(im_mov, sitk.sitkFloat32)
  7.  
  8.     # TODO: initialize the registration
  9.     reg_method = sitk.ImageRegistrationMethod()
  10.  
  11.     # TODO: create initial identity transformation.
  12.     transform_to_displacement_field_filter = sitk.TransformToDisplacementFieldFilter()
  13.     transform_to_displacement_field_filter.SetReferenceImage(im_ref)
  14.     initial_transform = sitk.DisplacementFieldTransform(transform_to_displacement_field_filter.Execute(sitk.AffineTransform(im_ref.GetDimension())))
  15.    
  16.     # TODO: regularization. The update field refers to fluid regularization; the total field to elastic regularization.
  17.     initial_transform.SetSmoothingGaussianOnUpdate(varianceForUpdateField=2, varianceForTotalField=2)
  18.    
  19.     # TODO: set the initial transformation
  20.     reg_method.SetInitialTransform(initial_transform)
  21.    
  22.     # TODO: use the function 'SetMetricAsDemons' to be able to perform Demons registration.
  23.     # Be aware that you will need to provide a parameter (the intensity difference threshold) as input:
  24.     # during the registration, intensities are considered to be equal if their difference is less than the given threshold.
  25.     reg_method.SetMetricAsDemons(1)
  26.    
  27.     # TODO: evaluate the metrics only in the mask, if provided as an input
  28.     if fixed_image_mask != 'None':
  29.         reg_method.SetMetricFixedMask(fixed_image_mask)  
  30.    
  31.     # TODO: set a linear interpolator
  32.     reg_method.SetInterpolator(sitk.sitkLinear)
  33.    
  34.     # TODO: set a gradient descent optimizer
  35.     reg_method.SetOptimizerAsGradientDescent(learningRate=1.0, numberOfIterations=200, convergenceMinimumValue=1e-6, convergenceWindowSize=10)
  36.     reg_method.SetOptimizerScalesFromPhysicalShift()
  37.     print('Optimizer stop condition: {0}'.format(reg_method.GetOptimizerStopConditionDescription()))
  38.     print('Number of iterations: {0}'.format(reg_method.GetOptimizerIteration()))      
  39.     return reg_method.Execute(im_ref, im_mov)
  40.  
  41. def apply_nl_transf(im_ref, im_mov, nl_xfm):
  42.     """
  43.    Apply given non-linear transform 'nl_xfm' to 'im_mov' and return the transformed image.
  44.    """
  45.     im_ref = sitk.GetImageFromArray(im_ref)
  46.     im_mov = sitk.GetImageFromArray(im_mov)
  47.    
  48.     resampler = sitk.ResampleImageFilter()
  49.     # Set the reference image
  50.     resampler.SetReferenceImage(im_ref)
  51.     # Use a non linear interpolator
  52.     resampler.SetInterpolator(sitk.sitkLinear)
  53.     # Set the desired transformationr
  54.     resampler.SetTransform(nl_xfm)
  55.     im_mov_resampled = resampler.Execute(im_mov)
  56.     trans_im = sitk.GetArrayFromImage(im_mov_resampled)
  57.    
  58.     return trans_im
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement