X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=utilities_LW%2Fmha_read_header.m;fp=utilities_LW%2Fmha_read_header.m;h=21fd4b7c78629a0b1f74589920d9688215c8d067;hb=d0401c49b6b7511cfdaa0534b78bd3c5b2b0637a;hp=0000000000000000000000000000000000000000;hpb=f8358f5ec65f099f3080043580ef861c3fd3ba2e;p=CreaPhase.git diff --git a/utilities_LW/mha_read_header.m b/utilities_LW/mha_read_header.m new file mode 100644 index 0000000..21fd4b7 --- /dev/null +++ b/utilities_LW/mha_read_header.m @@ -0,0 +1,96 @@ +function info =mha_read_header(filename) +% Function for reading the header of a Insight Meta-Image (.mha,.mhd) file +% +% info = mha_read_header(filename); +% +% examples: +% 1, info=mha_read_header() +% 2, info=mha_read_header('volume.mha'); + +if(exist('filename','var')==0) + [filename, pathname] = uigetfile('*.mha', 'Read mha-file'); + filename = [pathname filename]; +end + +fid=fopen(filename,'rb'); +if(fid<0) + fprintf('could not open file %s\n',filename); + return +end + +info.Filename=filename; +info.Format='MHA'; +info.CompressedData='false'; +readelementdatafile=false; +while(~readelementdatafile) + str=fgetl(fid); + s=find(str=='=',1,'first'); + if(~isempty(s)) + type=str(1:s-1); + data=str(s+1:end); + while(type(end)==' '); type=type(1:end-1); end + while(data(1)==' '); data=data(2:end); end + else + type=''; data=str; + end + + switch(lower(type)) + case 'ndims' + info.NumberOfDimensions=sscanf(data, '%d')'; + case 'dimsize' + info.Dimensions=sscanf(data, '%d')'; + case 'elementspacing' + info.PixelDimensions=sscanf(data, '%lf')'; + case 'elementsize' + info.ElementSize=sscanf(data, '%lf')'; + if(~isfield(info,'PixelDimensions')) + info.PixelDimensions=info.ElementSize; + end + case 'elementbyteordermsb' + info.ByteOrder=lower(data); + case 'anatomicalorientation' + info.AnatomicalOrientation=data; + case 'centerofrotation' + info.CenterOfRotation=sscanf(data, '%lf')'; + case 'offset' + info.Offset=sscanf(data, '%lf')'; + case 'binarydata' + info.BinaryData=lower(data); + case 'compresseddatasize' + info.CompressedDataSize=sscanf(data, '%d')'; + case 'objecttype', + info.ObjectType=lower(data); + case 'transformmatrix' + info.TransformMatrix=sscanf(data, '%lf')'; + case 'compresseddata'; + info.CompressedData=lower(data); + case 'binarydatabyteordermsb' + info.ByteOrder=lower(data); + case 'elementdatafile' + info.DataFile=data; + readelementdatafile=true; + case 'elementtype' + info.DataType=lower(data(5:end)); + case 'headersize' + val=sscanf(data, '%d')'; + if(val(1)>0), info.HeaderSize=val(1); end + otherwise + info.(type)=data; + end +end + +switch(info.DataType) + case 'char', info.BitDepth=8; + case 'uchar', info.BitDepth=8; + case 'short', info.BitDepth=16; + case 'ushort', info.BitDepth=16; + case 'int', info.BitDepth=32; + case 'uint', info.BitDepth=32; + case 'float', info.BitDepth=32; + case 'double', info.BitDepth=64; + otherwise, info.BitDepth=0; +end +if(~isfield(info,'HeaderSize')) + info.HeaderSize=ftell(fid); +end +fclose(fid);