FreesurferGoodies/coregisterSPMtoFreeSurfer - MRC CBU Imaging Wiki
location: FreesurferGoodies / coregisterSPMtoFreeSurfer

function coregisterSPMtoFreeSurfer
freesurferPath='/the/path/to/your/freesurfer/subjectdirectory/';
subjects = {...
    'CBUXXXYYY',...
    'CBUXXXYY2',...
    };

nSubjects=length(subjects);


% parameters for co-registration:
% ---------------------------------------------------
% (will be replaced by defaults if not specified):
coreg.cost_fun = 'nmi'; % which cost function to use - normalised mutual information
coreg.sep = [4 2];      % resolution at which to sample images
coreg.tol = [0.0200    0.0200    0.0200    0.0010    0.0010    0.0010 ...
    0.0100    0.0100 0.0100    0.0010    0.0010    0.0010]; % tolerance for parameters
coreg.fwhm = [7 7]; % degree of smoothing to apply to images before registration



for subI=1:nSubjects
   
    % specify the reference high resolution anatomical (freeSurfer)
    fs_anat  = fullfile(freesurferPath,subjects{subI},'mri','anat.nii');
    
    % specify the source high resolution anatomical (copied SPM one)
    spm_anat = get_files(fullfile(freesurferPath,subjects{subI},'spm_maps'),'s*.nii');
    
    x=spm_coreg(fs_anat,spm_anat,coreg); % find the coreg parameters
    
    % convert the coreg parameters into an affine transformation matrix
    M  = inv(spm_matrix(x));
    MM = zeros(4,4,1);
    MM(:,:,1) = spm_get_space(spm_anat);
    
    % modify the header of the source structural image
    spm_get_space(spm_anat, M*MM(:,:,1));
    
end
end

function files = get_files(direc, filt)
% =========================================================================
% return a list of files
% filt = filter string
% direc = cell array of directory names
% revised 07-2011 Ian Charest
if nargin~=2, error('get_files:missing inputs, Please input folder(s) and file filter.'); end%if
files = [];
if ischar(direc) % if direc is already a character array
    currDir = direc;
    tmp = dir(fullfile(currDir,filt)); % find all files matching f*.nii
    tmp = [repmat([currDir filesep],size(tmp,1),1) char(tmp.name)]; % build the full path name for these files
    files = char(files,tmp);
else % if direc is a cell array
    if size(direc,1)>size(direc,2)
        nRuns=size(direc,1);
    else
        nRuns=size(direc,2);
    end
    for runI=1:nRuns % loop through each EPI session
        currDir = char(direc{runI});
        tmp = dir(fullfile(currDir,filt)); % find all files matching f*.nii
        tmp = [repmat([currDir filesep],size(tmp,1),1) char(tmp.name)]; % build the full path name for these files
        files = char(files,tmp);
    end
end
files = files(~all(files'==' ')',:);
end

CbuImaging: FreesurferGoodies/coregisterSPMtoFreeSurfer (last edited 2013-06-25 11:31:13 by IanCharest)