⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 opendicom.m

📁 matlab数字信号处理工具箱
💻 M
📖 第 1 页 / 共 2 页
字号:
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 + -