0001 function M = decode_qform0(hdr)
0002
0003
0004
0005
0006
0007
0008
0009
0010 dim = double(hdr.dim);
0011 pixdim = double(hdr.pixdim);
0012 if ~isfield(hdr,'magic') || hdr.qform_code <= 0,
0013 flp = nic_spm_flip_analyze_images;
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025 n = min(dim(1),3);
0026 vox = [pixdim(2:(n+1)) ones(1,3-n)];
0027
0028 if ~isfield(hdr,'origin') || ~any(hdr.origin(1:3)),
0029 origin = (dim(2:4)+1)/2;
0030 else
0031 origin = double(hdr.origin(1:3));
0032 end;
0033 off = -vox.*origin;
0034 M = [vox(1) 0 0 off(1) ; 0 vox(2) 0 off(2) ; 0 0 vox(3) off(3) ; 0 0 0 1];
0035
0036
0037 if flp, M = diag([-1 1 1 1])*M; end;
0038 else
0039
0040
0041 R = Q2M(double([hdr.quatern_b hdr.quatern_c hdr.quatern_d]));
0042
0043
0044 T = [eye(4,3) double([hdr.qoffset_x hdr.qoffset_y hdr.qoffset_z 1]')];
0045
0046
0047
0048 n = min(dim(1),3);
0049 Z = [pixdim(2:(n+1)) ones(1,4-n)];
0050 Z(Z<0) = 1;
0051 if pixdim(1)<0, Z(3) = -Z(3); end;
0052 Z = diag(Z);
0053
0054 M = T*R*Z;
0055
0056
0057
0058 M = M * [eye(4,3) [-1 -1 -1 1]'];
0059 end;
0060 return;
0061