I am trying to register two volumetric images from brain (PET and CT or even PET and MR). Each of these volumetric images contains different numbers of 2D images (slices).
For example, CT
has 150
slices and PET
has 100
slices. I was thinking of using an interpolation method to calculate and reduce the number of CT slices to 100. Is this a correct approach? Does anyone know of any resources that could be helpful for me? like a pseudo code, or steps that I should go through for registering two volumetric images.
Thank you :)
问题:
回答1:
If you know the spacing information for the 150 CT slices and the 100 PET slices, you can look into MATLAB's interp1
function for interpolating along one axis to rescale the images to the same number of pixels. From here it might be possible to use MATLAB's imregister
to perform registration.
If you are looking to learn how registration works under the hood (transforming between pixel and physical coordinates, transforming/resampling images, etc.), one resource I can direct you to is the ITK Software Guide pdf.
In particular, try reading Book 1 Section 4.1.4 (page 41 of the pdf) on image representation, and Book 2 Section 3.9 (page 532 of the pdf) on transforms.
In general, the problem of transforming and interpolating with 3D images in registration can be pretty cumbersome to write code for. You need to ask yourself about the spacing and orientation of pixels, how to transform and interpolate images so that their grids overlap, and you also need to decide what to do with pixels in your grid that lie outside the image boundary when evaluating the similarity metric.
While it's up to you to do what you think is best, I suggest you use existing registration programs if they are capable of doing what you want:
- MATLAB's
imregister
(I have never used it so I can't comment on it) - simpleITK for Python
- the ITK for C++ has a learning curve but gives full control over the registration process
- elastix is a command line program that uses a text file of parameters to perform registration.
- 3D slicer has a graphical user interface for simple linear registration