我使用以下代码从 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);但是,其余值已成功返回。 有什么想法吗? 非常感谢。
通常,您不应该在 dicomdataset 中找到 MediaStorageSOPInstanceUID。 MediaStorageSOPInstanceUID存储在Group 0002中,它是DicomFiles的一种标头。
因此,如果源是 DicomFile,那么您将在
dicomFile.FileMeataInfo.GetSingleValueOrDefault<string>(DicomTag.MediaStorageSOPInstanceUID, "")
中找到 MediaStorageSOPInstanceUID,并在 dicomFile.Dataset.GetSingleValueOrDefault....
中找到所有其他标签。
如果源是 StoreSCP 服务中通过网络接收的数据集,那么您根本找不到 MediaStorageSOPInstanceUID。当您将数据集存储到文件时,Fo-dicom 会添加它。
您访问SOPInstanceUID的方式是完全正确的。唯一的解释是,您的 dicom 数据集不是有效的 dicom 文件。