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