在 DCMTK 中显示 ImageType 的全部内容

showing the full content of ImageType in DCMTK

我正在尝试使用 DCMTK 读取大量西门子 DICOM 图像,其中一些是马赛克图像。我正在寻找一种快速找到它们的方法。

我可以看到马赛克图像是在 ImageType 标签中指定的,例如

$ dcmdump ${im0} | grep ImageType
(0008,0008) CS [ORIGINAL\PRIMARY\ASL\NONE\ND\NORM\MOSAIC] #  40, 7 ImageType

大多数标签很容易用 findAndGetOFString() 读取(或类似的浮动等),但如果我这样做

tmpdata->findAndGetOFString(DCM_ImageType, tmpstring);
std::cout << "image type: " << tmpstring << "\n";           

对于DcmDataset* tmpdataOFString tmpstring,那么tmpstring的内容只有ORIGINAL,因此永远不会打印其余值。

在 dcmdump 中它被打印出来,但是 DCM_ImageType 的值似乎从未存储在字符串中,而我确实需要它。

'code strings' 是否有类似 findAndGetOFString() 的命令?也许我遗漏了一些明显的东西!

图像类型 (0008,0008) 是一个 multi-valued 属性。也就是说,它可能包括几个由反斜杠字符分隔的值。请注意,“正式”,反斜杠不是属性值的一部分。它是属性的多个值之间的分隔符。这就是你所拥有的。所以就DICOM而言,没有“一个值”而是多个。 DCMTK API 允许您处理这个(当然)。

findAndGetOFString() 有第三个参数(“索引”)来定义你想要获取的多个值中的哪一个。

您可能期望的行为就是 findAndGetOFStringArray() 所做的。

作为替代方案,您可以通过先获取“值多重性”来遍历属性的多个值,然后循环遍历

之类的值
DcmElement* element = tmpdata->findAndGetElement(DCM_ImageType);
int numberOfValues = element->getVM();
for(int index = 0; index < numberOfValues; index++)
{
    OFString valueAtIndex;
    element->GetOfString(valueAtIndex, index);
    /// ... your concatenation goes here...
}