使用Objective-C能否仅向PACS系统发送患者人口统计信息?
问题解答
能否仅向PACS发送患者人口统计信息
可以。DICOM标准内置了独立于图像/视频数据的患者信息交互规范,你不需要附带任何像素数据,仅填充患者相关的DICOM标签即可完成发送。
如果是新增/更新患者信息场景,使用患者管理元SOP类即可;如果是关联已有检查同步患者信息,也可以用患者根查询/检索系列的SOP类,都不需要携带图像数据。
适用的传输语法
这类纯元数据的传输不需要压缩,直接用所有PACS都默认兼容的基础非压缩传输语法即可:
- 首选
Explicit VR Little Endian(UID:1.2.840.10008.1.2.1) - 兼容性要求更高的场景可以用
Implicit VR Little Endian(UID:1.2.840.10008.1.2)
不需要使用JPEG等针对像素数据的压缩传输语法。
可参考的代码库
你当前代码用到的DCMTK库就可以直接实现该需求,不需要引入额外依赖:
- 参考
dcmnet模块下的dcmprscu、dpthlscu示例实现,都是专门处理患者层级信息传输的工具代码 - 核心逻辑和你现有发送图像的逻辑基本一致,仅需要替换SOP Class和构造不带像素数据的DICOM数据集即可
核心代码示例
// 仅传输患者信息的核心实现片段 TransferSyntaxes.push_back(UID_LittleEndianExplicitTransferSyntax); if (dicomSCU) { // 添加患者管理相关的Presentation Context,替换原有图像存储的SOP Class dicomSCU->addPresentationContext(UID_PatientManagementMetaSOPClass, TransferSyntaxes); result = dicomSCU->initNetwork(); result = dicomSCU->negotiateAssociation(); if (result == EC_Normal) { DcmDataset* patientDataset = new DcmDataset(); // 患者ID为必填项,必须携带唯一标识 patientDataset->putAndInsertString(DCM_PatientID, "PAT00001"); patientDataset->putAndInsertString(DCM_PatientName, "张三"); patientDataset->putAndInsertString(DCM_PatientSex, "M"); patientDataset->putAndInsertString(DCM_PatientBirthDate, "19900101"); // 发送请求 result = dicomSCU->sendCStoreRequest(patientDataset); delete patientDataset; } }
注意事项
- 发送前需要确认目标PACS已经给你的SCU AE Title开放了患者管理类SOP的访问权限,部分PACS默认仅开放图像存储权限
- 患者ID(DCM_PatientID)是必填字段,不可缺失,否则PACS会直接拒绝请求
内容的提问来源于stack exchange,提问作者Dipesh Pokhrel
相关产品推荐
相关产品推荐

