Difference between revisions of "Projects:RegistrationLibrary:RegLib C12"

From NAMIC Wiki
Jump to: navigation, search
Line 32: Line 32:
 
*reference/fixed :  pr-op CT, 0.95 x 0.95 x 5 mm voxel size
 
*reference/fixed :  pr-op CT, 0.95 x 0.95 x 5 mm voxel size
 
*moving:  intra-op MRI, 0.78 x 0.78 x 2.5 mm  axial,  
 
*moving:  intra-op MRI, 0.78 x 0.78 x 2.5 mm  axial,  
 +
 +
=== Discussion: Registration Challenges ===
 +
*large differences in FOV
 +
*strong differences in image contrast between MRI & CT
 +
*contrast enhancement and pathology and treatment changes cause additional differences in image content
 +
*we have strongly anisotropic voxel sizes with much less through-plane resolution
  
 
=== Notes / Overall Strategy ===
 
=== Notes / Overall Strategy ===
Line 42: Line 48:
 
#run a non-rigid BSpline registration with above affine alignment as starting point
 
#run a non-rigid BSpline registration with above affine alignment as starting point
  
=== Discussion: Registration Challenges ===
 
*large differences in FOV
 
*strong differences in image contrast between MRI & CT
 
*contrast enhancement and pathology and treatment changes cause additional differences in image content
 
*we have strongly anisotropic voxel sizes with much less through-plane resolution
 
  
 
=== Procedures ===
 
=== Procedures ===
*'''Phase I: Pilot to determine optimal registration parameters'''
+
*'''Phase I: Build Masks'''
#load reference image and one moving image from the series
+
#load RegLib_C12 Dataset (e.g. via "RegLib_C12_SlicerScene.mrml"
#open Registration : ''BrainsFit'' module  
+
#go to the [http://www.slicer.org/slicerWiki/index.php/Modules:Editor-Documentation-3.6 ''Editor'' module]
##Registration Phases:  
+
##Select "CT_preop_contrast" as master volume
##set "reference" fixed and "moving_??" as moving image
+
##create new labelmap "CT_preop_contrast"
###select/check ''Include BSpline registration phase''
+
##trace the liver contour from axial slices, or use one of the Segmentation modules (e.g. FastMarching) as starting point
##Output Settings:  
+
##Save result labelmap
###select a new transform "Slicer BSpline Transform", rename to "Xf1_moving_??"
+
#repeat outlining on the MR image
 +
#In the  [http://www.slicer.org/slicerWiki/index.php/Modules:Editor-Documentation-3.6 ''Editor'' module], use the ''Dilate'' function to expand the outline by 2-3 pixels (click on ''Apply'' button 2-3 times)
 +
#save dilated labelmasks under new name (e.g. CT_mask.nrrd)
 +
*'''Phase II: MR-CTpre registration'''
 +
#Following the concept of manual registration, create an initial transform that roughly aligns the MR to the pre-op CT. Details and links [http://www.slicer.org/slicerWiki/index.php/Slicer-3-6-FAQ#Can_I_manually_adjust_or_correct_a_registration.3F in the Slicer Registration FAQ]
 +
##In the ''Data'' module, create a new transform node (right click on Scene node), rename to "Xf1_ManualInit", then drag the image volume inside the registration transform node
 +
##Select the views so that the volume is displayed in the slice views
 +
##Go to the [http://www.slicer.org/slicerWiki/index.php/Modules:Transforms-Documentation-3.6 Transforms module] and adjust the translation and rotation sliders to adjust the current position. To get a finer degree of control, enter smaller numbers for the translation limits and enter rotation angles numerically in increments of a few degrees at a time
 +
#Affine Registration
 +
##go to [http://www.slicer.org/slicerWiki/index.php/Modules:BRAINSFit BRAINSfit module]
 +
##fixed: "CT_preop", moving: "MRI_preop"
 +
##Initialize with transform, select "Xf1_ManualInit"
 +
 
 +
 
 +
 
 +
###select/check the following boxes: ''Include Rigid...", ''Include Scale", "Include Affine registration phase''
 +
##Registration Parameters: increase ''Number Of Samples'' to 200,000
 +
##Initialize with transform, select "Xf2_Affine"
 +
##Output Settings: select a new transform "Slicer BSpline Transform", rename to "Xf2_Affine"
 +
 
 +
###select a new transform "Slicer BSpline Transform", rename to "Xf3_BSpline"
 
###select a new volume "Output Image Volume'', rename to "moving_??_Xf1"
 
###select a new volume "Output Image Volume'', rename to "moving_??_Xf1"
 
##Registration Parameters: increase ''Number Of Samples'' to 200,000
 
##Registration Parameters: increase ''Number Of Samples'' to 200,000
Line 64: Line 85:
 
##adjust grid size until registration is acceptable
 
##adjust grid size until registration is acceptable
 
##you can see the commandline text of the registration performed by opening the ''Window/Error Log'' window and clicking on ''BRAINSfit commandline input''
 
##you can see the commandline text of the registration performed by opening the ''Window/Error Log'' window and clicking on ''BRAINSfit commandline input''
*'''Phase II:  Batch Run'''
 
#open a terminal window
 
##via a TextEditor or prototyping/scripting software (e.g. Matlab), copy and modify the prototype line below, by changing only the moving input image:
 
  /Applications/Slicer36/Slicer3 --launch  /Applications/Slicer36/lib/Slicer3/Plugins/BRAINSFit --useBSpline --splineGridSize 5,5,5 --outputVolumePixelType short /
 
  --numberOfSamples 200000 --costMetric MMI --fixedVolume Reference/refLung_001.dcm --movingVolume Moving/Moving_001/Moving_001.dcm /
 
  --bsplineTransform Xforms/Moving_001_XfBSpl5.tfm --outputVolume MovingResampled/Moving_001_r.nrrd >> Logs/Moving_001_RegLog.txt 2>&1
 
##'''replace "/Applications/Slicer36" with your path of 3DSlicer'''
 
## create result directories '''MovingResampled''', '''Logs''', '''Xforms'''
 
## note that because input image is DICOM, and images are 2D only, each image of the time series must be in its own directory, otherwise Slicer will read them as a volume.
 
##paste all commands into a terminal window, or copy into a shell script and execute.
 
*'''Phase III:  Evaluate Transform files'''
 
##upon completion, read the transform files with an editor and extract the displacements of interest
 
##The ITK transform files describe displacements at the grid nodes, many of which are outside the region of interest. Because BRAINSfit pads the grid with 1 voxel, the grid returned is actually 8x8x8. We use only the plane (*,*,4) for analysis and discard the y-direction displacements, which as expected are all zero.
 
##for details on the ITK transform format see the [http://www.slicer.org/slicerWiki/index.php/Slicer-3-6-FAQ#What_is_the_Meaning_of_.27Fixed_Parameters.27_in_the_transform_file_.28.tfm.29_of_a_BSpline_registration_.3F '''FAQ''' here]
 
##To obtain displacements at arbitrary coordinates, interpolate the transform into a deformation field, e.g. using this module (details  [http://www.slicer.org/slicerWiki/index.php/Slicer-3-6-FAQ#How_can_I_convert_a_BSpline_transform_into_a_deformation_field.3F FAQ here]):
 
/Applications/Slicer3.6.3/lib/Slicer3/Plugins/BSplineToDeformationField
 
  
 
=== Registration Results===
 
=== Registration Results===

Revision as of 19:32, 18 August 2011

Home < Projects:RegistrationLibrary:RegLib C12

Back to ARRA main page
Back to Registration main page
Back to Registration Use-case Inventory

v3.6.3 Slicer3-6Announcement-v1.png Slicer Registration Library Case #12: Liver Tumor Cryoablation

Input

this is the intra-op CT reference image. All images are aligned into this space lleft this is an intermediate pre-op CT, used as reference to match the MRI lleft this is the pre-op MRI we seek to align with the intra-op CT
fixed image/target intermediate ref. image moving image

Modules

Objective / Background

We seek to align a pre-operative MRI with the intra-operative CT for surgical guidance.

Keywords

MRI, CT, IGT, intra-operative, liver, cryoablation, change detection, non-rigid registration

Input Data

  • reference/fixed : pr-op CT, 0.95 x 0.95 x 5 mm voxel size
  • moving: intra-op MRI, 0.78 x 0.78 x 2.5 mm axial,

Discussion: Registration Challenges

  • large differences in FOV
  • strong differences in image contrast between MRI & CT
  • contrast enhancement and pathology and treatment changes cause additional differences in image content
  • we have strongly anisotropic voxel sizes with much less through-plane resolution

Notes / Overall Strategy

  • the intra-op CT is acquired with a clipped FOV (to minimize acquisition time & exposure). This causes difficulty for intensity-based automated registration. We therefore use an intermediate pre-op CT with full FOV to bridge to the MRI
  • masking is required to focus the registration algorithm on the structure of interest
  • Overall strategy:
  1. obtain (manual) a coarse segmentation of the liver in both MRI and CT. Dilate by a few pixels to include the organ boundary
  2. perform a manual initial alignment of MR to CT. Use this alignment as starting point for the automated registration
  3. run an affine registration with above masks and intial alignment
  1. run a non-rigid BSpline registration with above affine alignment as starting point


Procedures

  • Phase I: Build Masks
  1. load RegLib_C12 Dataset (e.g. via "RegLib_C12_SlicerScene.mrml"
  2. go to the Editor module
    1. Select "CT_preop_contrast" as master volume
    2. create new labelmap "CT_preop_contrast"
    3. trace the liver contour from axial slices, or use one of the Segmentation modules (e.g. FastMarching) as starting point
    4. Save result labelmap
  3. repeat outlining on the MR image
  4. In the Editor module, use the Dilate function to expand the outline by 2-3 pixels (click on Apply button 2-3 times)
  5. save dilated labelmasks under new name (e.g. CT_mask.nrrd)
  • Phase II: MR-CTpre registration
  1. Following the concept of manual registration, create an initial transform that roughly aligns the MR to the pre-op CT. Details and links in the Slicer Registration FAQ
    1. In the Data module, create a new transform node (right click on Scene node), rename to "Xf1_ManualInit", then drag the image volume inside the registration transform node
    2. Select the views so that the volume is displayed in the slice views
    3. Go to the Transforms module and adjust the translation and rotation sliders to adjust the current position. To get a finer degree of control, enter smaller numbers for the translation limits and enter rotation angles numerically in increments of a few degrees at a time
  2. Affine Registration
    1. go to BRAINSfit module
    2. fixed: "CT_preop", moving: "MRI_preop"
    3. Initialize with transform, select "Xf1_ManualInit"


      1. select/check the following boxes: Include Rigid...", Include Scale", "Include Affine registration phase
    1. Registration Parameters: increase Number Of Samples to 200,000
    2. Initialize with transform, select "Xf2_Affine"
    3. Output Settings: select a new transform "Slicer BSpline Transform", rename to "Xf2_Affine"
      1. select a new transform "Slicer BSpline Transform", rename to "Xf3_BSpline"
      2. select a new volume "Output Image Volume, rename to "moving_??_Xf1"
    1. Registration Parameters: increase Number Of Samples to 200,000
    2. Registration Parameters: set Number Of Grid Subdivisions to 5,5,5
    3. Leave all other settings at default
    4. click: Apply; (runtime < 10 sec. on MacPro)
    5. adjust grid size until registration is acceptable
    6. you can see the commandline text of the registration performed by opening the Window/Error Log window and clicking on BRAINSfit commandline input

Registration Results

unregistered MRI & CT
unregistered MRI & CT
registration masks
manual initial alignment of MRI & CT
affine registered MRI & CT
affine registered MRI & CT
nonrigid registered MRI & CT

Download

Link to User Guide: How to Load/Save Registration Parameter Presets

Acknowledgments

Thanks to Dr.Stuart Silverman and Dr. Nobuhiko Hata for sharing this case.