📄 opendicom.m
字号:
function [HDR,H1,h2]=opendicom(arg1,arg2,arg3,arg4,arg5,arg6)
% OPENDICOM is an auxillary function to SOPEN for
% opening of DICOM files for reading ECG waveform data
%
% Use SOPEN instead of OPENDICOM
%
% See also: fopen, SOPEN,
%
% References:
% [1] http://www.dclunie.com/dicom-status/status.html#BaseStandard2003
% [2] http://medical.nema.org/Dicom/supps/sup30_lb.pdf
% This program is free software; you can redistribute it and/or
% modify it under the terms of the GNU General Public License
% as published by the Free Software Foundation; either version 2
% of the License, or (at your option) any later version.
%
% This program is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% GNU General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with this program; if not, write to the Free Software
% Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
% $Revision: 1.1 $
% $Id: opendicom.m,v 1.1 2004/09/12 15:47:08 schloegl Exp $
% (C) 1997-2002, 2004 by Alois Schloegl <a.schloegl@ieee.org>
% This is part of the BIOSIG-toolbox http://biosig.sf.net/
if nargin<2,
arg2='rb';
elseif ~any(arg2=='b');
arg2= [arg2,'b']; % force binary open.
end;
PERMISSION = arg2;
if isstruct(arg1)
HDR=arg1;
FILENAME=HDR.FileName;
else
HDR.FileName=arg1;
fprintf(2,'Warning OPENDICOM: the use of OPENDICOM is discouraged (OPENDICOM might disappear); please use SOPEN instead.\n');
end;
if any(PERMISSION=='r'),
% Default Settings
HDR.FLAG.implicite_VR = 1;
HDR.Endianity = 'ieee-le';
% Open file
HDR.FILE.FID = fopen(HDR.FileName,'r','ieee-le');
id = fread(HDR.FILE.FID,132,'uchar');
if ~all(id' == [zeros(1,128),abs('DICM')])
fseek(HDR.FILE.FID,0,'bof');
else
HDR.FLAG.implicite_VR = 0;
end;
count = 0;
while ~feof(HDR.FILE.FID);
TAG = fread(HDR.FILE.FID,2,'uint16');
TAG = [2^16,1]*TAG;
if HDR.FLAG.implicite_VR, % implicite VR
LEN = fread(HDR.FILE.FID,1,'uint32');
else % Explicite VR
VR = fread(HDR.FILE.FID,2,'uint16');
ix = ['OB';'OW';'OF';'SQ';'UT';'UN']*[1;256];
if ~any(VR(1)==ix)
LEN = VR(2);
else
LEN = fread(HDR.FILE.FID,1,'uint32');
end;
end;
if (LEN==hex2dec('FFFFFFFF')),
LEN = -1;
end;
%LEN = fread(HDR.FILE.FID,1,'uint32');
count = count + 1;
% fprintf(1,'%03i\t%08x\t%04i\n',count,TAG,LEN);
%[count,LEN],dec2hex(TAG),
% read Value
if 0,
elseif (LEN>100000),
status=fseek(HDR.FILE.FID,LEN,0);
if status,
fclose(HDR.FILE.FID);
return;
end;
elseif (LEN<0),
fclose(HDR.FILE.FID);
return;
elseif (TAG==hex2dec('00000002')),
[VAL,c] = fread(HDR.FILE.FID,LEN,'uchar');
HDR.DICOM.TAG00000002 = char(VAL');
elseif (TAG==hex2dec('0000003a')),
[VAL,c] = fread(HDR.FILE.FID,1,'uint8');
HDR.DICOM.TAG0000003a = VAL;
elseif (TAG==hex2dec('00020000')),
[VAL,c] = fread(HDR.FILE.FID,LEN,'uchar');
HDR.DICOM.GroupLength = VAL';
elseif (TAG==hex2dec('00020001')),
[VAL,c] = fread(HDR.FILE.FID,LEN,'uchar');
HDR.DICOM.FileMetaInformationVersion = VAL;
elseif (TAG==hex2dec('00020002')),
[VAL,c] = fread(HDR.FILE.FID,LEN,'uchar');
HDR.DICOM.UID = char(VAL');
elseif (TAG==hex2dec('00020003')),
[VAL,c] = fread(HDR.FILE.FID,LEN,'uchar');
HDR.DICOM.MediaStorage_SOP_InstanceUID = VAL';
elseif (TAG==hex2dec('00020010')),
[VAL,c] = fread(HDR.FILE.FID,LEN,'uchar');
HDR.DICOM.TransferSyntaxUID = char(VAL');
elseif (TAG==hex2dec('00020012')),
[VAL,c] = fread(HDR.FILE.FID,LEN,'uchar');
HDR.DICOM.ImplementationClassUID = char(VAL');
elseif (TAG==hex2dec('00020013')),
[VAL,c] = fread(HDR.FILE.FID,LEN,'uchar');
HDR.DICOM.ImplementationVersionName = char(VAL');
elseif (TAG==hex2dec('00080008')),
[VAL,c] = fread(HDR.FILE.FID,[1,LEN],'uchar');
HDR.DICOM.ImageType = char(VAL);
elseif (TAG==hex2dec('00080012')),
[VAL,c] = fread(HDR.FILE.FID,[1,LEN],'uchar');
HDR.DICOM.InstanceCreationDate = char(VAL(VAL~=abs('.')));
elseif (TAG==hex2dec('00080013')),
[VAL,c] = fread(HDR.FILE.FID,[1,LEN],'uchar');
HDR.DICOM.InstanceCreationTime = char(VAL(VAL~=abs('.')));
elseif (TAG==hex2dec('00080014')),
[VAL,c] = fread(HDR.FILE.FID,[1,LEN],'uchar');
HDR.DICOM.Instance_CreatorUID = char(VAL);
elseif (TAG==hex2dec('00080016')),
[VAL,c] = fread(HDR.FILE.FID,[1,LEN],'uchar');
HDR.DICOM.SOP_ClassUID = char(VAL);
elseif (TAG==hex2dec('00080018')),
[VAL,c] = fread(HDR.FILE.FID,[1,LEN],'uchar');
HDR.DICOM.SOP_InstanceUID = char(VAL);
elseif (TAG==hex2dec('00080020')),
[VAL,c] = fread(HDR.FILE.FID,[1,LEN],'uchar');
HDR.DICOM.StudyDate = char(VAL(VAL~=abs('.')));
elseif (TAG==hex2dec('00080021')),
[VAL,c] = fread(HDR.FILE.FID,[1,LEN],'uchar');
HDR.DICOM.SeriesDate = char(VAL(VAL~=abs('.')));
elseif (TAG==hex2dec('00080022')),
[VAL,c] = fread(HDR.FILE.FID,[1,LEN],'uchar');
HDR.DICOM.AcquisitionDate = char(VAL(VAL~=abs('.')));
elseif (TAG==hex2dec('00080023')),
[VAL,c] = fread(HDR.FILE.FID,[1,LEN],'uchar');
HDR.DICOM.ContentDate = char(VAL(VAL~=abs('.')));
elseif (TAG==hex2dec('00080024')),
[VAL,c] = fread(HDR.FILE.FID,[1,LEN],'uchar');
HDR.DICOM.OverlayDate = char(VAL(VAL~=abs('.')));
elseif (TAG==hex2dec('00080025')),
[VAL,c] = fread(HDR.FILE.FID,[1,LEN],'uchar');
HDR.DICOM.CurveDate = char(VAL(VAL~=abs('.')));
elseif (TAG==hex2dec('0008002A')),
[VAL,c] = fread(HDR.FILE.FID,[1,LEN],'uchar');
HDR.DICOM.AcquisitionDateTime = char(VAL(VAL~=abs('.')));
elseif (TAG==hex2dec('00080030')),
[VAL,c] = fread(HDR.FILE.FID,[1,LEN],'uchar');
HDR.DICOM.StudyTime = char(VAL(VAL~=abs('.')));
elseif (TAG==hex2dec('00080031')),
[VAL,c] = fread(HDR.FILE.FID,[1,LEN],'uchar');
HDR.DICOM.SeriesTime = char(VAL(VAL~=abs('.')));
elseif (TAG==hex2dec('00080032')),
[VAL,c] = fread(HDR.FILE.FID,[1,LEN],'uchar');
HDR.DICOM.AcquisitionTime = char(VAL(VAL~=abs('.')));
elseif (TAG==hex2dec('00080033')),
[VAL,c] = fread(HDR.FILE.FID,[1,LEN],'uchar');
HDR.DICOM.ContentTime = char(VAL(VAL~=abs('.')));
elseif (TAG==hex2dec('00080034')),
[VAL,c] = fread(HDR.FILE.FID,[1,LEN],'uchar');
HDR.DICOM.OverlayTime = char(VAL(VAL~=abs('.')));
elseif (TAG==hex2dec('00080035')),
[VAL,c] = fread(HDR.FILE.FID,[1,LEN],'uchar');
HDR.DICOM.CurveTime = char(VAL(VAL~=abs('.')));
elseif (TAG==hex2dec('00080050')),
[VAL,c] = fread(HDR.FILE.FID,[1,LEN],'uchar');
HDR.DICOM.AccessionNumber = char(VAL);
elseif (TAG==hex2dec('00080060')),
[VAL,c] = fread(HDR.FILE.FID,[1,LEN],'uchar');
HDR.DICOM.Modality = char(VAL);
elseif (TAG==hex2dec('00080070')),
[VAL,c] = fread(HDR.FILE.FID,[1,LEN],'uchar');
HDR.DICOM.Manufacturer = char(VAL);
elseif (TAG==hex2dec('00080080')),
[VAL,c] = fread(HDR.FILE.FID,[1,LEN],'uchar');
HDR.DICOM.InstitutionName = char(VAL);
elseif (TAG==hex2dec('00080090')),
[VAL,c] = fread(HDR.FILE.FID,[1,LEN],'uchar');
HDR.DICOM.ReferringPhysiciansName = char(VAL);
elseif (TAG==hex2dec('00081010')),
[VAL,c] = fread(HDR.FILE.FID,[1,LEN],'uchar');
HDR.DICOM.StationName = char(VAL);
elseif (TAG==hex2dec('00081030')),
[VAL,c] = fread(HDR.FILE.FID,[1,LEN],'uchar');
HDR.DICOM.StudyDescription = char(VAL);
elseif (TAG==hex2dec('00081040')),
[VAL,c] = fread(HDR.FILE.FID,[1,LEN],'uchar');
HDR.DICOM.InstitutionalDepartmentName = char(VAL);
elseif (TAG==hex2dec('00081050')),
[VAL,c] = fread(HDR.FILE.FID,[1,LEN],'uchar');
HDR.DICOM.PerformingPhysiciansName = char(VAL);
elseif (TAG==hex2dec('00081090')),
[VAL,c] = fread(HDR.FILE.FID,[1,LEN],'uchar');
HDR.DICOM.ManufacturesModelName = char(VAL);
elseif (TAG==hex2dec('0008114a')),
[VAL,c] = fread(HDR.FILE.FID,[1,LEN],'uchar');
HDR.DICOM.ReferenceInstantSequence = char(VAL);
elseif (TAG==hex2dec('0008114b')),
[VAL,c] = fread(HDR.FILE.FID,[1,LEN],'uchar');
HDR.DICOM.ReferenceDescription = char(VAL);
elseif (TAG==hex2dec('00100010')),
[VAL,c] = fread(HDR.FILE.FID,[1,LEN],'uchar');
HDR.Patient.Name = char(VAL);
elseif (TAG==hex2dec('00100020')),
[VAL,c] = fread(HDR.FILE.FID,[1,LEN],'uchar');
HDR.PID = char(VAL);
elseif (TAG==hex2dec('00100030')),
[VAL,c] = fread(HDR.FILE.FID,[1,LEN],'uchar');
HDR.DICOM.BirthDate = char(VAL(VAL~=abs('.')));
elseif (TAG==hex2dec('00100030')),
[VAL,c] = fread(HDR.FILE.FID,[1,LEN],'uchar');
HDR.DICOM.BirthTime = char(VAL(VAL~=abs('.')));
elseif (TAG==hex2dec('00100040')),
[VAL,c] = fread(HDR.FILE.FID,[1,LEN],'uchar');
HDR.Patient.Sex = char(VAL);
elseif (TAG==hex2dec('00181000')),
[VAL,c] = fread(HDR.FILE.FID,[1,LEN],'uchar');
HDR.DICOM.DeviceSerialNumber = char(VAL);
elseif (TAG==hex2dec('00181020')),
[VAL,c] = fread(HDR.FILE.FID,[1,LEN],'uchar');
HDR.DICOM.SoftwareVersion = char(VAL);
elseif (TAG==hex2dec('00181061')),
[VAL,c] = fread(HDR.FILE.FID,[1,LEN],'uchar');
HDR.DICOM.TriggerSource = char(VAL);
elseif (TAG==hex2dec('00181067')),
[VAL,c] = fread(HDR.FILE.FID,[1,LEN],'uchar');
HDR.DICOM.ImageTriggerDelay = char(VAL);
elseif (TAG==hex2dec('00181068')),
[VAL,c] = fread(HDR.FILE.FID,[1,LEN],'uchar');
HDR.DICOM.MultiplexGroupTimeOffset = char(VAL);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -