Loading...
Searching...
No Matches
fslio.h
Go to the documentation of this file.
/*
fslio.h (Input and output routines for images in FSL)
Mark Jenkinson
FMRIB Image Analysis Group
*/
/*
The fslio.h file was originally part of FSL - FMRIB's Software Library
http://www.fmrib.ox.ac.uk/fsl
fslio.h has now been placed in the public domain.
Developed at FMRIB (Oxford Centre for Functional Magnetic Resonance
Imaging of the Brain), Department of Clinical Neurology, Oxford
University, Oxford, UK
*/
#if !defined(__FSLIO_H)
#define __FSLIO_H
#include <stdio.h>
#include <nifti1_io.h>
#include <znzlib.h>
#include "dbh.h"
#ifdef __cplusplus
extern "C" {
#endif
/*
Note that this library is similar to avwio but has changed in many ways.
It is almost fully backwards compatible, but not quite, as it cannot write
.nii.gz files using the old style functions.
Recommended ways of reading and writing images are:
Reading
-------
Use the FslOpen(), FslReadVolumes() and FslClose() functions. e.g.
FSLIO *fslio;
void *buffer;
int nvols;
fslio = FslOpen("/some/path/name_of_file","rb");
... can now access header info via the FslGet calls ...
... allocate room for buffer ...
FslReadVolumes(fslio,buffer,nvols);
... do something ...
FslClose(fslio);
Writing
-------
This is more complicated due to the nature of gzipped writing, which must be
done in the correct order, and for single files (*.nii.gz) this means that
the header information must be written before any image data.
(1)
The best method to use is almost backwards compatible, but requires
an FslWriteHeader() call:
FSLIO* fslio;
fslio = FslOpen("/some/path/name_of_file","wb");
... set the appropriate header information using FslSet calls ...
FslWriteHeader(fslio);
... now can write one or more volumes at a time using
FslWriteVolumes(fslio,buffer,nvols) ...
FslClose(fslio);
This version is useful if your image data needs to be written from different blocks
of memory.
(2)
Another method is available, but which is discouraged, is:
FSLIO* fslio;
fslio = FslOpen("/some/path/name_of_file","wb");
... set some appropriate header information using FslSet calls ...
... now can write one or more volumes at a time using
FslWriteVolumes(fslio,buffer,nvols) ...
... set more appropriate header information using FslSet calls ...
FslClose(fslio);
WARNING: this cannot write .nii.gz files as the header information cannot be
written by FslClose() after the image data is written, which is how the previous
versions have worked.
*/
#define FSL_TYPE_ANALYZE 0
#define FSL_TYPE_NIFTI 1
#define FSL_TYPE_NIFTI_PAIR 2
#define FSL_TYPE_MINC 4
#define FSL_TYPE_ANALYZE_GZ 100
#define FSL_TYPE_NIFTI_GZ 101
#define FSL_TYPE_NIFTI_PAIR_GZ 102
#define FSL_TYPE_MINC_GZ 104
/* @} */
#define FSL_RADIOLOGICAL -1
#define FSL_NEUROLOGICAL 1
typedef struct
{
znzFile fileptr;
nifti_image *niftiptr;
#ifdef USE_MINC
minc_image *mincptr;
#else
void *mincptr;
#endif
int file_mode;
int write_mode;
int written_hdr;
} FSLIO;
/* basic file i/o commands */
FSLIO *FslOpen(const char *filename, const char *opts);
FSLIO *FslXOpen(const char *filename, const char *opts, int filetype);
int FslSeekVolume(FSLIO *fslio, size_t vols);
int FslClose(FSLIO *fslio);
/* basic read and write commands */
void* FslReadAllVolumes(FSLIO* fslio, char* filename);
void FslWriteAllVolumes(FSLIO *fslio, const void *buffer);
size_t FslReadVolumes(FSLIO *fslio, void *buffer, size_t nvols);
size_t FslWriteVolumes(FSLIO *fslio, const void *buffer, size_t nvols);
void FslWriteHeader(FSLIO *fslio);
/* support functions for file names and types */
int FslFileExists(const char *filename);
char *FslMakeBaseName(const char *fname);
int FslCheckForMultipleFileNames(const char* filename);
int FslGetEnvOutputType(void);
void FslSetIgnoreMFQ(int flag);
int FslGetIgnoreMFQ(void);
void FslSetOverrideOutputType(int type);
int FslGetOverrideOutputType(void);
int FslGetFileType(const FSLIO *fslio);
void FslSetFileType(FSLIO *fslio, int filetype);
int FslIsSingleFileType(int filetype);
int FslIsCompressedFileType(int filetype);
int FslBaseFileType(int filetype);
const char* FslFileTypeString(int filetype);
int FslGetWriteMode(const FSLIO *fslio);
void FslSetWriteMode(FSLIO *fslio, int mode);
void AvwSwapHeader(struct dsr *avw);
int FslReadRawHeader(void *buffer, const char* filename);
/* simple creation and clone/copy operations */
FSLIO *FslInit(void);
void FslInitHeader(FSLIO *fslio, short t,
size_t x, size_t y, size_t z, size_t v,
float vx, float vy, float vz, float tr,
size_t dim);
void FslSetInit(FSLIO* fslio);
void FslCloneHeader(FSLIO *dest, const FSLIO *src);
/* get and set routines for properties */
size_t FslGetVolSize(FSLIO *fslio);
void FslSetDim(FSLIO *fslio, short x, short y, short z, short v);
void FslGetDim(FSLIO *fslio, short *x, short *y, short *z, short *v);
void FslSetDimensionality(FSLIO *fslio, size_t dim);
void FslGetDimensionality(FSLIO *fslio, size_t *dim);
void FslSetVoxDim(FSLIO *fslio, float x, float y, float z, float tr);
void FslGetVoxDim(FSLIO *fslio, float *x, float *y, float *z, float *tr);
void FslGetCalMinMax(FSLIO *fslio, float *min, float *max);
void FslSetCalMinMax(FSLIO *fslio, float min, float max);
void FslGetAuxFile(FSLIO *fslio,char *aux_file);
void FslSetAuxFile(FSLIO *fslio,const char *aux_file);
void FslSetTimeUnits(FSLIO *fslio, const char *units);
void FslGetTimeUnits(FSLIO *fslio, char *units);
void FslSetDataType(FSLIO *fslio, short t);
size_t FslGetDataType(FSLIO *fslio, short *t);
int FslGetIntensityScaling(FSLIO *fslio, float *slope, float *intercept);
void FslSetIntent(FSLIO *fslio, short intent_code, float p1, float p2, float p3);
short FslGetIntent(FSLIO *fslio, short *intent_code, float *p1, float *p2,
float *p3);
short FslGetStdXform(FSLIO *fslio, mat44 *stdmat);
void FslSetStdXform(FSLIO *fslio, short sform_code, mat44 stdmat);
void FslGetMMCoord(mat44 stdmat, float voxx, float voxy, float voxz,
float *mmx, float *mmy, float *mmz);
void FslGetVoxCoord(mat44 stdmat, float mmx, float mmy, float mmz,
float *voxx, float *voxy, float *voxz);
short FslGetRigidXform(FSLIO *fslio, mat44 *rigidmat);
void FslSetRigidXform(FSLIO *fslio, short qform_code, mat44 rigidmat);
int FslGetLeftRightOrder(FSLIO *fslio);
/* these two functions are deprecated with the nifti/analyze support */
/* please do all spatial coordinate origins via the Std and Rigid Xforms */
void FslSetAnalyzeSform(FSLIO *fslio, const short *orig,
float dx, float dy, float dz);
void FslGetAnalyzeOrigin(FSLIO *fslio, short orig[5]);
/* other read and write commands */
size_t FslReadSliceSeries(FSLIO *fslio, void *buffer,short slice, size_t nvols);
size_t FslReadRowSeries(FSLIO *fslio, void *buffer, short row, short slice, size_t nvols);
size_t FslReadTimeSeries(FSLIO *fslio, void *buffer, short xVox, short yVox, short zVox, size_t nvols);
/* miscellaneous helper stuff */
mat33 mat44_to_mat33(mat44 x);
/* added by KF pending discussion w/ Mark */
typedef unsigned char THIS_UINT8;
typedef char THIS_INT8;
typedef unsigned short THIS_UINT16;
typedef short THIS_INT16;
typedef unsigned int THIS_UINT32;
typedef int THIS_INT32;
typedef unsigned long THIS_UINT64;
typedef long THIS_INT64;
typedef float THIS_FLOAT32;
typedef double THIS_FLOAT64;
FSLIO * FslReadHeader(char *fname);
double ****FslGetBufferAsScaledDouble(FSLIO *fslio);
double ***FslGetVolumeAsScaledDouble(FSLIO *fslio, int vol);
int convertBufferToScaledDouble(double *outbuf, void *inbuf, long len, float slope, float inter, int nifti_datatype ) ;
double ****d4matrix(int th, int zh, int yh, int xh);
double ***d3matrix(int zh, int yh, int xh);
#ifdef __cplusplus
}
#endif
#endif
FslClose
int FslClose(FSLIO *fslio)
Write header and image data if this dataset was open for writing. Close the dataset header and data f...
Definition fslio.c:1906
FslFileTypeString
const char * FslFileTypeString(int filetype)
Return a string describing the format of the dataset.
Definition fslio.c:47
FslGetBufferAsScaledDouble
double **** FslGetBufferAsScaledDouble(FSLIO *fslio)
Return the fslio data buffer of a 1-4D dataset as a 4D array of scaled doubles.
Definition fslio.c:2204
FslWriteHeader
void FslWriteHeader(FSLIO *fslio)
Writes nifti/anz header and opens img file ready for writing.
Definition fslio.c:954
FslReadTimeSeries
size_t FslReadTimeSeries(FSLIO *fslio, void *buffer, short xVox, short yVox, short zVox, size_t nvols)
Read one voxel (xyz location) from first nvols volumes in dataset; ie get a t dim buffer.
Definition fslio.c:1114
FslGetVolumeAsScaledDouble
double *** FslGetVolumeAsScaledDouble(FSLIO *fslio, int vol)
Return volume vol (0-based) as a 3D array of scaled doubles.
Definition fslio.c:2117
FslReadHeader
FSLIO * FslReadHeader(char *fname)
Reads nifti/anz header, no data is read.
Definition fslio.c:2075
FslWriteAllVolumes
void FslWriteAllVolumes(FSLIO *fslio, const void *buffer)
Writes all data from buffer (using size info from fslio) to file.
Definition fslio.c:868
FslReadRowSeries
size_t FslReadRowSeries(FSLIO *fslio, void *buffer, short row, short slice, size_t nvols)
Read one row from one slice for first nvols volumes in dataset; ie get an xt buffer.
Definition fslio.c:1055
FslReadSliceSeries
size_t FslReadSliceSeries(FSLIO *fslio, void *buffer, short slice, size_t nvols)
Read one slice from each of the first nvols volumes in the dataset, ie get an xyt buffer.
Definition fslio.c:998
convertBufferToScaledDouble
int convertBufferToScaledDouble(double *outbuf, void *inbuf, long len, float slope, float inter, int nifti_datatype)
allocate a 4D buffer, use 1 contiguous buffer for the data
Definition fslio.c:2275
d3matrix
double *** d3matrix(int zh, int yh, int xh)
allocate a 3D buffer, use 1 contiguous buffer for the data
Definition fslio.c:2343
FslInit
FSLIO * FslInit(void)
allocate space for the FSLIO struct and set some sensible defaults
Definition fslio.c:372
FslOpen
FSLIO * FslOpen(const char *filename, const char *opts)
Opens a file for either reading or writing.
Definition fslio.c:624
d4matrix
double **** d4matrix(int th, int zh, int yh, int xh)
allocate a 4D buffer, use 1 contiguous buffer for the data
Definition fslio.c:2392
FslReadVolumes
size_t FslReadVolumes(FSLIO *fslio, void *buffer, size_t nvols)
Read the first nvols Volumes from a 4D dataset.
Definition fslio.c:833
FslXOpen
FSLIO * FslXOpen(const char *filename, const char *opts, int filetype)
Opens a file for either reading or writing.
Definition fslio.c:652
FslReadAllVolumes
void * FslReadAllVolumes(FSLIO *fslio, char *filename)
Read the header and all data into the FSLIO structure.
Definition fslio.c:789
FslWriteVolumes
size_t FslWriteVolumes(FSLIO *fslio, const void *buffer, size_t nvols)
Write the first nvols volumes in buffer to disk.
Definition fslio.c:899
nifti1_io.h
Data structures for using nifti1_io API.
FSLIO
High level data structure for open datasets in the fslio API.
Definition fslio.h:124
dsr
Definition dbh.h:76
mat33
Definition nifti1_io.h:62
mat44
Definition nifti1_io.h:58
nifti_image
High level data structure for open nifti datasets in the nifti1_io API. Note that this structure is n...
Definition nifti1_io.h:88