如何从 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
(返回的每个标识符为空)
两件事(第二件事没有实际意义,因为第一件事无论如何都行不通):
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 的实现可能发现这个更容易)
当您对私有数据元素进行编码时,无论是在查询 identifier/response 中还是在图像中 header,您都需要包括其创建者;即,对于 (2001,100b),您需要包括 (2001,0010);否则不指定私有数据元素的创建者。
大卫
我正在尝试从 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
(返回的每个标识符为空)
两件事(第二件事没有实际意义,因为第一件事无论如何都行不通):
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 的实现可能发现这个更容易)
当您对私有数据元素进行编码时,无论是在查询 identifier/response 中还是在图像中 header,您都需要包括其创建者;即,对于 (2001,100b),您需要包括 (2001,0010);否则不指定私有数据元素的创建者。
大卫