gpt4 book ai didi

dicom - 如何使用 ITK 读取另一个标签内的 DICOM 标签?

转载 作者:行者123 更新时间:2023-12-03 06:05:09 25 4
gpt4 key购买 nike

我正在使用 ITK 读取 DICOM 文件,调用

dicomIO->GetValueFromTag(...)

读取标签值。这对于像“300a|011e”(龙门角度)这样的标签效果很好。问题出现在尝试读取嵌入在“3002|0030”内的标签“0018|0060”。

如果我对“3002|0030”使用 GetValueFromTag,我会读回一个空字符串,因为“3002|0030”是曝光序列并且没有值。如何使用 ITK 读取标签内的标签?查看 ITK 文档,我看不到任何方法可以做到这一点?

最佳答案

显然您不能使用 ImageIOType 从 DICOM 读取序列,而必须使用 GDCM。

#include "gdcmReader.h"
#include "gdcmImage.h"
#include "gdcmDataElement.h"
#include "gdcmTag.h"

using namespace gdcm;

bool readGDCMTags(std::string filename, float &kvp)
{
Reader reader;
reader.SetFileName(filename.c_str());
reader.Read();

File &file = reader.GetFile();
DataSet &ds = file.GetDataSet();

const Tag tag(0x3002, 0x0030);
const Tag subTag(0x0018, 0x0060);

const DataElement &seq = ds.GetDataElement(tag);

SmartPointer<SequenceOfItems> sqi = seq.GetValueAsSQ();

assert(sqi->GetNumberOfItems() == 1);

Item &item = sqi->GetItem(1);

DataSet &subds = item.GetNestedDataSet();

if (!subds.FindDataElement(subTag))
{
return false;
}

const DataElement &de = item.GetDataElement(subTag);

const ByteValue *value = de.GetByteValue();

char *buffer;

VL vl = value->GetLength();
uint32_t length = (uint32_t)vl;

buffer = new char[length + 1];

value->GetBuffer(buffer, length);

buffer[length] = 0;

kvp = (float)atof(buffer);

delete buffer;

return true;
}

关于dicom - 如何使用 ITK 读取另一个标签内的 DICOM 标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33122589/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com