Code covered by the BSD License

# Tools for NIfTI and ANALYZE image

### 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

```