nifti1struc.m 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. function o = nifti1struc
  2. % Create a data structure describing NIFTI-1 headers
  3. %__________________________________________________________________________
  4. % Copyright (C) 2005-2017 Wellcome Trust Centre for Neuroimaging
  5. %
  6. % $Id: nifti1struc.m 7147 2017-08-03 14:07:01Z spm $
  7. persistent org;
  8. if ~isempty(org)
  9. o = org;
  10. return;
  11. end
  12. t = struct('conv',{ @char , @uint8 , @int16 , @int32 , @single },...
  13. 'prec',{'uint8', 'uint8', 'int16', 'int32', 'single'},...
  14. 'size',{ 1, 1, 2, 4, 4 });
  15. c = t(1);
  16. b = t(2);
  17. s = t(3);
  18. i = t(4);
  19. f = t(5);
  20. table = {...
  21. i, 1, 'sizeof_hdr', 348
  22. c, 10, 'data_type', ''
  23. c, 18, 'db_name', ''
  24. i, 1, 'extents', []
  25. s, 1, 'session_error', []
  26. c, 1, 'regular', 'r'
  27. b, 1, 'dim_info', []
  28. s, 8, 'dim', [3 0 0 0 1 1 1 1]
  29. f, 1, 'intent_p1', 0
  30. f, 1, 'intent_p2', 0
  31. f, 1, 'intent_p3', 0
  32. s, 1, 'intent_code', 0
  33. s, 1, 'datatype', 2
  34. s, 1, 'bitpix', 8
  35. s, 1, 'slice_start', []
  36. f, 8, 'pixdim', [0 1 1 1]
  37. f, 1, 'vox_offset', 0
  38. f, 1, 'scl_slope', 1
  39. f, 1, 'scl_inter', 0
  40. s, 1, 'slice_end', []
  41. b, 1, 'slice_code', []
  42. b, 1, 'xyzt_units', 10
  43. f, 1, 'cal_max', []
  44. f, 1, 'cal_min', []
  45. f, 1, 'slice_duration', []
  46. f, 1, 'toffset', []
  47. i, 1, 'glmax', []
  48. i, 1, 'glmin', []
  49. c, 80, 'descrip', 'NIFTI-1 Image'
  50. c, 24, 'aux_file', ''
  51. s, 1, 'qform_code', 0
  52. s, 1, 'sform_code', 0
  53. f, 1, 'quatern_b', 0
  54. f, 1, 'quatern_c', 0
  55. f, 1, 'quatern_d', 0
  56. f, 1, 'qoffset_x', 0
  57. f, 1, 'qoffset_y', 0
  58. f, 1, 'qoffset_z', 0
  59. f, 4, 'srow_x', [1 0 0 0]
  60. f, 4, 'srow_y', [0 1 0 0]
  61. f, 4, 'srow_z', [0 0 1 0]
  62. c, 16, 'intent_name', ''
  63. c, 4, 'magic', 'ni1'};
  64. org = struct('label',table(:,3),'dtype',table(:,1),'len',table(:,2),...
  65. 'offset',0,'def',table(:,4));
  66. os = 0;
  67. for j=1:length(org)
  68. os = org(j).dtype.size*ceil(os/org(j).dtype.size);
  69. fun = org(j).dtype.conv;
  70. if ischar(org(j).def), z = char(0); else z = 0; end
  71. def = [org(j).def repmat(z,1,org(j).len-length(org(j).def))];
  72. org(j).def = feval(fun,def);
  73. org(j).offset = os;
  74. os = os + org(j).len*org(j).dtype.size;
  75. end
  76. o = org;