微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决使用python将Dicom标签转换为excel时出错

我正在尝试将.dcm文件中的DICOM标签转换并列出到Excel中(使用pydicom),但是在转换时却显示错误

有些标签虽然以DICOM格式包含/显示数据(“ FileMetainformationGroupLength”,“ FileMetainformationVersion”,“ MediaStorageSOPClassUID”,“ MediaStorageSOPInstanceUID”,“ TransferSyntaxUID”),但在Excel文件中却显示“无”。我该如何解决

我该如何解决

这是我的代码

    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','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','CSaimageHeaderType','CSaimageHeaderVersion','CSaimageHeaderInfo','CSASeriesHeaderType','CSASeriesHeaderVersion','CSASeriesHeaderInfo','RequestedProcedureDescription','PerformedProcedureStepStartDate','PerformedProcedureStepStartTime','PerformedProcedureStepID','PerformedProcedureStepDescriptio','EntranceDose','distanceSourcetoEntrance','OrganDose','OrganExposed','AcquisitionContextSequence','ReasonForPerformedProcedureCodeSequence','EntranceDoseinmGy','ReasonfortheRequestedProcedure','CalibrationImage','ViewCodeSequence','ViewModifierCodeSequence','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,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'

解决方法

文件元元素位于FileDataset.file_meta属性中,因为它们并非严格属于SOP实例的一部分,而是在写入DICOM File Format时必需的。

>>> ds.file_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文件)。 https://pypi.org/project/dicom-csv/

安装(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标签作为单独的列(pixel_array数据除外),以及几个其他列,例如FileName,HasPixelArray。

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。