0

我正在尝试从 dicom 服务器读取私有供应商标签。我能够成功读取的唯一标签是标准 DICOM tagFromNames 标签是 2001,100b,在我的示例文件集中,它们的标题中肯定有该条目

这是调用CFIND请求的代码

SpecificCharacterSet specificCharacterSet = new SpecificCharacterSet((String[])null);

        AttributeList identifier = new AttributeList();

        //specify attributes to retrieve and pass in any search criteria
        //query root of "study" to retrieve studies
        studies.removeAllElements();

        identifier.putNewAttribute(TagFromName.QueryRetrieveLevel).addValue("STUDY"); 
        identifier.putNewAttribute(TagFromName.PatientName,specificCharacterSet).addValue("*");
        identifier.putNewAttribute(TagFromName.PatientID,specificCharacterSet);
        identifier.putNewAttribute(TagFromName.StudyID);
        identifier.putNewAttribute(TagFromName.PatientAge);
        identifier.putNewAttribute(TagFromName.PatientSex);
        identifier.putNewAttribute(TagFromName.ModalitiesInStudy);
        identifier.putNewAttribute(TagFromName.AccessionNumber);
        identifier.putNewAttribute(TagFromName.StudyInstanceUID);
        identifier.putNewAttribute(TagFromName.StudyDescription);
        identifier.putNewAttribute(TagFromName.StudyDate).addValue(date);
        identifier.putNewAttribute(TagFromName.StudyTime);

        AttributeTag at = new com.pixelmed.dicom.AttributeTag("0x2001,0x100b");
        identifier.putNewAttribute(at);

        IdentifierHandler ih = new IdentifierHandler(){
            @Override
            public void doSomethingWithIdentifier(AttributeList id) throws DicomException {
               studies.add(new Study(id, reportfolder));

//Attempt to read private dicom tag from received identifier
                    System.out.println(id.get(at));
            }

        };
        new FindSOPClassSCU(serv.getAddress(),serv.getPort(), serv.getAetitle(), "ISPReporter",SOPClass.StudyRootQueryRetrieveInformationModelFind,identifier,ih);

但是,我的查询输出接收到与日期匹配的 7 个标识符,但是当我尝试读取 2001,100b 标记时,我得到的错误是:

DicomException:字典中没有 (0x2001,0x100b) 这样的数据元素

如果我改用这条线

identifier.put(new com.pixelmed.dicom.TextAttribute(at) {
                 public int getMaximumLengthOfEntireValue() {  return 20; }
             });

然后我得到:

null
null
null
null
null
null
null

(返回的每个标识符都为空)

4

1 回答 1

2

两件事(第二件事没有实际意义,因为第一件事无论如何这都行不通):

  1. C-FIND SCP 查询先前从 DICOM 图像标题中提取并索引的数据元素子集的数据库 - 如所述,实际上仅索引图像中存在的(小)数据元素子集;该标准在查询信息模型中只需要很少的内容,而 IHE 计划工作流 (SWF) 配置文件则更多(查询图像事务表 4.14-1;实施者可以索引每个数据元素(或至少每个标准数据元素),但这很少这样做(PixelMed 没有,尽管我已经考虑自适应地这样做,因为现在 hsqldb 支持添加列,因为遇到数据元素;基于 NoSQL 的实现可能会发现这更容易)

  2. When you encode a private data element, whether it be in a query identifier/response, or in an image header, you need to include its creator; i.e., for (2001,100b), you need to include (2001,0010); otherwise the creator of the private data element is not specified.

David

于 2020-04-09T12:14:48.440 回答