On May 28, 2009, at 11:10 AM, freesurfer-request@nmr.mgh.harvard.edu wrote:
Message: 5 Date: Thu, 28 May 2009 13:21:35 -0400 From: "Srihasam, Krishna" Krishna_Srihasam@hms.harvard.edu Subject: [Freesurfer] problems aligning fsfast functional to anatomical.. To: "Freesurfer@nmr.mgh.harvard.edu" Freesurfer@nmr.mgh.harvard.edu Message-ID: <97172F7B8A916A44BF05EA8D13905ECE4E174DC587@ITCCRMAIL02.MED.HARVARD.EDU
Content-Type: text/plain; charset="us-ascii"
Hi,
I am having trouble overlaying my functional data generate by FSFAST stream onto the surfaces which I generated using Freesurfer. The registration is going haywire. I used spmregister-sess and the output registers coronal sections of the anatomical to horizontal sections of the fMRI data. So, I tried using the original anatomical image, not the surfaces I generated from it, the registration looks great. I used mri_info to check the difference between the images and my original anatomical image is 256x256x240 in size and its resolution is 0.5x0.5x0.5mm. The data seems to be stored as float. The brainmask.mgz in the mri directory of where I created the surfaces has different stats: 256x256x256 ; resolution: 1x1x1 and the data is in UCHAR. BTw, I am working on data from monkey rain. Any help will be more that appreciated..
-Krishna
Yeah, to which anatomical did you coregister it? hopefully to the 256x256x256 volumes as this seems to be the base for the surface. How did you create your surfaces in the first place? I think most monkey people scan at 0.5mm isotropic, but tell freesurfer the voxelresolution is 1mm isotropic, so that freesurfer does not degrade the resolution. But that means you always have to coregister functionals to the anatimcals with faked resolution (I like to pick the T1.mgz, nu.mgz or even the rawavg.mgz but that changes between sessions). This also means you will have to upscale the functionals by at least a factor of two to account for the change of the anatomical header. If its is helpful I can also send you a version of the script that finally displays activation maps over volume and surface.
ahoi & good luck Sebastian
This is the script I use to coregister functionals from fsfast (vfreesurfer 3.0.5) to volumes, this will not work with 4.3.1 out of the box, as it uses old formats and command line arguments, if I recall correctly.
#! /bin/csh -f # prepare the necessary steps for the registration of the functionals to the structural scans # this should allow arbitrary structurals #TODO unify all register scripts (func2func func2arb_struct func2struct func2session_struct) #TODO: automagically load surface if one exists
cd ../mystudy
#1. create the subjectname file, # this has to point to a valid subdirectory of freesurfers $SUBJECTDIR # bail out if subjectname exists... #EDIT THIS set base_dir = /space/data/moeller/cooked
# define stuff for the coregistration set redo_initial_reg = 1 # start with a fresh registration matrix baesd on the headers... set try_fsl_rigid_registration = 1 # use flirt for the initial matrix set check_reg = 1 # if set to 1 display the registration in tkregister2, otherwise skip set edit_string = "--noedit" set flirt_opts_string = #"-maxangle 15 -dof 6" # sometimes flirt needs constraints... set reg_id = #".chamber"#".electrode" # allow registation labels
# TREAT AS MAIN REGISTRATION? set reg_2_main_struct = 1 # if one treat the structural as the main structural (and create bold/register.dat)
# Napoleon face localiser, chamber coordinates #set structural_session = 061119Napoleon set structural_session = 080110QX90 #set targ_dir = ${base_dir}/${structural_session}/mri set targ_dir = ${SUBJECTS_DIR}/${structural_session}/mri set targ_vol = T1.mgz#rawavg.mgz
## Monchichi face localiser, chamber coordinates #set structural_session = 070123Monchichi #set targ_dir = ${base_dir}/anatomicals/${structural_session}/mri #set targ_vol = nu_electrode.mgz #set targ_dir = $targ_dir
# the volume to be moved set mov_sess = `cat ./sf` set mov_dir = ../t1epi set mov_vol = fmc_000.bshort echo $mov_sess
#2. create the t1epi directory for the registration # and copy the first functional average into it # why not simply symlink ../bold/101/001 to t1epi ??? set in_dir = ../bold/901/001 set out_dir = ../t1epi set out_vol = tmp_fsl_rotated.${mov_sess}_2_${structural_session}$ {reg_id} if !(-e ${out_dir}) then mkdir ${out_dir} cp ${in_dir}/fmc*.* ${out_dir}/ endif
#3. set the in_register.dat file (do not overwrite existing files) set out_reg = ${mov_sess}_2_${structural_session}${reg_id}.register.dat set out_reg_dir = ../t1epi
# create the initial registration... if (!(-e ${out_reg_dir}/${out_reg}) || (${redo_initial_reg} == 1)) then echo "Initial step, header creation..." # the monkey structurals' scanned at 0.5mm have been imported into freesurfer with the resolution forced to be 1.0mm # so the functionals have to be scaled by the same factor of 2 to allow the registration... (--noedit does not apply --movescale 2, so skip this) tkregister2 --sd ${targ_dir} --s ${structural_session} --targ $ {targ_dir}/${targ_vol} --mov ${mov_dir}/${mov_vol} --reg $ {out_reg_dir}/${out_reg} --regheader #--movscale 2 #--noedit endif
# try to coregister the volumes using fsl's flirt... if (${try_fsl_rigid_registration} == 1) then if (!(-e ${out_reg_dir}/${out_reg}.done_by_fsl) || ($ {redo_initial_reg} == 1)) then # now convert the initial registration matrix into fsl format, to seed the registration... set fs2fslreg = initxfm.fslmat tkregister2 --targ ${targ_dir}/${targ_vol} --mov ${mov_dir}/$ {mov_vol} --s ${structural_session} --reg ${out_reg_dir}/${out_reg} $ {edit_string} --fslregout ${out_reg_dir}/${fs2fslreg} echo "using FLIRT for registration... might take a while" fsl_rigid_register -r ${targ_dir}/${targ_vol} -i ${mov_dir}/$ {mov_vol} -o ${out_dir}/${out_vol} \ -regmat ${out_reg_dir}/${out_reg} -initxfm ${out_reg_dir}/$ {fs2fslreg} ${flirt_opts_string} #tkmedit -f ${out_dir}/${out_vol} -aux ${targ_dir}/${targ_vol} touch ${out_reg_dir}/${out_reg}.done_by_fsl endif endif
if ((${%check_reg} > 0) & (${check_reg} == 1)) then # actually register the session averages.. if ((-e ${targ_dir}/../surf/lh.white) && (-e ${targ_dir}/../surf/ lh.white)) then tkregister2 --s ${structural_session} --targ ${targ_dir}/$ {targ_vol} --mov ${mov_dir}/${mov_vol} --reg ${out_reg_dir}/${out_reg} --surf white else tkregister2 --sd ${targ_dir} --s ${structural_session} --targ $ {targ_dir}/${targ_vol} --mov ${mov_dir}/${mov_vol} --reg $ {out_reg_dir}/${out_reg} #--surf white endif endif
#6. copy register.dat into fsd (bold) set reg_targ_dir = ../bold set targ_reg = $out_reg #cp ${out_reg_dir}/${out_reg} ${reg_targ_dir}/${targ_reg} if !(-e ${reg_targ_dir}/regs) then mkdir ${reg_targ_dir}/regs endif cp ${out_reg_dir}/${out_reg} ${reg_targ_dir}/regs/${targ_reg}
if (${reg_2_main_struct} == 1) then echo "treating as main registration (creating bold/ register.dat)..." cp ${out_reg_dir}/${out_reg} ${out_reg_dir}/$ {structural_session}.register.dat cp ${out_reg_dir}/${out_reg} ${out_reg_dir}/register.dat cp ${out_reg_dir}/${out_reg} ${reg_targ_dir}/register.dat
endif
# auto registration supposedly requires same session anatomicals... #autoreg-sess –sf sessid –df sesspar
# last line follows...
freesurfer@nmr.mgh.harvard.edu