Hi John,
I was wondering if you could comment your code for reorient.m. I would like
to rewrite this function so that the reorientation maintains the voxel
space but applies the other transformations. Instead of plodding through
and trying to figure out what is going on, I figured I would ask you first
for help.
Cheers!
David Mitenko
function reorient(PP)
% Re-orient images
% The function reslices the input images to a resolution of 1mm.
% Output images (with the prefix "r") are written in the transverse
% orientation (using information from the ".mat" files).
%_______________________________________________________________________
% %W% John Ashburner %E%
if nargin<1, PP = spm_get(Inf,'*.img','Select file to reorient'); end;
VV = spm_vol(PP);
for V=VV',
d = V.dim(1:3);
c = [ 1 1 1 1
1 1 d(3) 1
1 d(2) 1 1
1 d(2) d(3) 1
d(1) 1 1 1
d(1) 1 d(3) 1
d(1) d(2) 1 1
d(1) d(2) d(3) 1]';
tc = V.mat(1:3,1:4)*c;
mx = round(max(tc,[],2)');
mn = round(min(tc,[],2)');
mat = spm_matrix([mn-1]);
dim = (mat\[mx 1]')';
VO = V;
[lpath,name,ext] = fileparts(V.fname);
VO.fname = fullfile(lpath,['r' name ext]);
VO.dim(1:3) = dim(1:3);
VO.mat = mat;
spm_progress_bar('Init',dim(3),'reslicing...','planes completed');
VO = spm_create_image(VO);
for i=1:dim(3),
M = inv(spm_matrix([0 0 -i])*inv(VO.mat)*V.mat);
img = spm_slice_vol(V,M,dim(1:2),1);
spm_write_plane(VO,img,i);
spm_progress_bar('Set',i)
end;
spm_progress_bar('Clear');
end;
return;
|