Phantom study to correct geometric distortion in MRI imaging (Moving image) based on CT imaging (Fixed image)

Dears 3DSlicer developers:
Andras Lasso, Csaba Pinter, Andrey Fedorov, Steve Pieper and Thomas Vaughan

Firstly, I Should thank you for all tips and guidances in 3DSlicer and python programming.

In the beginning, I will explain our project and then the steps done briefly.

We defined the project to correct geometric distortion in MRI imaging based on CT imaging. As you definitely know, this problem is occurred in MRI imaging due to the non-uniformity of static and gradient magnetic fields.
To correct this distortion, a phantom was designed and fabricated. This phantom consists of 305 plastic pipes containing water and five perspex sheets drilled to fix these pipes. Except for one of the pipes that was inserted obliquely, the other pipes were aligned in parallel.
The following figures represent 3D views of it.

In CT imaging:

In MRI imaging:

Since the geometric distortion is not uniform in the entire FOV of MR, It turns out that the best transformation matrix is found by B-Spline transform to correct this type of distortion. I think that this B-spline transform should be calculated in the entire FOV of MRI. The geometric distortion in MRI imaging can be corrected by using this transform matrix.

Overview of the steps in calculating B-Spline matrix:

  1. Equalize “Image Dimensions”, “Image Spacing” and “Image Origin” between CT and MRI images

  2. Segment the phantom pipes in two CT and MR imaging

  3. Extract the centerlines of the phantom pipes in two CT and MR imaging using vmtk.

The following figure shows the centerlines of CT and MR images along with axial plane, respectively.

Centerlines CT:
ScreenshotCenterlinesCT

Centerlines MR:
ScreenshotCenterlinesMR

  1. Calculate the collision points between CT and MR centerlines with axial plans apart at intervals 100 mm.

Schematic design the centerlines CT and four axial plans

Schematic design the centerlines MR and four axial plans
ScreenshotCenterlinesMR_4AxialPlans

Schematic design the collision points centerlines CT and four axial plans
ScreenshotPointsCT_4AxialPlans

Schematic design the collision points centerlines MR and four axial plans
ScreenshotPointsMR_4AxialPlans

  1. Convert these collision points to markups with the names C and M for CT and MR centerlines.
    The number of corresponding markups is equal to 1101 in CT and MR.

  2. Calculate the B-Spline transform matrix based on the alignment of C and M Markups using “Scattered Transform” module.

The following figure shows screenshot the module of “Scattered Transform”.
ScreenshotScattereTransorm

As you see, I set “Initial landmarks” to C (CT markups) and “Displaced landmarks” to M (MR markups). Is it true with considering CT as Fixed Image and MR as Moving Image?

I have some questions as following:

  1. Do you think I’ve done the right steps?

  2. To increase the accuracy in the calculation of B-Spline transform, should I increase “B-Spline Grid Spacing” in the section of “Advanced parameters” in the module of “Scattered Transform”?

  3. How can I apply this B-Spline Transform to MR images for registration CT and MR?

Please guide me,
Thanks a lot.
Shahrokh

“Equalize “Image Dimensions”, “Image Spacing” and “Image Origin” between CT and MRI images” => This should not be necessary

“Segment the phantom pipes in two CT and MR imaging” => You don’t need to segment anything. Instead, you can add landmarks at the intersection of planes and tubes. You cannot easily use tube points between planes, because you don’t know how much they are shifted along the tube’s centerline (physical planes do not appear as planar structures in the MRI). If planes are not visible on the MRI at all then you can change your phantom to contain a grid of tubes (don’t make all the tubes parallel). You may use all the tube curve points for validation

Scattered transform module is probably a good choice. The other option would be to compute thin-plate-spline transform using SlicerIGT extension’s Fiducial Registration Wizard module, but in case of hundreds of input points, this transform may be slow to compute.

You can apply transforms to any nodes using Transforms module.

Dear Andras,

Thanks a lot for your guidance.

As guide me in previous my questions, I can calculate the coordinates of intersections between CT/MR centerlines and the models of axial planes using numpy and vtkPolyData. Excuse me, I checked the correctness of the coordinates of intersections with the positions of axial planes. It looks like the coordinates are true.

At now, my problem is to set parameters in the panel of “Scattered Transform” module, although I studied the given description in ScatteredTransform in SlicerWiki but I did not notice much of it, unfortunately.

In summary, please consider two sets of fiducials with the names of C and M which are related to CT and MR images, respectively (1101 points for each ones of C and M fiducials). At now, I want to have the best spatial resolution in the calculation of B-Spline transform.

Please consider the following volume information (CT images):
Image Dimension: 512x512x173
Image spacing: 0.977x0.977x3.000 mm
Image Origin: (249.512)x(249.512)x(-258.000) mm

My question : What values should I set for the following parameters?
B-Spline Grid Spacing ?
Minimum domain coordinates ?
Maximum domain coordinates ?
Tolerance ?
Minimum grid spacing ?
Maximum number of levels ?

In other words, can the dimensions of B-Spline transform be equal to the matrix size of MR images?
Or
Can I have a displacement vector computed from scattered transform module per voxel of MR image?

Please guide me,
Shahrokh

Excuse me, I hope you will be able to help me.

ScatteredTransform module documentation describes meaning of all parameters. If you have any doubts, read the referenced paper (Joldes et al. 2012) and/or read on B-spline transforms in general.