为什么无法检索 DICOM 标签值?

问题描述 投票:0回答:1

我使用以下代码从 DICOM 文件中检索值。 所有值都包含字符串数据类型:

var item1 = dicomDataset.GetSingleValueOrDefault<string>(DicomTag.MediaStorageSOPInstanceUID, "");
if (item1 == "")
{
    item1 = "(not set)";
}
Console.WriteLine($"SOPInstanceUID: {item1}");  //DOES NOT WORK


var sopUID = dicomDataset.GetSingleValueOrDefault<string>(DicomTag.SOPInstanceUID, "");
if (sopUID == "")
{
    sopUID = "(not set)";
}
Console.WriteLine($"SOPInstanceUID: {sopUID}"); //DOES NOT WORK


var stuUID = dicomDataset.GetSingleValueOrDefault<string>(DicomTag.StudyInstanceUID, "");
if (stuUID == "")
{
    stuUID = "(not set)";
}
Console.WriteLine($"StudyInstanceUID: {stuUID}");



var serInst = dicomDataset.GetSingleValueOrDefault<string>(DicomTag.SeriesInstanceUID, "");
if (serInst == "")
{
    serInst = "(not set)";
    }
    Console.WriteLine($"SeriesInstanceUID: {serInst}");
    
    
    var forUID = dicomDataset.GetSingleValueOrDefault<string>(DicomTag.FrameOfReferenceUID, "");
    if (forUID == "")
    {
        forUID = "(not set)";
    }
    Console.WriteLine($"FrameOfReferenceUID: {forUID}");

有两个值无法检索(DicomTag.MediaStorageSOPInstanceUID 和 SOPInstanceUID);但是,其余值已成功返回。 有什么想法吗? 非常感谢。

c# fo-dicom
1个回答
0
投票

通常,您不应该在 dicomdataset 中找到 MediaStorageSOPInstanceUID。 MediaStorageSOPInstanceUID存储在Group 0002中,它是DicomFiles的一种标头。

因此,如果源是 DicomFile,那么您将在

dicomFile.FileMeataInfo.GetSingleValueOrDefault<string>(DicomTag.MediaStorageSOPInstanceUID, "")
中找到 MediaStorageSOPInstanceUID,并在
dicomFile.Dataset.GetSingleValueOrDefault....
中找到所有其他标签。

如果源是 StoreSCP 服务中通过网络接收的数据集,那么您根本找不到 MediaStorageSOPInstanceUID。当您将数据集存储到文件时,Fo-dicom 会添加它。

您访问SOPInstanceUID的方式是完全正确的。唯一的解释是,您的 dicom 数据集不是有效的 dicom 文件。

© www.soinside.com 2019 - 2024. All rights reserved.