在 DICOM 查询中,QueryRetrieveLevel
是一个关键的属性,用于指示查询的级别,即您希望检索的数据的粒度。不同的 QueryRetrieveLevel
值允许您查询不同级别的医学数据。以下是一些常见的 QueryRetrieveLevel
值:
-
PATIENT(患者级别): 查询将返回匹配给定患者标识符(Patient ID)的所有数据。这可能包括患者的所有影像研究、报告和其他信息。
-
STUDY(研究级别): 查询将返回与给定研究标识符(Study Instance UID)关联的所有数据。这通常包括一个或多个影像系列(Series)以及相关的报告和其他信息。
-
SERIES(系列级别): 查询将返回与给定系列标识符(Series Instance UID)关联的所有数据。这通常包括一个或多个影像(Images)。
-
IMAGE(影像级别): 查询将返回与给定影像标识符(SOP Instance UID)关联的单个影像。
根据您的查询需求,您可以选择适当的 QueryRetrieveLevel
值。例如,如果您想要获取特定患者的所有影像研究,您可以将 QueryRetrieveLevel
设置为 “PATIENT” 并提供患者标识符;如果您只需要特定研究的所有系列,可以将 QueryRetrieveLevel
设置为 “STUDY” 并提供研究标识符,以此类推。
需要注意的是,在 DICOM 查询中,QueryRetrieveLevel 设置为 “PATIENT”(患者级别)时,通常会返回患者的相关描述信息,如患者姓名、患者ID、出生日期等一些Title信息。然而,这并不会直接返回影像图片本身。要检索患者的影像数据,您需要执行更深入的查询,即使用 “PATIENT” 级别来获取患者的研究(Study),然后进一步查询特定研究的系列(Series),最后获取影像(Images)。如果要根据 Accession Number 进行查询,应该使用 StudyRootQueryRetrieveInformationModelFind 作为查询模型,因为 Accession Number 通常与研究(Study)信息关联。
from pydicom import Dataset
from pynetdicom import AE
from pynetdicom.sop_class import PatientRootQueryRetrieveInformationModelFind,StudyRootQueryRetrieveInformationModelFind
# 创建一个 AE(Application Entity)
ae = AE()
# 设置 AE 的参数
ae.add_requested_context(StudyRootQueryRetrieveInformationModelFind)
# 连接到 PACS
assoc = ae.associate('172.18.207.157', 104) # 替换为实际的 PACS IP 和端口
if assoc.is_established:
# 创建查询数据集
ds = Dataset()
ds.QueryRetrieveLevel = 'STUDY'
ds.AccessionNumber = '12345'
ds.PatientID=''
#print(ds)
# 发送查询请求
responses = assoc.send_c_find(ds, StudyRootQueryRetrieveInformationModelFind) # P 表示检索患者信息
for (status, dataset) in responses:
if status and dataset:
# 处理检索到的数据集,可能包含病人信息和影像信息
print(dataset.PatientID,dataset.AccessionNumber)
assoc.release()