Image registration with PCA

Hi,
I want to detect, and possibly compensate for, motion which happens between acquisition of images (1 image of one slice of the body is taken every 3 seconds) for MRI-data. I am using PCA (principal component analysis). What I have so far is:
-Using a training set of 90 images (160 x 160 pixels) I have used PCA, own implementation but very similar to Matlab's built-in function princomp, I calculate the PC:s (principal components), the variances they account for and the data scores in the PC coordinate system.
-The variances are very good, depending on the ROI I use (I take a subset of the image as data, from some interesting area) and the image set (I have three different cases) I can get about 97% of the variance with just 3 PC:s.
-I have plotted (or rather, created a coloured grid) the load of all the 90 images on the first n (say 7) PC:s, to see which components are influenced the most by which image.
-I have also made images of the PC scores for the first four components.
-Finally, I have calculated a correlation coefficient between each image after the training images and the first four PC:s. I have plotted the index of the component for which this correlation is the largest (1,2,3 or 4) against image number.
Now, what I want to do is to tell in which images after the training set some large motion has occurred, and possibly even compensate for it. My problem is, I can't quite wrap my head around how I compile all the data I have gathered, and use it to motion detection or compensation. Can anyone help me with this? Just to make the most important point clear, the aim is to register the images to a reference image, but since the body is sometimes moving, we can't just use the first slice as reference, so I want to try PCA to get something useful out.
-Mikael

2 Commenti

Could you give us an idea of how the data is structured? Like small examples of what data you have to work with?
Mikael
Mikael il 3 Ott 2012
Yes, of course. Each image is 160 x 160 pixels, and I define a ROI somewhere in the middle of the image, which is about 70 x 20 pixels. My data array is a 1400 x 90 matrix, where the columns correspond to the 90 images of the training set, and the rows are pixels of the ROI (70 x 20 = 1400). So the rows are trials and columns variables using the PCA terminology.
After this data is used in the PCA-function to transform the 90 variables (90 images) to a smaller amount of variables, the next task is to detect/compensate for the motion in images 91 to the last image. At the moment what I have is a function that calculates the correlation coefficient between the ROI pixels of images 91+ and the retained principal components. I then classify the images 91+ as component 1, 2, 3 or 4 (if I retain 4 PC:s) depending on for which PC the correlation coefficient is the largest. I'm not sure if this is a good way to do the classification, but that is how it is done at the moment. My problem is really not matlab-related but rather I'm stuck with how to use the data and the principal coponents.

Accedi per commentare.

Risposte (1)

Image Analyst
Image Analyst il 3 Ott 2012

0 voti

This looks like you need an algorithm rather than MATLAB coding advice. I don't know which of the approximately 120 MRI registration algorithms listed here: http://iris.usc.edu/Vision-Notes/bibliography/medical879.html#Brain,%20Cortex,%20Registration,%20MRI,%20Other would be the best for you. Maybe PCA is better than all those - I don't know. Perhaps we can help with small chunks of code once you have picked a good algorithm.

1 Commento

Mikael
Mikael il 3 Ott 2012
You're right, it isn't coding problems I have, rather I am stuck with the actual utilization of the PCA-data. I want to use PCA, to see wether it is good for registration, but my problem is rather how to actually accomplish the registration. So in a sense it is an algorithm I need, although I have quite a lot done already.

Accedi per commentare.

Richiesto:

il 3 Ott 2012

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by