1

我使用 pydicom 读取 dicom 文件(患者姓名),但我所有的 dicom 文件的名称都为 i34、i67 等(这些名称没有特定的顺序或顺序)。我的问题:我有一个 txt 文件中的患者姓名列表,我想用所有 dicom 文件搜索此 txt 文件中的每个患者姓名,在 dicom 文件中查找他们的 PatientName(对于那些不熟悉的人,每个 dicom 文件有许多患者的信息,其中之一是 PatientName)

示例:

txt 文件:约翰·乔治·林戈·保罗

Dicom 文件:i54 i98 i64 i12

我想要什么:选择 John 并搜索 i54、i98、i64、i12 以查找 PatientName 匹配项。并为 txt 文件中的每个名称执行此操作。希望我说清楚了。提前谢谢!

编辑

我尝试了这段代码但没有用

import dicom
import os

dir = "/path/to/dir_where_dicom_file_are"
txt = open('/path/to/txt_with_patientsnames.txt','r')
for line in txt:
    for sub, dirs, files in os.walk(dir):
        names = line.strip()
        for dcm in files:
           ds = dicom.read_file(dir+dcm) #necessary for read dicom files                            
           patient = ds.PatientName
           if names in patient:
           #do something

我采集了 20 个 dicom 图像和 20 个名称的样本。我知道这个样本只有一个 dicom 文件属于一个患者姓名,所以我的输出应该只有一个匹配项吧?但我从中得到了 20 个匹配结果。怎么了?

4

2 回答 2

1

你也可以考虑从不同的角度来解决这个问题。您可以将 DICOM 文件组织到一个目录层次结构中,该层次结构在其中一个级别包含 PatientName。这将简化快速定位相关文件的过程。可以帮助您完成此任务的一个脚本是dicomsort

使用该工具,下面的命令会将输入目录中的 DICOM 文件排序到 PatientName > StudyDate > SeriesDescription-InstanceNumber 命名的目录结构中。我经常把这样的排序作为后续处理的前提。当然,如果您正在处理一个非常大的数据集,并且只需要访问其中的一小部分,这将是一个次优的解决方案,但我认为它可能对您的情况很方便。

dicomsort data sorted/%PatientName/%StudyDate/%SeriesDescription-%InstanceNumber.dcm
于 2019-11-26T23:37:16.510 回答
1

问题是逻辑(更具体地说是缺乏逻辑)

dir = "/path/where/dcm/files/are"
arq = open('path/where/file with pacient names are/patient.txt','r')
for linha in arq:
     c = linha.strip()
     for sub,p,a in os.walk(dir):
        for dcm in a:
          ds = dicom.read_file(dir+dcm)
          pctname = ds.PatientName           
          if c in pctname:
          #do something

老实说,我一开始不知道出了什么问题。

于 2017-07-05T03:20:56.467 回答