Motion correction for foot movement in an MRI foot
3 次查看(过去 30 天)
显示 更早的评论
Hi all,
I have a dynamic 3D MRI image of a foot where the subject has moved intermittently throughout the scan. I have tried to use imregister to correct for this but it doesn't seem to have done very much and I wondered if anyone can suggest a better code to help with my problem!
I've used the following code - using parallel processing to speed up the process as the size of my image array is 128 x 64 x 51 x 649, where the third dimension is number of slices and 4th dimension is number of dynamics.
parpool;
imFixed = im4D(:,:,:,1); %Using the first dynamic as the fixed image
[optimizer,metric] = imregconfig("monomodal");
registeredRigid = zeros(size(im4D)); %Preallocating object
parfor dyns = 1:size(im4D,4) %Looping through all dynamics
regRigidSlice = imregister(im4D(:,:,:,dyns),imFixed,"rigid",optimizer,metric);
registeredRigid(:,:,:,dyns) = regRigidSlice;
end
Thanks!
0 个评论
回答(1 个)
William Rose
2024-9-5
Please upload a subset of the data array, im4d. For example, the first 10 time points, i.e. a 128x64x51x10 array. Maybe you can upload it as a dicom, so that others could view it in one of the online free dicom image viewers. If you upload a dicom, make sure first that Matlab's dicomread() successfully extracts the 4D image data into a 4D numeric array.
If the foot movement is within the foot - for example, movement at the metatarsophalangeal joints or at the tarsometatarsal jopints - then you are probably out of luck, since the parts of the foot are moving with respect to one another during image ascquisition.
If the movement is more proximal, such as inversion/eversion at the ankle, then you may have success.
Does your code run without error? If so, how did you decide the results are unaceptable?
I would first try adjusting image contrast, to see if, with a different contrast, imregister will produce better results.
If imregister still does not work, then you can experiment with programmatic identification of 3 landmarks in each image. For example, you could try the distal end of the distal phalanx of hallux, the proximal/lateral tip of the 5th metatarsal, and the superior point of the talus. Or some other combination of three landmarks. The more non-collinear they are, the better. (Three non-collinear landmarks is the minimum you need; four would be preferable.) Then you do a translation and rotation of the image at that time point to align the landmarks with the landmark positions at the initial time.
Once you have the estimated the positions of the landmarks at a given time, the code to do the translation and rotation is complicated, but doable. See here for the homogeneous matrix that incorporates translation and rotation. Although the transformation matrix is 4x4, there are only 6 unknown quantities you must estimate at each time point: the 3-element translation vector, and the 3 angles of rotation. The alignment will never be perfect, because the relative 3D locations of the landmarks will never be exactly the same, from frame to frame. Therefore you can use singular value decomposition to find the translation and rotation that give the best (in a least squares sense) transformation. See here for details.
The hard part, in my opinion, will be the automatic identification of 3 or 4 landmarks at each time point.
This is going to be a significant effort. Is it worth it? MRI scans are not cheap, but your time is also valuable. Can you do another data collection, with substantially less movement?
2 个评论
William Rose
2024-9-9
Since the movement is within the foot, at toes and MTP joint, my complicated alternative would not work very well anyway. Thank you for posting the data.
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!