我正在使用dcm4che3库构建DICOM客户端,这让我有点困惑如何创建dicom查询。我在Association
类上调用CFIND方法。
我已经找到了如何创建基本查询的方法(例如,按PatientID进行搜索):
Attributes query = new Attributes();
query.setString(Tag.PatientID, VR.LO, "12345");
到目前为止很好。
但是,当我想使用ScheduledProcedureStepStartDate
之类的东西进行查询时,我必须使用一个子查询来创建一个Sequence,如下所示:
Attributes query = new Attributes();
Sequence sequence = query.newSequence(Tag.ScheduledProcedureStepSequence, 1);
Attributes subQuery = new Attributes();
subQuery.setDate(Tag.ScheduledProcedureStepStartDate, VR.DA, date);
sequence.add(subQuery);
我不太了解DICOM格式。因此,我通过反复试验很清楚地发现了这一点,并使用了另一个DICOM客户端仿真器并拦截了它的查询以尝试弄清楚它是如何工作的。
因此,我有3个问题:
ScheduledProcedureStepStartDate
。ScheduledProcedureStepSequence
-> Modality
)查询时,它似乎不起作用。有什么技巧可以使这项工作成功吗?答案 0 :(得分:0)
- 如何在两个日期之间(即使用“从”和“到”日期) 之间查询
ScheduledProcedureStepStartDate
。
Scheduled Procedure Step Start Date
(0040,0002)元素是Scheduled Procedure Step Sequence
(0040,0100)的一部分。这支持Combined Range Matching。
日期和时间的匹配键组合在一起。例如,学习日期“ 20060705-20060707”和学习时间“ 1000-1800”将匹配7月5日上午10点至7月7日下午6点的时间段,而不是三个时间段,即每个上午10点至下午6点的时间段7月5日,7月6日和7月7日。
因此,您可以指定两个用短划线(-
分隔的日期,以搜索两个日期之间的 。上面的引用中给出了示例。
DICOM元素层次结构非常简单;呼叫者可以根据需要轻松创建序列。在大多数情况下,MWL查询只包含您提到的一个序列。
- 在创建查询时,是否可以让dcm4che3库弄清楚如何制作序列,所以我只需在查询中指定所需的Tag,VR和值?
您要询问的内容需要对基本数据集类进行包装。使用最广泛的工具包不支持在DICOM数据集上包装,以简化序列处理。我知道很少。我不是该工具箱的专家;但是AFAIK,dcm4che不存在这种包装器。您必须自己创建和管理序列元素。
- 当我使用Sequence元素(例如
ScheduledProcedureStepSequence
->Modality
)查询时,它似乎不起作用。有什么技巧可以使这项工作成功吗?
这还不清楚; “ 似乎不起作用”没有解释。序列元素包含一个Item
。 Item
包含其他元素。每个Item
都可以再次视为数据集。
以下是查询的外观:
罗尼(Roni)的article对您可能会有帮助。那里的源代码未使用您的工具包;希望你能有个主意。