Sorry, this should be: M = inv(Ta)*inv(R)*Tf doug
Douglas N Greve wrote: > Hi Jim, I can't quite follow all of that. To go from a functional CRS > to an anatomical CRS, you'd need > > M = Ta*inv(R)*Tf > where Ta is the vox2raatkr for the anat > Tf is that of the func > and R is the register.dat mtx > > I would compare what you get to mri_vol2surf output. If they match, > then you're good to go. > > doug > > James Thompson wrote: >> Hi Doug and list, >> I'm trying to map surface/mesh vertices (e.g. rh.pial) to voxels >> (cols, rows, slices) in a functional volume in matlab, >> and just wanted to a) get a check that what I'm doing sounds right >> and b) share it in case it's useful to anyone else >> >> (I searched the mailing list and found most of my answers there, just >> not all in one post). Of course, mri_surf2vol does >> all this, probably better, but I want to iterate through many, many >> times. I've tested it and it seems to work. >> >> >> Functional data has been registered to anatomical (T1.mgz? orig.mgz? >> w/e) using bbregister. >> >> Doug Greve 19 Dec 2008 said: >> > >> >if you have the voxel index (col, row, slice) then you can: >> > >> >V2R = [ >> >> > -1.00000 0.00000 0.00000 128.00000 >> > 0.00000 0.00000 1.00000 -128.00000 >> > 0.00000 -1.00000 0.00000 128.00000 >> > 0.00000 0.00000 0.00000 1.00000 ] >> > >> >crs = [col row slice]'; >> >> > >> > >> >xyz = V2R * [crs+1; 1]; >> > >> >then find the vertex whose xyz coords are closest to xyz >> >> So: >> to find CRS from vertex RAS: >> >> crs = round(inv(V2R)*[xyz; 1]) %maybe crs -1 to make a closer match? >> but then this messes with below >> >> >> ------------------------------------------------------------------------------ >> >> >> >> From fscoordinates.pdf page 6, plus above... >> >> To go from Func CRS to T1 CRS (& vice versa) >> >> bbmtx is the transform matrix from register.dat >> >> >> Q = inv(Func_tkrvox2ras)*bbmtx*T1_tkrvox2ras; >> >> Q is now the transform from Func_tkrvox2ras to T1tkrvox2ras >> >> To find T1 CRS from Func CRS: >> T1_crs = inv(Q)*[Func_crs; 1]; >> To find Tfunc CRS from T1 CRS: >> >> >> Func_crs = Q*[T1_crs; 1]; %T1_crs + 1 if you subtracted 1 above >> >> So...to go from vertex RAS to Func CRS: >> >> Func_crs = Q*(round(inv(V2R)*[xyz; 1]); >> >> This seem right? >> best, >> Jim T >> >> ------------------------------------------------------------------------ >> >> _______________________________________________ >> Freesurfer mailing list >> Freesurfer@nmr.mgh.harvard.edu >> https://mail.nmr.mgh.harvard.edu/mailman/listinfo/freesurfer > -- Douglas N. Greve, Ph.D. MGH-NMR Center gr...@nmr.mgh.harvard.edu Phone Number: 617-724-2358 Fax: 617-726-7422 Bugs: surfer.nmr.mgh.harvard.edu/fswiki/BugReporting FileDrop: www.nmr.mgh.harvard.edu/facility/filedrop/index.html _______________________________________________ Freesurfer mailing list Freesurfer@nmr.mgh.harvard.edu https://mail.nmr.mgh.harvard.edu/mailman/listinfo/freesurfer The information in this e-mail is intended only for the person to whom it is addressed. If you believe this e-mail was sent to you in error and the e-mail contains patient information, please contact the Partners Compliance HelpLine at http://www.partners.org/complianceline . If the e-mail was sent to you in error but does not contain patient information, please contact the sender and properly dispose of the e-mail.