Problematic cerebellum

Help
2014-02-25
2014-03-05
  • I am having a problem coregistering slightly deformed post mortem brain to MNI atlas.
    The original brain looks like this:

    moving

    That's the target:
    target

    And that's warped brain:
    warped

    Part of the cerebellum gets sucked into the interhemispheric fissure! Is there a way to avoid this? Any parameters (see below) I can try to change?

    Best,
    Chris

    original T1: https://www.dropbox.com/s/738ge8ntoskx0lz/T1.nii.gz
    target: MNI152 1mm skullstripped
    warped: https://www.dropbox.com/sh/0ihwc3sldtgtvcl/Nj3Hw-QhQm/_donor_id_H0351.1016/transform_Warped.nii.gz

    These are the parameters I'm using:

    coregister = pe.Node(ants.Registration(), name="coregister")
    coregister.inputs.dimension = 3
    coregister.inputs.fixed_image = reference_image
    coregister.inputs.output_warped_image = True
    coregister.inputs.use_histogram_matching = True
    
    #stage 1 translation
    coregister.inputs.transforms = ['Translation']
    coregister.inputs.transform_parameters = [(0.1,)]
    coregister.inputs.metric = ["Mattes"]
    coregister.inputs.metric_weight = [1.]
    coregister.inputs.radius_or_number_of_bins = [32]
    coregister.inputs.sampling_strategy = ["Regular"]
    coregister.inputs.sampling_percentage = [0.3]
    coregister.inputs.number_of_iterations = [[1000,500,250,100]]
    coregister.inputs.convergence_threshold = [1.e-6]
    coregister.inputs.convergence_window_size = [10]
    coregister.inputs.smoothing_sigmas = [[3,2,1,0]]
    coregister.inputs.sigma_units = ['vox']
    coregister.inputs.use_estimate_learning_rate_once = [True]
    coregister.inputs.shrink_factors = [[8,4,2,1]]
    
    #stage 2 rigid
    coregister.inputs.transforms.append('Rigid')
    coregister.inputs.transform_parameters.append((0.1,))
    coregister.inputs.metric.append("Mattes")
    coregister.inputs.metric_weight.append(1.)
    coregister.inputs.radius_or_number_of_bins.append(32)
    coregister.inputs.sampling_strategy.append("Regular")
    coregister.inputs.sampling_percentage.append(0.3)
    coregister.inputs.number_of_iterations.append([1000,500,250,100])
    coregister.inputs.convergence_threshold.append(1.e-6)
    coregister.inputs.convergence_window_size.append(10)
    coregister.inputs.smoothing_sigmas.append([3,2,1,0])
    coregister.inputs.sigma_units.append('vox')
    coregister.inputs.use_estimate_learning_rate_once.append(True)
    coregister.inputs.shrink_factors.append([8,4,2,1])
    
    #stage 3 affine
    coregister.inputs.transforms.append('Affine')
    coregister.inputs.transform_parameters.append((0.1,))
    coregister.inputs.metric.append("Mattes")
    coregister.inputs.metric_weight.append(1.)
    coregister.inputs.radius_or_number_of_bins.append(32)
    coregister.inputs.sampling_strategy.append("Regular")
    coregister.inputs.sampling_percentage.append(0.3)
    coregister.inputs.number_of_iterations.append([1000,500,250,100])
    coregister.inputs.convergence_threshold.append(1.e-6)
    coregister.inputs.convergence_window_size.append(10)
    coregister.inputs.smoothing_sigmas.append([3,2,1,0])
    coregister.inputs.sigma_units.append('vox')
    coregister.inputs.use_estimate_learning_rate_once.append(True)
    coregister.inputs.shrink_factors.append([8,4,2,1])
    
    #stage 4 SyN
    coregister.inputs.transforms.append('SyN')
    coregister.inputs.transform_parameters.append((0.15, 3, 0))
    coregister.inputs.metric.append(["Mattes", "CC"])
    coregister.inputs.metric_weight.append([0.5, 0.5])
    coregister.inputs.radius_or_number_of_bins.append([32, 4])
    coregister.inputs.sampling_strategy.append(["Regular", "Regular"])
    coregister.inputs.sampling_percentage.append([0.75, 0.75])
    coregister.inputs.number_of_iterations.append([100,100,100,50])
    coregister.inputs.convergence_threshold.append(-0.01)
    coregister.inputs.convergence_window_size.append(10)
    coregister.inputs.smoothing_sigmas.append([2,1,0.5,0])
    coregister.inputs.sigma_units.append('vox')
    coregister.inputs.use_estimate_learning_rate_once.append(True)
    coregister.inputs.shrink_factors.append([8,4,2,1])
    
     
    • stnava
      stnava
      2014-02-25

      chris

      i doubt parameter tweaking alone would resolve it .... maybe but not sure
      it's worth the effort.

      another approach is separate the two components then fuse the
      transformations by composition.

      that is, register the cerebellum first. then initialize antsRegistration
      with the result in

      registration of the cerebrum. at least, that's what i'd do for a one off
      scenario like this.

      brian

      On Tue, Feb 25, 2014 at 10:46 AM, Chris Filo Gorgolewski gorgolewski@users.sf.net wrote:

      I am having a problem coregistering slightly deformed post mortem brain to
      MNI atlas.
      The original brain looks like this:

      [image: moving]

      That's the target:
      [image: target]

      And that's warped brain:
      [image: warped]

      Part of the cerebellum gets sucked into the interhemispheric fissure! Is
      there a way to avoid this? Any parameters (see below) I can try to change?

      Best,
      Chris

      original T1: https://www.dropbox.com/s/738ge8ntoskx0lz/T1.nii.gz
      target: MNI152 1mm skullstripped
      warped:
      https://www.dropbox.com/sh/0ihwc3sldtgtvcl/Nj3Hw-QhQm/_donor_id_H0351.1016/transform_Warped.nii.gz

      These are the parameters I'm using:

      coregister = pe.Node(ants.Registration(), name="coregister")coregister.inputs.dimension = 3coregister.inputs.fixed_image = reference_imagecoregister.inputs.output_warped_image = Truecoregister.inputs.use_histogram_matching = True

      stage 1 translationcoregister.inputs.transforms = ['Translation']coregister.inputs.transform_parameters = [(0.1,)]coregister.inputs.metric = ["Mattes"]coregister.inputs.metric_weight = [1.]coregister.inputs.radius_or_number_of_bins = [32]coregister.inputs.sampling_strategy = ["Regular"]coregister.inputs.sampling_percentage = [0.3]coregister.inputs.number_of_iterations = [[1000,500,250,100]]coregister.inputs.convergence_threshold = [1.e-6]coregister.inputs.convergence_window_size = [10]coregister.inputs.smoothing_sigmas = [[3,2,1,0]]coregister.inputs.sigma_units = ['vox']coregister.inputs.use_estimate_learning_rate_once = [True]coregister.inputs.shrink_factors = [[8,4,2,1]]

      stage 2 rigidcoregister.inputs.transforms.append('Rigid')coregister.inputs.transform_parameters.append((0.1,))coregister.inputs.metric.append("Mattes")coregister.inputs.metric_weight.append(1.)coregister.inputs.radius_or_number_of_bins.append(32)coregister.inputs.sampling_strategy.append("Regular")coregister.inputs.sampling_percentage.append(0.3)coregister.inputs.number_of_iterations.append([1000,500,250,100])coregister.inputs.convergence_threshold.append(1.e-6)coregister.inputs.convergence_window_size.append(10)coregister.inputs.smoothing_sigmas.append([3,2,1,0])coregister.inputs.sigma_units.append('vox')coregister.inputs.use_estimate_learning_rate_once.append(True)coregister.inputs.shrink_factors.append([8,4,2,1])

      stage 3 affinecoregister.inputs.transforms.append('Affine')coregister.inputs.transform_parameters.append((0.1,))coregister.inputs.metric.append("Mattes")coregister.inputs.metric_weight.append(1.)coregister.inputs.radius_or_number_of_bins.append(32)coregister.inputs.sampling_strategy.append("Regular")coregister.inputs.sampling_percentage.append(0.3)coregister.inputs.number_of_iterations.append([1000,500,250,100])coregister.inputs.convergence_threshold.append(1.e-6)coregister.inputs.convergence_window_size.append(10)coregister.inputs.smoothing_sigmas.append([3,2,1,0])coregister.inputs.sigma_units.append('vox')coregister.inputs.use_estimate_learning_rate_once.append(True)coregister.inputs.shrink_factors.append([8,4,2,1])

      stage 4 SyNcoregister.inputs.transforms.append('SyN')coregister.inputs.transform_parameters.append((0.15, 3, 0))coregister.inputs.metric.append(["Mattes", "CC"])coregister.inputs.metric_weight.append([0.5, 0.5])coregister.inputs.radius_or_number_of_bins.append([32, 4])coregister.inputs.sampling_strategy.append(["Regular", "Regular"])coregister.inputs.sampling_percentage.append([0.75, 0.75])coregister.inputs.number_of_iterations.append([100,100,100,50])coregister.inputs.convergence_threshold.append(-0.01)coregister.inputs.convergence_window_size.append(10)coregister.inputs.smoothing_sigmas.append([2,1,0.5,0])coregister.inputs.sigma_units.append('vox')coregister.inputs.use_estimate_learning_rate_once.append(True)coregister.inputs.shrink_factors.append([8,4,2,1])


      Problematic cerebellumhttps://sourceforge.net/p/advants/discussion/840261/thread/f1e34ae3/?limit=25#28b7

      Sent from sourceforge.net because you indicated interest in
      https://sourceforge.net/p/advants/discussion/840261/

      To unsubscribe from further messages, please visit
      https://sourceforge.net/auth/subscriptions/

       
  • Thanks. That worked. I manually delineated cerebellum in both moving and fixed images and applied the masks before coregistration (using masks as input parameters did not work well). I used this transformation to initialize a whole brain registration and the results are satisfactory.

     
    • stnava
      stnava
      2014-03-04

      great - i assume you didnt have to very carefully delineate cerebellum?

      also, we hope to get the PSE / partial labeling stuff back into
      antsRegistration some time soon - which will also help these types of
      situations.

      http://www.ncbi.nlm.nih.gov/pubmed/19437413

      brian

      On Tue, Mar 4, 2014 at 9:35 AM, Chris Filo Gorgolewski gorgolewski@users.sf.net wrote:

      Thanks. That worked. I manually delineated cerebellum in both moving and
      fixed images and applied the masks before coregistration (using masks as
      input parameters did not work well). I used this transformation to
      initialize a whole brain registration and the results are satisfactory.


      Problematic cerebellumhttps://sourceforge.net/p/advants/discussion/840261/thread/f1e34ae3/?limit=25#0c50

      Sent from sourceforge.net because you indicated interest in
      https://sourceforge.net/p/advants/discussion/840261/

      To unsubscribe from further messages, please visit
      https://sourceforge.net/auth/subscriptions/

       
      Attachments
      • The delineation I did was quite accurate, but I blame this on my OCD ;) I did not try to run it with rougher delineation, but I suspect that since I had to multiply the images by the masks before coregistration the quality of the mask will be very important. This is because, in this scenario, the most salient feature in the image is the cerebellum-background border. The algorithm will latch to that border, so if it's off the results will be quite different as well. I am very curious how one can avoid this "latching to the masked image border" issue.

         
  • Nick Tustison
    Nick Tustison
    2014-03-04

    Yeah, now that we have a couple papers in various stages of review, I plan to revisit this work.

    http://review.source.kitware.com/#/c/13890/