Code covered by the BSD License  

Highlights from
Tools for NIfTI and ANALYZE image

image thumbnail

Tools for NIfTI and ANALYZE image

by

Jimmy Shen (view profile)

 

23 Oct 2005 (Updated )

Load, save, make, reslice, view (and edit) both NIfTI and ANALYZE data on any platform

rri_orient(nii, varargin)
%  Convert image of different orientations to standard Analyze orientation
%
%  Usage: nii = rri_orient(nii);

%  Jimmy Shen (jimmy@rotman-baycrest.on.ca), 26-APR-04
%___________________________________________________________________

function [nii, orient, pattern] = rri_orient(nii, varargin)

   if nargin > 1
      pattern = varargin{1};
   else
      pattern = [];
   end

   if(nargin > 2)
       orient = varargin{2};
       if(length(find(orient>6)) || length(find(orient<1))) %value checking
           orient=[1 2 3]; %set  to default if bogus values set
       end
   else
       orient = [1 2 3];
   end
   
   
   dim = double(nii.hdr.dime.dim([2:4]));

   if ~isempty(pattern) & ~isequal(length(pattern), prod(dim))
      return;
   end

   %  get orient of the current image
   %
   if isequal(orient, [1 2 3])
    orient = rri_orient_ui;
    pause(.1);
   end

   %  no need for conversion
   %
   if isequal(orient, [1 2 3])
      return;
   end

   if isempty(pattern)
      pattern = 1:prod(dim);
   end

   pattern = reshape(pattern, dim);
   img = nii.img;

   %  calculate after flip orient
   %
   rot_orient = mod(orient + 2, 3) + 1;

   %  do flip:
   %
   flip_orient = orient - rot_orient;

   for i = 1:3
      if flip_orient(i)
         pattern = flipdim(pattern, i);
         img = flipdim(img, i);
      end
   end

   %  get index of orient (do inverse)
   %
   [tmp rot_orient] = sort(rot_orient);

   %  do rotation:
   %
   pattern = permute(pattern, rot_orient);
   img = permute(img, [rot_orient 4 5 6]);

   %  rotate resolution, or 'dim'
   %
   new_dim = nii.hdr.dime.dim([2:4]);
   new_dim = new_dim(rot_orient);
   nii.hdr.dime.dim([2:4]) = new_dim;

   %  rotate voxel_size, or 'pixdim'
   %
   tmp = nii.hdr.dime.pixdim([2:4]);
   tmp = tmp(rot_orient);
   nii.hdr.dime.pixdim([2:4]) = tmp;

   %  re-calculate originator
   %
   tmp = nii.hdr.hist.originator([1:3]);
   tmp = tmp(rot_orient);
   flip_orient = flip_orient(rot_orient);

   for i = 1:3
      if flip_orient(i) & ~isequal(double(tmp(i)), 0)
         tmp(i) = int16(double(new_dim(i)) - double(tmp(i)) + 1);
      end
   end

   nii.hdr.hist.originator([1:3]) = tmp;

   nii.img = img;
   pattern = pattern(:);

   return;						% rri_orient

Contact us