1  function B = an2_rot3d(A,k,dim)


2  % AN2_ROT3D  Rotate 3D (or 4D) matrix in 90 degree steps in 3 dimensions


3  %


4  %


5  % Synopsis:


6  %


7  % Description:


8  %


9  % Examples:


10  %


11  % See also:


12  %


13 


14  % This function is a part of Aedes  A graphical tool for analyzing


15  % medical images


16  %


17  % Copyright (C) 2006 JuhaPekka Niskanen <JuhaPekka.Niskanen@uku.fi>


18  %


19  % Department of Physics, Department of Neurobiology


20  % University of Kuopio, FINLAND


21  %


22  % This program may be used under the terms of the GNU General Public


23  % License version 2.0 as published by the Free Software Foundation


24  % and appearing in the file LICENSE.TXT included in the packaging of


25  % this program.


26  %


27  % This program is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE


28  % WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.


29 


30 


31  if nargin<2


32  error('AN2_ROT3D: Too few input arguments!')


33  elseif nargin<3


34  dim = 3; % Use dim 3 as a default


35  end


36 


37  if ndims(A)>4  ~( isnumeric(A)  islogical(A) )


38  error('First input argument must be a numerical 3D (or 4D)matrix!')


39  end


40 


41  if ~isnumeric(k)  ~any(k==[0 1 2 3 4])


42  error('The second input argument has to be a scalar 0,1,2,3, or 4!')


43  end


44 


45  switch dim


46  case 1


47  if k==1 % Rotate 90 degrees along dim 1 (rows)


48  B = flipdim(permute(A,[3 2 1 4]),1);


49  elseif k==2 % Rotate 180 degrees along dim 1 (rows)


50  B = flipdim(flipdim(A,3),1);


51  elseif k==3 % Rotate 270 degrees along dim 1 (rows)


52  B = flipdim(permute(A,[3 2 1 4]),3);


53  elseif k==0  k==4


54  B=A;


55  end


56  case 2


57  if k==1 % Rotate 90 degrees along dim 2 (cols)


58  B = flipdim(permute(A,[1 3 2 4]),3);


59  elseif k==2 % Rotate 180 degrees along dim 2 (cols)


60  B = flipdim(flipdim(A,3),2);


61  elseif k==3 % Rotate 270 degrees along dim 2 (cols)


62  B = flipdim(permute(A,[1 3 2 4]),2);


63  elseif k==0  k==4


64  B=A;


65  end


66  case 3


67  if k==1 % Rotate 90 degrees along dim 3


68  B = flipdim(permute(A,[2 1 3 4]),1);


69  elseif k==2 % Rotate 180 degrees along dim 3


70  B = flipdim(flipdim(A,2),1);


71  elseif k==3 % Rotate 270 degrees along dim 3


72  B = flipdim(permute(A,[2 1 3 4]),2);


73  elseif k==0  k==4


74  B=A;


75  end


76  otherwise


77  return


78  end

