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


2  % AEDES_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('AEDES_ROT3D: Too few input arguments!')


33  elseif nargin<3


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


35  end


36 


37  if ~( 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  dim_inds = 1:ndims(A);


46 


47  switch dim


48  case 1


49  dim_inds(1:3)=dim_inds(3:1:1);


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


51  B = flipdim(permute(A,dim_inds),1);


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


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


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


55  B = flipdim(permute(A,dim_inds),3);


56  elseif k==0  k==4


57  B=A;


58  end


59  case 2


60  dim_inds(2:3)=dim_inds(3:1:2);


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


62  B = flipdim(permute(A,dim_inds),3);


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


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


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


66  B = flipdim(permute(A,dim_inds),2);


67  elseif k==0  k==4


68  B=A;


69  end


70  case 3


71  dim_inds(1:2)=dim_inds(2:1:1);


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


73  B = flipdim(permute(A,dim_inds),1);


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


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


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


77  B = flipdim(permute(A,dim_inds),2);


78  elseif k==0  k==4


79  B=A;


80  end


81  otherwise


82  return


83  end

