Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python将Dicom标记转换为excel时出错_Python_Excel_Pydicom - Fatal编程技术网

使用python将Dicom标记转换为excel时出错

使用python将Dicom标记转换为excel时出错,python,excel,pydicom,Python,Excel,Pydicom,我试图将.dcm文件中的DICOM标记转换并列出到Excel(使用pydicom),但转换时显示错误 有些标记在Excel文件中显示“无”,尽管它们包含/显示DICOM格式的数据(“FileMetaInformationGroupLength”、“FileMetaInformationVersion”、“MediaStorageSOPClassUID”、“MediaStorageSOPInstanceUID”、“TransferSyntaxUID”)。我如何解决这个问题 我如何解决这个问题 这是

我试图将.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标签的数据:

(00020000)文件元信息组长度UL:188

(000200001)文件元信息版本OB:b'\x00\x01'

(00020002)媒体存储SOP类UID UI:数字乳腺X射线摄影图像存储-用于演示

(00020003)介质存储SOP实例UID用户界面:1.3.12.2.1107.5.12.7.4405.30000013122104355490600001313

(00020010)传输语法UID用户界面:显式VR小端

(00020012)实现类UID用户界面:1.2.40.0.13.1.1


(0002,0013)实现版本名SH:'dcm4che-1.4.7'

文件元元素位于属性中,因为它们不是SOP实例的严格组成部分,而是写入到SOP实例时所必需的

>>ds.file\u meta.TransferSyntaxUID
'1.2.840.10008.1.2.1'
>>>ds.file_meta.get(“TransferSyntaxUID”)
'1.2.840.10008.1.2.1'

我建议您使用dicom csv python包。它专门设计用于从存储在某个文件夹树中的dicom文件中收集所有可用的元数据(并使用pydicom读取和操作dicom文件)

安装后(
pip install dicom csv
),您可以通过以下方式从某个文件夹的所有dicom图像中收集所有公共dicom标记:

from dicom_csv import join_tree

df = join_tree('path/to/folder', relative=False, verbose=1)
结果pandas.DataFrame将包含不同的DICOM标记作为单独的列(像素数组数据除外),以及几个附加列,如FileName、HasPixelArray