The main motivation for using this function is the ability to flexibly script spatial VMR transformation in Matlab.
VMR::ApplyTRF - apply transformation to VMR FORMAT: newvmr = vmr.ApplyTRF(trf [, opts]) Input fields: trf TRF object opts struct with optional fields .asdouble store output as double (default: false) .inverse apply inverse transformation (default: false) .method interpolation, see flexinterpn_method (default: 'linear') Output fields: newvmr transformed VMR
%load VMR and TRF vmr = xff('*.vmr'); trf = xff('*.trf'); % apply transformation with cubic interpolation trfvmr = vmr.ApplyTRF(trf, struct('method', 'cubic')); trfvmr.SaveAs; % clear objects vmr.ClearObject; trf.ClearObject; trfvmr.ClearObject;
% load two VMRs vmr1 = xff(sourcevmr); vmr2 = xff(targetvmr); % run coregistration (requires SPM5 or SPM8 on the path!!) % vmr2 is the target space (stationary), vmr1 the one to be resampled! trf = vmrspmcoreg(vmr1, vmr2) % resample vmr1 using sinc (lanczos3) interpolation vmr1_in_vmr2_space = vmr1.ApplyTRF(trf, struct('method', 'lanczos3')); % save TRF and VMR [sourcepath, sourcefile] = fileparts(sourcevmr); if isempty(sourcepath) sourcepath = '.'; end [nullpath, targetfile] = fileparts(targetvmr); trf.SaveAs(sprintf('%s/%s-TO-%s.trf', sourcepath, sourcefile, targetfile)); vmr1_in_vmr2_space.SaveAs(sprintf('%s/%s-TO-%s.vmr', sourcepath, sourcefile, targetfile)); % clear objects clearxffobjects({vmr1, vmr2, trf, vmr1_in_vmr2_space});