forked from fangq/iso2mesh
-
Notifications
You must be signed in to change notification settings - Fork 0
/
jnifticreate.m
107 lines (98 loc) · 3.32 KB
/
jnifticreate.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
function jnii=jnifticreate(varargin)
%
% jnii=jnifticreate
% or
% jnii=jnifticreate('header1', value1, 'header2', value2, ...)
% jnii=jnifticreate(img, 'header1', value1, ...)
%
% Create a default JNIfTI structure with default header and image volume
%
% author: Qianqian Fang (q.fang <at> neu.edu)
%
% input:
% img: set the jnii.NIFTIData section
% 'header_i': the header subfield name defined in the JNIfTI
% specification, see https://github.com/fangq/jnifti
% value_i: set the value for the specified JNIfTI header field
%
% output:
% jnii: without any input, jnii gives the default jnii header
% if img is given, jnii also includes the NIFTIData field
%
%
% this file is part of JNIfTI specification: https://github.com/fangq/jnifti
%
% License: Apache 2.0, see https://github.com/fangq/jnifti for details
%
jnii=struct('NIFTIHeader',struct(), 'NIFTIData', []);
% jnii.NIFTIHeader.NIIHeaderSize= 0;
% jnii.NIFTIHeader.A75DataTypeName= 'uint8';
% jnii.NIFTIHeader.A75DBName= '';
% jnii.NIFTIHeader.A75Extends= 0;
% jnii.NIFTIHeader.A75SessionError='';
% jnii.NIFTIHeader.A75Regular= 0;
jnii.NIFTIHeader.DimInfo.Freq= 0;
jnii.NIFTIHeader.DimInfo.Phase= 0;
jnii.NIFTIHeader.DimInfo.Slice= 0;
jnii.NIFTIHeader.Dim= [];
jnii.NIFTIHeader.Param1= 0;
jnii.NIFTIHeader.Param2= 0;
jnii.NIFTIHeader.Param3= 0;
jnii.NIFTIHeader.Intent= '';
jnii.NIFTIHeader.DataType= 'uint8';
jnii.NIFTIHeader.BitDepth= 8;
jnii.NIFTIHeader.FirstSliceID= 1;
jnii.NIFTIHeader.VoxelSize= [1,1,1,1];
jnii.NIFTIHeader.Orientation= struct('x','r','y','a','z','s');
% jnii.NIFTIHeader.NIIByteOffset= 0;
jnii.NIFTIHeader.ScaleSlope= 0;
jnii.NIFTIHeader.ScaleOffset= 0;
jnii.NIFTIHeader.LastSliceID= 1;
jnii.NIFTIHeader.SliceType= '';
jnii.NIFTIHeader.Unit= struct('L','mm','T', 's');
jnii.NIFTIHeader.MaxIntensity= 255;
jnii.NIFTIHeader.MinIntensity= 0;
jnii.NIFTIHeader.SliceTime= 1;
jnii.NIFTIHeader.TimeOffset= 0;
% jnii.NIFTIHeader.A75GlobalMax= 255;
% jnii.NIFTIHeader.A75GlobalMin= 0;
jnii.NIFTIHeader.Description= '';
% jnii.NIFTIHeader.AuxFile= '';
jnii.NIFTIHeader.QForm= 0;
jnii.NIFTIHeader.SForm= 1;
jnii.NIFTIHeader.Quatern.b= 0;
jnii.NIFTIHeader.Quatern.c= 0;
jnii.NIFTIHeader.Quatern.d= 0;
jnii.NIFTIHeader.QuaternOffset.x=0;
jnii.NIFTIHeader.QuaternOffset.y=0;
jnii.NIFTIHeader.QuaternOffset.z=0;
jnii.NIFTIHeader.Affine(1,:)= [1 0 0 0];
jnii.NIFTIHeader.Affine(2,:)= [0 1 0 0];
jnii.NIFTIHeader.Affine(3,:)= [0 0 1 0];
jnii.NIFTIHeader.Name= 'default';
jnii.NIFTIHeader.NIIFormat= 'jnifti';
% jnii.NIFTIHeader.NIIExtender= [0,0,0,0];
if(nargin==0)
return;
end
img=[];
pid=1;
if(~ischar(varargin{1}))
img=varargin{1};
pid=2;
end
if(~isempty(varargin))
for i=pid:2:length(varargin)
jnii.NIFTIHeader.(varargin{i})=varargin{i+1};
end
end
if(~isnumeric(img) && ~islogical(img))
error('img input must be a numerical or logical array');
end
jnii.NIFTIHeader.Dim=size(img);
jnii.NIFTIHeader.DataType=class(img);
info=whos('img');
jnii.NIFTIHeader.BitDepth=info.bytes/numel(img)*8;
jnii.NIFTIHeader.MinIntensity=min(img(:));
jnii.NIFTIHeader.MaxIntensity=max(img(:));
jnii.NIFTIData=img;