It may be easiest to learn by example. If you want to develop a new
user-interface for SPM5, then you would create a file called spm_config_*.m,
similar to the other spm_config.m files (if you strip out the documentation
parts, you will see that these are actually quite small). Your spm_config*
file can then be added to the toolbox subdirectory and accessed through the
TOOLS pulldown.
The help button allows you to navigate through the documentation of each of
the Matlab functions, which you may find useful.
For reading and writing images, you would use these functions.
spm_vol
spm_slice_vol
spm_sample_vol
spm_create_vol
spm_write_plane
spm_write_vol
spm_get_space
There is Matlab help on all these functions. Alternatively, you could use the
NIFTI routines directly. There is no documentation on this, but here are a
few examples of how you can use them:
======================================
% Example of creating a simulated .nii file.
dat = file_array;
dat.fname = 'junk.nii';
dat.dim = [64 64 32];
dat.dtype = 'FLOAT64-BE';
dat.offset = ceil(348/8)*8;
% alternatively:
% dat = file_array( 'junk.nii',dim,dtype,off,scale,inter)
disp(dat)
% Create an empty NIFTI structure
N = nifti;
fieldnames(N) % Dump fieldnames
% Creating all the NIFTI header stuff
N.dat = dat;
N.mat = [2 0 0 -110 ; 0 2 0 -110; 0 0 -2 92; 0 0 0 1];
N.mat_intent = 'xxx'
N.mat_intent = 'Scanner';
N.mat0 = N.mat;
N.mat0_intent = 'Aligned';
N.diminfo.slice = 3;
N.diminfo.phase = 2;
N.diminfo.frequency = 2;
N.diminfo.slice_time.code='xxx';
N.diminfo.slice_time.code = 'sequential_increasing';
N.diminfo.slice_time.start = 1;
N.diminfo.slice_time.end = 32;
N.diminfo.slice_time.duration = 3/32;
N.intent.code='xxx' ; % dump possibilities
N.intent.code='FTEST'; % or N.intent.code=4;
N.intent.param = [4 8];
N.timing.toffset = 28800;
N.timing.tspace=3;
N.descrip = 'This is a NIFTI-1 file';
N.aux_file='aux-file-name.txt';
N.cal = [0 1];
create(N); % Writes hdr info
dat(:,:,:)=0;
[i,j,k] = ndgrid(1:64,1:64,1:32);
dat(find((i-32).^2+(j-32).^2+(k*2-32).^2 < 30^2))=1;
dat(find((i-32).^2+(j-32).^2+(k*2-32).^2 < 15^2))=2;
% displaying a slice
imagesc(dat(:,:,12));colorbar
% get a handle to 'junk.nii';
M=nifti('junk.nii');
imagesc(M.dat(:,:,12));
======================================
Best regards,
-John
> As you know,we usually need to modify the code of SPM to fit our
> problem.but we can not find some relevant development tutorials. Would you
> please tell me how to learn the framework of SPM step by step ?
> In addition, I want to know where I can find the details of the SPM
> structure.
>
> Thanks for your kindness.
>
> Leina
>
> On 12/13/05, chin wei <[log in to unmask]> wrote:
> > Hi all. I read the spm function spm_realign. Some of the parameters I
> > can't understand their meanings. For example, what is the meaning of
> > warp? What is the difference of 'warp' [0 1 0] and 'warp' [1 1 0]'?
> > Please help me. thanks in advance
|