123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- % 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
|