如何从 pixelmed 获取 C_FIND 中的私人供应商属性标签?

How to get private vendor attribute tag in C_FIND from pixelmed?

我正在尝试从 dicom 服务器读取私人供应商标签。 我能够成功读取的唯一标签是标准的 DICOM tagFromNames 标签是 2001,100b,在我的示例文件集中,他们的 header

中肯定有该条目

这里是调用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

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

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

  1. C-FIND SCP 查询先前从 DICOM 图像 header 中提取并编入索引的数据元素子集的数据库 - 仅存在(小)数据元素子集如前所述,图像中的内容实际上已编入索引;该标准要求在 Query Information Models, and the IHE Scheduled Workflow (SWF) profile a few more (Query Images Transaction Table 4.14-1 中很少;实现者可以索引每个数据元素(或至少每个标准数据元素),但很少这样做(PixelMed 没有,尽管我已经考虑自适应地做它,因为现在 hsqldb 支持添加列,遇到数据元素;基于 NoSQL 的实现可能发现这个更容易)

  2. 当您对私有数据元素进行编码时,无论是在查询 identifier/response 中还是在图像中 header,您都需要包括其创建者;即,对于 (2001,100b),您需要包括 (2001,0010);否则不指定私有数据元素的创建者。

大卫