【发布时间】:2020-09-10 13:04:00
【问题描述】:
我正在尝试将 .dcm 文件中的 DICOM 标签转换并列出到 Excel 中(使用 pydicom),但转换时显示错误
一些标签在 Excel 文件中显示“无”,尽管它们包含/显示 DICOM 格式的数据(“FileMetaInformationGroupLength”、“FileMetaInformationVersion”、“MediaStorageSOPClassUID”、“MediaStorageSOPInstanceUID”、“TransferSyntaxUID”)。我该如何解决这个问题?
我该如何解决这个问题?
这是我的代码:
import xlsxwriter
import sys
import pydicom
import os.path
from pydicom.valuerep import PersonName
keywords = ('FileMetaInformationGroupLength', 'FileMetaInformationVersion', 'MediaStorageSOPClassUID', 'MediaStorageSOPInstanceUID', 'TransferSyntaxUID', 'ImplementationClassUID', 'ImplementationVersionName', 'SpecificCharacterSet', 'ImageType', 'SOPClassUID', 'SOPInstanceUID', 'StudyDate', 'SeriesDate', 'AcquisitionDate', 'ContentDate', 'StudyTime', 'SeriesTime', 'AcquisitionTime', 'ContentTime', 'AccessionNumber', 'Modality', 'PresentationIntentType', 'Manufacturer', 'InstitutionName', 'InstitutionAddress', 'ReferringPhysicianName', 'StationName', 'StudyDescription', 'SeriesDescription', 'InstitutionalDepartmentName', 'ManufacturerModelName', 'ReferencedPerformedProcedureStepSequence1item(s)-', 'ReferencedSOPClassUID', 'ReferencedSOPInstanceUID', 'DerivationDescription', 'SourceImageSequence', 'ReferencedSOPClassUID', 'ReferencedSOPInstanceUID', 'SpatialLocationsPreserved', 'AnatomicRegionSequence', 'CodeValue', 'CodingSchemeDesignator', 'CodeMeaning', 'PatientName', 'PatientID', 'PatientBirthDate', 'PatientSex', 'PatientAge', 'Contrast/BolusAgent', 'BodyPartExamined', 'KVP', 'DeviceSerialNumber', 'SoftwareVersions', 'ProtocolName', 'DistanceSourcetoDetector', 'DistanceSourcetoPatient', 'EstimatedRadiographicMagnificatio', 'TableAngle', 'TableType', 'FieldofViewShape', 'FieldofViewDimension', 'ExposureTime', 'X-RayTubeCurrent', 'Exposure', 'ExposureinuAs', 'RectificationType', 'ImagerPixelSpacing', 'Grid', 'FocalSpot', 'AnodeTargetMaterial', 'BodyPartThickness', 'CompressionForce', 'AcquisitionDeviceProcessingDescription', 'AcquisitionDeviceProcessingCode', 'RelativeX-RayExposure', 'TomoLayerHeight', 'PositionerType', 'PositionerPrimaryAngle', 'PositionerSecondaryAngle', 'DetectorPrimaryAngle', 'DetectorSecondaryAngle', 'ShutterShape', 'ShutterLeftVerticalEdge', 'ShutterRightVerticalEdge', 'ShutterUpperHorizontalEdge', 'ShutterLowerHorizontalEdge', 'ViewPosition', 'DetectorConditionsNominalFlag', 'DetectorTemperature', 'DetectorType', 'DetectorConfiguration', 'DetectorDescription', 'DetectorMode', 'DetectorID', 'DateofLastDetectorCalibration', 'TimeofLastDetectorCalibration', 'ExposuresonDetectorSinceLastCa', 'ExposuresonDetectorSinceManufac', 'DetectorTimeSinceLastExposure', 'DetectorActiveTime', 'DetectorActivationOffsetFromExp', 'DetectorBinning', 'DetectorElementPhysicalSize', 'DetectorElementSpacing', 'DetectorActiveShape', 'DetectorActiveDimension', 'DetectorActiveOrigin', 'FieldofViewOrigin', 'FieldofViewRotation', 'FieldofViewHorizontalFlip', 'FilterMaterial', 'FilterThicknessMinimum', 'FilterThicknessMaximum', 'ExposureControlMode', 'ExposureControlModeDescription', 'ExposureStatus', 'ExposureTimeinuS', 'X-RayTubeCurrentinuA', 'PrivateCreator', 'Privatetagdata', 'StudyInstanceUID', 'SeriesInstanceUID', 'StudyID', 'SeriesNumber', 'AcquisitionNumber', 'InstanceNumber', 'PatientOrientation', 'FrameofReferenceUID', 'ImageLaterality', 'ImagesinAcquisition', 'PositionReferenceIndicator', 'ImageComments', 'SamplesperPixel', 'PhotometricInterpretation', 'Rows', 'Columns', 'BitsAllocated', 'BitsStored', 'HighBit', 'PixelRepresentation', 'PixelPaddingValue', 'QualityControlImage', 'BurnedInAnnotation', 'PixelIntensityRelationship', 'PixelIntensityRelationshipSign', 'WindowCenter', 'WindowWidth', 'RescaleIntercept', 'RescaleSlope', 'RescaleType', 'WindowCenter&WidthExplanation', 'BreastImplantPresent', 'PartialView', 'LossyImageCompression', 'PrivateCreator', 'CSAImageHeaderType', 'CSAImageHeaderVersion', 'CSAImageHeaderInfo', 'CSASeriesHeaderType', 'CSASeriesHeaderVersion', 'CSASeriesHeaderInfo', 'RequestedProcedureDescription', 'PerformedProcedureStepStartDate', 'PerformedProcedureStepStartTime', 'PerformedProcedureStepID', 'PerformedProcedureStepDescriptio', 'EntranceDose', 'DistanceSourcetoEntrance', 'OrganDose', 'OrganExposed', 'AcquisitionContextSequence', 'ReasonForPerformedProcedureCodeSequence', 'CodeValue', 'CodingSchemeDesignator', 'CodeMeaning', 'EntranceDoseinmGy', 'PrivateCreator', 'ReasonfortheRequestedProcedure', 'CalibrationImage', 'PrivateCreator', 'Privatetagdata', 'Privatetagdata', 'Privatetagdata', 'ViewCodeSequence', 'CodeValue', 'CodingSchemeDesignator', 'CodeMeaning', 'ViewModifierCodeSequence', 'PrivateCreator', 'ProjectionViewDisplayString', 'PresentationLUTShape')
# ...
dcm_files = [r"C:\Users\akhil\Downloads\CD no.2\CD no.2\MedVision\image\371203\1.3.12.2.1107.5.12.7.4405.30000013122104435475000000004\1.3.12.2.1107.5.12.7.4405.30000013122104435490600001421\img_1_1_1_1.dcm"]
for dcm_file in dcm_files:
ds = pydicom.filereader.dcmread(dcm_file)
workbook = xlsxwriter.Workbook(os.path.basename(dcm_file) + '.xlsx')
worksheet = workbook.add_worksheet()
row = 0
col = 0
for keyword in keywords:
value = ds.get(keyword, "None")
if isinstance(value, list):
value = ", ".join([str(x) for x in value])
elif isinstance(value, PersonName):
value = str(value)
worksheet.write(row, col, keyword)
worksheet.write(row + 1, col, value)
col += 1
workbook.close()
这是来自 DICOM 标签的数据:
(0002, 0000) 文件元信息组长度 UL: 188
(0002, 0001) 文件元信息版本 OB: b'\x00\x01'
(0002, 0002) 媒体存储 SOP 类 UID UI:数字乳腺 X 射线图像存储 - 用于演示
(0002, 0003) 媒体存储 SOP 实例 UID UI:1.3.12.2.1107.5.12.7.4405.30000013122104435490600001313
(0002, 0010) 传输语法 UID UI:显式 VR Little Endian
(0002, 0012) 实现类 UID UI:1.2.40.0.13.1.1
(0002, 0013) 实施版本名称 SH: 'dcm4che-1.4.7'
【问题讨论】: