在 DICOM 服务器中搜索元数据
Searching a DICOM server for metadata
我想搜索 DICOM 服务器。例如,如果用户输入要搜索的患者 ID,那么我的应用程序会使用与该 ID 相关的所有元数据填充 table,例如 ID、姓名、登录号 e.tc。如果 dicom 服务器中存在研究 ID,如何使用 dcm4chee 套件完成此操作。 –
您可以使用 dcm4che3 工具 dcm4che-tool-findscu
。此代码向您展示如何针对 PACS(或任何将 C-FIND 实现为 SCP)执行 C-FIND。
FindSCU.java
非常清楚,花点时间,不要错过通过 Apache Commons CLI 代码来理解来自控制台的输入。大多数 CLI 管理代码不在此项目中,但您可以在 dcm4che3 工具 dcm4che-tool-common
项目中找到它,org.dcm4che3.tool.common.CLIUtils.java
class.
考虑以下注意事项:
- 指定Query/Retrieve的搜索级别。您可以使用多个搜索级别来将属性匹配到 PACS 中。如果您查看
FindSCU.java
的 260:265 行,您会发现您可以管理四个不同的级别:PATIENT|STUDY|SERIES|IMAGE
。这将指示 C-FIND SCP 如何搜索匹配的属性。
- 告诉C-FIND SCP你想要检索什么属性。如果您想搜索要稍后检索的研究,则必须请求
0020, 000D
Study InstanceUID 标签。
- 当然,添加您要填充的所有属性 table。
- 使用检索到的
0020, 000D
Study InstanceUID标签值进行C-GET/C-MOVE操作。
您可以看到如何配置属性键以将 C-FIND SCU 执行到 CLIUtils.java
class 中,它是 dcm4che3 工具的一部分 dcm4che-tool-common
项目。参见 CLIUtils.addAttributes(Attributes, String[])
。
希望对您有所帮助!
编辑
由于您评论说您正在使用 dcm4che2 并且您已经有了 DicomObject
搜索结果,如果您想从此 DicomObject
获取元数据,您必须先解析它,使用 DicomInputStream
,然后你可以使用 BasiDicomObject
中的 getXXXX(Tag)
,像这样:
DicomObject dcmObj;
DicomInputStream dis = null;
dis = new DicomInputStream(file);
dcmObj = dis.readDicomObject();
String someVar = dcmObj.getString(Tag.SeriesInstanceUID);
请记住,有些属性在序列内部,因此您必须先搜索它。
您也可以查看 dcm4che-tool-dcm2txt
,您会看到 Dcm2Txt.java
并且在第 170 行等处,有如何解析整个 dicom 对象。
如果您需要一些关于 DICOM 网络协议的一般描述,您可以阅读“Understanding DICOM with Orthanc" guide, and more specifically the section about C-Find.
我想搜索 DICOM 服务器。例如,如果用户输入要搜索的患者 ID,那么我的应用程序会使用与该 ID 相关的所有元数据填充 table,例如 ID、姓名、登录号 e.tc。如果 dicom 服务器中存在研究 ID,如何使用 dcm4chee 套件完成此操作。 –
您可以使用 dcm4che3 工具 dcm4che-tool-findscu
。此代码向您展示如何针对 PACS(或任何将 C-FIND 实现为 SCP)执行 C-FIND。
FindSCU.java
非常清楚,花点时间,不要错过通过 Apache Commons CLI 代码来理解来自控制台的输入。大多数 CLI 管理代码不在此项目中,但您可以在 dcm4che3 工具 dcm4che-tool-common
项目中找到它,org.dcm4che3.tool.common.CLIUtils.java
class.
考虑以下注意事项:
- 指定Query/Retrieve的搜索级别。您可以使用多个搜索级别来将属性匹配到 PACS 中。如果您查看
FindSCU.java
的 260:265 行,您会发现您可以管理四个不同的级别:PATIENT|STUDY|SERIES|IMAGE
。这将指示 C-FIND SCP 如何搜索匹配的属性。 - 告诉C-FIND SCP你想要检索什么属性。如果您想搜索要稍后检索的研究,则必须请求
0020, 000D
Study InstanceUID 标签。- 当然,添加您要填充的所有属性 table。
- 使用检索到的
0020, 000D
Study InstanceUID标签值进行C-GET/C-MOVE操作。
您可以看到如何配置属性键以将 C-FIND SCU 执行到 CLIUtils.java
class 中,它是 dcm4che3 工具的一部分 dcm4che-tool-common
项目。参见 CLIUtils.addAttributes(Attributes, String[])
。
希望对您有所帮助!
编辑
由于您评论说您正在使用 dcm4che2 并且您已经有了 DicomObject
搜索结果,如果您想从此 DicomObject
获取元数据,您必须先解析它,使用 DicomInputStream
,然后你可以使用 BasiDicomObject
中的 getXXXX(Tag)
,像这样:
DicomObject dcmObj;
DicomInputStream dis = null;
dis = new DicomInputStream(file);
dcmObj = dis.readDicomObject();
String someVar = dcmObj.getString(Tag.SeriesInstanceUID);
请记住,有些属性在序列内部,因此您必须先搜索它。
您也可以查看 dcm4che-tool-dcm2txt
,您会看到 Dcm2Txt.java
并且在第 170 行等处,有如何解析整个 dicom 对象。
如果您需要一些关于 DICOM 网络协议的一般描述,您可以阅读“Understanding DICOM with Orthanc" guide, and more specifically the section about C-Find.