Fit MRI data pixel by pixel.. anything quiker?
Show older comments
Hi everybody, To those not familiar with MRI: Over time after excitation, the MRI signal decays following a mono-exponential curve (=> T2/T2* time).
Here my problem: I have 3D MRI data (256 x 256 x 256 x4) where: the 2 first dimensions are the images, the third one the nb of slices the 4th dimension represent different echoes time. AND a mask with only the value to fit (1717227 fit to perform /scan..) I want to get the result of the fit on maps representing all the parameter of the fit
How I perform the fit: read the data over time, keep the signal and fit to get the result. I loop only where the mask is positive to reduce the number of fit. Up to now everything is ok.
And I loop over slices and all the pixels... I used parfor on 12 workers to perform the fit part but it still take a lot of time (it s running over 4 days now and it s not done yet)
my question is do you have any method to follow for reduce the time of analysis?
thanks for your help JC
the code:
for leo =1:size(T2map_data,3) %slices
[lrx jcb]=find(Mask(:,:,leo)>1);
parfor joe=1:size(lrx,1)
sig=getsig(T2map_data,lrx(joe),jcb(joe),leo);
[M(joe), T2st(joe), Cste(joe), gof(joe), res] = createFit_T2stmap(time, sig);
end
for joe=1:size(lrx,1) %%I do another loop otherwise parfor don t run extra time >2min/ slice
[M0, T2stmap, Cstes, Goodof] = ResultMatrix (M0,T2stmap, Cstes, Goodof, M(joe), T2st(joe), Cste(joe), gof(joe),lrx(joe),jcb(joe),leo);
end
toc
end
5 Comments
Amith Kamath
on 2 Jun 2013
Have you looked through: http://www.mathworks.com/help/matlab/matlab_prog/techniques-for-improving-performance.html?
Jean-Christophe
on 3 Jun 2013
Laura
on 17 Jun 2014
I am doing the exact same process but haven't incorporated parfor loops yet. Have you come across a faster way to accomplish your problem yet?
Jason Nicholson
on 17 Jun 2014
Do you have a test data set I can test a couple different methods?
Jason Nicholson
on 17 Jun 2014
Edited: Jason Nicholson
on 17 Jun 2014
If you can somehow do some transformation to get your data into the form:
[A][x] = [b]
where [A] is rectangular and [x] represents coefficients, than you can use
x = A\b
to solve the least squares problem. I do not use parfor or for and I deal with 15e6 data points on a regular basis. This often translates into an A matrix that is 15e6 x 256 in size. This type of problem solves in minutes on my i7 3.4Ghz quad core with 24GB of ram.
Answers (0)
Categories
Find more on Biomedical Imaging in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!