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.