1 function info =mha_read_header(filename)
2 % Function for reading the header of a Insight Meta-Image (.mha,.mhd) file
4 % info = mha_read_header(filename);
7 % 1, info=mha_read_header()
8 % 2, info=mha_read_header('volume.mha');
10 if(exist('filename','var')==0)
11 [filename, pathname] = uigetfile('*.mha', 'Read mha-file');
12 filename = [pathname filename];
15 fid=fopen(filename,'rb');
17 fprintf('could not open file %s\n',filename);
21 info.Filename=filename;
23 info.CompressedData='false';
24 readelementdatafile=false;
25 while(~readelementdatafile)
27 s=find(str=='=',1,'first');
31 while(type(end)==' '); type=type(1:end-1); end
32 while(data(1)==' '); data=data(2:end); end
39 info.NumberOfDimensions=sscanf(data, '%d')';
41 info.Dimensions=sscanf(data, '%d')';
43 info.PixelDimensions=sscanf(data, '%lf')';
45 info.ElementSize=sscanf(data, '%lf')';
46 if(~isfield(info,'PixelDimensions'))
47 info.PixelDimensions=info.ElementSize;
49 case 'elementbyteordermsb'
50 info.ByteOrder=lower(data);
51 case 'anatomicalorientation'
52 info.AnatomicalOrientation=data;
53 case 'centerofrotation'
54 info.CenterOfRotation=sscanf(data, '%lf')';
56 info.Offset=sscanf(data, '%lf')';
58 info.BinaryData=lower(data);
59 case 'compresseddatasize'
60 info.CompressedDataSize=sscanf(data, '%d')';
62 info.ObjectType=lower(data);
63 case 'transformmatrix'
64 info.TransformMatrix=sscanf(data, '%lf')';
65 case 'compresseddata';
66 info.CompressedData=lower(data);
67 case 'binarydatabyteordermsb'
68 info.ByteOrder=lower(data);
69 case 'elementdatafile'
71 readelementdatafile=true;
73 info.DataType=lower(data(5:end));
75 val=sscanf(data, '%d')';
76 if(val(1)>0), info.HeaderSize=val(1); end
83 case 'char', info.BitDepth=8;
84 case 'uchar', info.BitDepth=8;
85 case 'short', info.BitDepth=16;
86 case 'ushort', info.BitDepth=16;
87 case 'int', info.BitDepth=32;
88 case 'uint', info.BitDepth=32;
89 case 'float', info.BitDepth=32;
90 case 'double', info.BitDepth=64;
91 otherwise, info.BitDepth=0;
93 if(~isfield(info,'HeaderSize'))
94 info.HeaderSize=ftell(fid);