NIFTI_20090325/load_untouch_nii.m
87b08fd7
 %  Load NIFTI or ANALYZE dataset, but not applying any appropriate affine
 %  geometric transform or voxel intensity scaling.
 %
 %  Although according to NIFTI website, all those header information are
 %  supposed to be applied to the loaded NIFTI image, there are some
 %  situations that people do want to leave the original NIFTI header and
 %  data untouched. They will probably just use MATLAB to do certain image
 %  processing regardless of image orientation, and to save data back with
 %  the same NIfTI header.
 %
 %  Since this program is only served for those situations, please use it
 %  together with "save_untouch_nii.m", and do not use "save_nii.m" or
 %  "view_nii.m" for the data that is loaded by "load_untouch_nii.m". For
 %  normal situation, you should use "load_nii.m" instead.
 %  
 %  Usage: nii = load_untouch_nii(filename, [img_idx], [dim5_idx], [dim6_idx], [dim7_idx])
 %  
 %  filename  - 	NIFTI or ANALYZE file name.
 %  
 %  img_idx (optional)  -  a numerical array of image volume indices.
 %	Only the specified volumes will be loaded. All available image
 %	volumes will be loaded, if it is default or empty.
 %
 %	The number of images scans can be obtained from get_nii_frame.m,
 %	or simply: hdr.dime.dim(5).
 %
 %  dim5_idx (optional)  -  a numerical array of 5th dimension indices.
 %	Only the specified range will be loaded. All available range
 %	will be loaded, if it is default or empty.
 %
 %  dim6_idx (optional)  -  a numerical array of 6th dimension indices.
 %	Only the specified range will be loaded. All available range
 %	will be loaded, if it is default or empty.
 %
 %  dim7_idx (optional)  -  a numerical array of 7th dimension indices.
 %	Only the specified range will be loaded. All available range
 %	will be loaded, if it is default or empty.
 %
 %  Returned values:
 %  
 %  nii structure:
 %
 %	hdr -		struct with NIFTI header fields.
 %
 %	filetype -	Analyze format .hdr/.img (0); 
 %			NIFTI .hdr/.img (1);
 %			NIFTI .nii (2)
 %
 %	fileprefix - 	NIFTI filename without extension.
 %
 %	machine - 	machine string variable.
 %
 %	img - 		3D (or 4D) matrix of NIFTI data.
 %
 %  - Jimmy Shen (jimmy@rotman-baycrest.on.ca)
 %
 function nii = load_untouch_nii(filename, img_idx, dim5_idx, dim6_idx, dim7_idx)
 
    if ~exist('filename','var')
       error('Usage: nii = load_untouch_nii(filename, [img_idx], [dim5_idx], [dim6_idx], [dim7_idx])');
    end
 
    if ~exist('img_idx','var') | isempty(img_idx)
       img_idx = [];
    end
 
    if ~exist('dim5_idx','var') | isempty(dim5_idx)
       dim5_idx = [];
    end
 
    if ~exist('dim6_idx','var') | isempty(dim6_idx)
       dim6_idx = [];
    end
 
    if ~exist('dim7_idx','var') | isempty(dim7_idx)
       dim7_idx = [];
    end
 
    %  Read the dataset header
    %
    [nii.hdr,nii.filetype,nii.fileprefix,nii.machine] = load_nii_hdr(filename);
 
    if nii.filetype == 0
       nii.hdr = load_untouch0_nii_hdr(nii.fileprefix,nii.machine);
       nii.ext = [];
    else
       nii.hdr = load_untouch_nii_hdr(nii.fileprefix,nii.machine,nii.filetype);
 
       %  Read the header extension
       %
       nii.ext = load_nii_ext(filename);
    end
 
    %  Read the dataset body
    %
    [nii.img,nii.hdr] = load_nii_img(nii.hdr,nii.filetype,nii.fileprefix, ...
 		nii.machine,img_idx,dim5_idx,dim6_idx,dim7_idx);
 
    %  Perform some of sform/qform transform
    %
 %   nii = xform_nii(nii, tolerance, preferredForm);
 
    nii.untouch = 1;
 
    return					% load_untouch_nii