-
Notifications
You must be signed in to change notification settings - Fork 3
Matlab for NIFTI support
License
NIFTI-Imaging/nifti_matlab
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
1. Overview
The nifti1 matlab i/o code is written using matlab object oriented
data structures (in matlab, see help datatypes). The two
main structures are the nifti object, that primarily manages the
metadata (header information) and the file_array object, that manages
the data array and disk files.
The nifti1 matlab code was provided by John Ashburner, Functional
Imaging Laboratory, Wellcome Department of Imaging Neuroscience, London.
This code is released under the GNU public license, see the license.txt
and gpl.txt files in the distribution.
This niftimatlib release was pulled in March 2012 from the spm8
release: "Version 4667 (SPM8) 27-Feb-12"
2. Install/Build
The nifti1 matlab i/o code was written to run under MATLAB version 6.5 or higher.
To install, just make sure that the niftimatlib/matlab directory is in your MATLAB
path. For example. in matlab you can run the addpath command:
addpath('/usr/local/pkg/niftimatlib/matlab')
Or, you can copy the contents of the niftimatlib/matlab directory to your <home>/matlab directory.
There are two C program files included in the distribution: file2mat.c and mat2file.c
to handle file i/o. These need to be compiled into MATLAB mex files.
Precompiled mex files, taken from the spm8 distribution courtesy of the FIL, are included in
this distribution for the following platforms:
mexglx glnx86 Linux on x86
mexa64 glnxa64 Linux on x86_64
mexmaci maci Apple Mac OS X on x86
mexmaci64 maci64 Apple Mac OS X on x86_64
mexw32 win32 Microsoft Windows on x86
mexw64 win64 Microsoft Windows on x64
So, you may not need to do the mex compile. If you do compile,
a Makefile is in the matlab directory. Instructions are in the Makefile, a simple
"make all" should work. Note that you must have a MATLAB version 6.5 or higher mex compiler.
Alternately, a make.m file for calling mex from matlab was contributed by Alle Meije Wink.
Optional C code for a mex interface to Robert Cox's (NIH) nifti_stats.c code is provided
in the @nifti/private/src directory.
3. Tiny Example
Short example for those who want to see something in a hurry (longer example below):
For access to the avg152T1_LR_nifti.nii image see
http://nifti.nimh.nih.gov/nifti-1/data
To open an existing nifti1 file:
>> % be sure to rmpath any paths that point to any spm version
>> % after removing spm paths, clear all, then add niftimatlib path
>> % eg:
>> rmpath(genpath('/usr/local/pkg/spm8'))
>> clear all
>> addpath /usr/local/pkg/niftimatlib-1.2/matlab
>> f = nifti('avg152T1_LR_nifti.nii');
>> disp(f)
NIFTI object: 1-by-1
dat: [91x109x91 file_array]
mat: [4x4 double]
mat_intent: 'MNI152'
mat0: [4x4 double]
timing: [1x1 struct]
descrip: 'FSL3.2beta'
cal: [0 255]
aux_file: 'none'
>> size(f.dat)
ans =
91 109 91
3. nifti1 i/o Class Structures
NIFTI Object
------------
Constructor:
a = nifti(filename);
a - nifti object
filename - filename for nifti1 dataset. Optional parameter,
if omitted and empty nifti object is returned.
Methods:
create - Create a NIFTI-1 file
disp - Disp a NIFTI-1 object
display - Display a NIFTI-1 object
fieldnames - Fieldnames of a NIFTI-1 object
nifti - Create a NIFTI-1 object
subsasgn - Subscript assignment
subsref - Subscript referencing
Fields:
aux_file
cal
dat
descrip
diminfo
intent
mat
mat0
mat0_intent
mat_intent
timing
FILE_ARRAY Object
-----------------
Constructor:
a = file_array(fname,dim,dtype,offset,scl_slope,scl_inter)
a - file_array object
fname - filename
dim - dimensions (default = [0 0] )
dtype - datatype (default = 'uint8-le')
offset - offset into file (default = 0)
scl_slope - scalefactor (default = 1)
scl_inter - DC offset, such that dat = raw*scale + inter (default = 0)
Methods:
cat - Concatenate file_array objects.
disp - Display a file_array object
display - Display a file_array object
double - Convert to double precision
end - Overloaded end function for file_array objects
fieldnames - Fieldnames of a file-array object
horzcat - Horizontal concatenation of file_array objects
length - Overloaded length function for file_array objects
ndims - Number of dimensions
numel - Number of simple file arrays involved
numeric - Convert to numeric form
reshape - Overloaded reshape function for file_array objects
size - Overloaded size function for file_array objects
subsasgn - Overloaded subsasgn function for file_array objects
subsref - Subscripted reference.
vertcat - Vertical concatenation of file_array objects
Disallowed file_array methods:
ctranspose - Complex conjugate transposing is not allowed
permute - Permuting is not allowed
transpose - Transposing is not allowed
Fields:
fname
dim
dtype
offset
scl_inter
scl_slope
4. Examples
% Example of creating a simulated .nii file.
dat = file_array;
dat.fname = 'junk.nii';
dat.dim = [64 64 32];
dat.dtype = 'FLOAT64-LE';
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'; % dump possibilities
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'; % dump possibilities
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
%% Note that this call writes the data to the disk file
dat(:,:,:)=0; % Write out the data as all zeros
[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; % Write some ones in the file
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));
About
Matlab for NIFTI support
Resources
License
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published