“具体问题具体分析。” --- 【佚名】
“ 在新领域,始终保持对前人知识体系和成熟技术手段的敬畏和学习。 ”---- 【张立峰 ^ .^】
参考资料:
1.[1] DICOM的常用Tag分类和说明
DICOM (Digital imaging and Communications in Medicine):
医学影像成像和通讯标准。
基于 DICOM3.0
标准的医学图像中,每一张图像都携带大量信息,可分为四类:
Patient
Study
Series
Image
每一项信息都可以用 DICOM TAG
标识,DICOM TAG
由两个十六进制数组成,即(Group, Element)
。如(0010, 0010)
表示的是 Patient' s name’
.
每一项信息被包装成最基本的单元:Data Element
(数据元素)。 每一个Data Element
由四部分组成:
-
DICOM TAG
: 存储该项信息的标识 -
VR(value representation)
:存储描述该项信息的数据类型。 -
value length
: 存储描述该项信息的数据长度 -
value
: 存储描述该项信息的数据值
1. VR的简单分类
2. DICOM TAG分类和说明
-
Patient Tag
-
Study Tag
-
Series Tag
-
Image Tag
3. 使用 pydicom 读取dicom 文件
in:
import dicom
import pylab
in:
ds = dicom.read_file('P01-0000.dcm') # 加载 dicom 文件
in:
print(ds.dir()) # 打印所有 DICOM TAG 名
out:
['AccessionNumber', 'AcquisitionDate', 'AcquisitionMatrix', 'AcquisitionNumber', 'AcquisitionTime', 'AngioFlag', 'BitsAllocated', 'BitsStored', 'CardiacNumberOfImages', 'Columns', 'ContentDate', 'ContentTime', 'DerivationDescription', 'DeviceSerialNumber', 'EchoNumbers', 'EchoTime', 'EchoTrainLength', 'FlipAngle', 'FrameOfReferenceUID', 'HeartRate', 'HighBit', 'ImageComments', 'ImageOrientationPatient', 'ImagePositionPatient', 'ImageType', 'ImagedNucleus', 'ImagesInAcquisition', 'ImagingFrequency', 'InPlanePhaseEncodingDirection', 'InstanceCreationDate', 'InstanceCreationTime', 'InstanceNumber', 'InstitutionAddress', 'InstitutionName', 'LargestImagePixelValue', 'LargestPixelValueInSeries', 'MRAcquisitionType', 'MagneticFieldStrength', 'Manufacturer', 'ManufacturerModelName', 'Modality', 'NominalInterval', 'NumberOfAverages', 'NumberOfPhaseEncodingSteps', 'PatientAge', 'PatientBirthDate', 'PatientID', 'PatientName', 'PatientPosition', 'PatientSex', 'PatientSize', 'PatientWeight', 'PercentPhaseFieldOfView', 'PercentSampling', 'PerformedProcedureStepDescription', 'PerformedProcedureStepID', 'PerformedProcedureStepStartDate', 'PerformedProcedureStepStartTime', 'PhotometricInterpretation', 'PixelBandwidth', 'PixelData', 'PixelRepresentation', 'PixelSpacing', 'PositionReferenceIndicator', 'ProtocolName', 'ReferringPhysicianName', 'RepetitionTime', 'Rows', 'SAR', 'SOPClassUID', 'SOPInstanceUID', 'SamplesPerPixel', 'ScanOptions', 'ScanningSequence', 'SequenceName', 'SequenceVariant', 'SeriesDate', 'SeriesDescription', 'SeriesInstanceUID', 'SeriesNumber', 'SeriesTime', 'SliceLocation', 'SliceThickness', 'SmallestImagePixelValue', 'SmallestPixelValueInSeries', 'SoftwareVersions', 'SpecificCharacterSet', 'StudyDate', 'StudyDescription', 'StudyID', 'StudyInstanceUID', 'StudyTime', 'TransmitCoilName', 'TriggerTime', 'VariableFlipAngleFlag', 'WindowCenter', 'WindowWidth', 'dBdt']
in:
print(ds.dir('pat')) # 打印包含 'pat' 的 DICOM TAG
out:
['ImageOrientationPatient', 'ImagePositionPatient', 'PatientAge', 'PatientBirthDate', 'PatientID', 'PatientName', 'PatientPosition', 'PatientSex', 'PatientSize', 'PatientWeight']
in:
print(ds.PatientName, ds.PatientSex, ds.PatientSize, ds.PatientWeight ) # 打印 DICOM TAG 相应的属性值
out:
01^AC M 1.72 89
in:
print(ds.data_element('PatientID')) # 打印一个完整的数据元素,包括 DICOMTAG编码值(Group, Element), VR, Value
out:
(0010, 0020) Patient ID LO: 'AW959532241.111.1212659242'
in:
print(ds.data_element('PatientID').VR, ds.data_element('PatientID').value)
out:
LO AW959532241.111.1212659242
in:
pixel_bytes = ds.PixelData # 原始二进制文件
pix = ds.pixel_array # 像素值矩阵
pix
out:
array([[ 88, 86, 84, ..., 28, 41, 50],
[115, 110, 101, ..., 44, 62, 75],
[134, 135, 134, ..., 31, 41, 51],
...,
[ 54, 45, 36, ..., 63, 62, 63],
[ 47, 39, 31, ..., 78, 72, 71],
[ 40, 34, 26, ..., 96, 83, 77]], dtype=uint16)
in:
pix.shape
out:
(256, 216)
in:
pylab.imshow(pix, cmap=pylab.cm.bone) # cmap 表示 colormap,可以是设置成不同值获得不同显示效果