dcm4che获取私有TAG的VR(不使用字典)

时间:2015-06-05 10:36:10

标签: dicom dcm4che

我正在尝试检查是否有办法从私有DICOM标记中提取VR(值表示)。

我知道DicomObject.vROf:

http://www.dcm4che.org/docs/dcm4che2-apidocs/org/dcm4che2/data/DicomObject.html#vrOf(int)

如果没有为此私有TAGS配置VRMap,则

返回UN!我想做点什么:

vR = dcmObj4.vrOf(0X0051100b).toString();
    if("LO".equals(vR)) {
        log.info("VR of acquisitionMatrix is: " + vR);
        acquisitionMatrixX = dcmObj4.getString(0X0051100b, VR.LO);
    } else if ("SH".equals(vR)) {
        log.info("VR of acquisitionMatrix is: " + vR);
        acquisitionMatrixX = dcmObj4.getString(0X0051100b, VR.SH);
    } else if ("UN".equals(vR)) {
        log.info("VR of acquisitionMatrix is: " + vR);
        acquisitionMatrixX = dcmObj4.getString(0X0051100b, VR.UN);
    } else {
        log.info("VR of acquisitionMatrix is OTHER: " + vR);
    }

事实上,我正在尝试解析来自特定供应商/型号的dicom文件,我可以看到,即使是相同的供应商/型号组合,也可以在同一个私人TAG上使用不同的VR!

我可以动态提取私有dicom标签的VR吗?

2 个答案:

答案 0 :(得分:1)

嗯,Dicom Standard Private Tags中有规则可以避免此类冲突。

请参阅私有创建者/标签的使用说明: Overview Private Tag Elements

答案 1 :(得分:1)

是的,您应该能够提取私有标记中的值。请注意,私人创建者数据元素VR始终为“LO”。当VR未知时,Value Field对Little / Big Endian字节排序不敏感,不应为'byteswapped'。因此,您可以假设属性的值字段使用隐式VR编码以Little Endian字节顺序进行编码,而不管当前的传输语法。

另请注意,UN的值表示的长度字段可能包含未知长度的值,在这种情况下,可以假设内容使用隐式VR和PS 3.5进行编码。第7.5.1节具有与解析相关的信息长度未知的数据元素。

第7.8节还介绍了私有数据元素编码规则。