代码之家  ›  专栏  ›  技术社区  ›  TCulos

从dicom组和元素编号中获取ClearCanvas DicomTag

  •  3
  • TCulos  · 技术社区  · 9 年前

    我试图从文本文件中读取dicom标记 (####,####) 并从透明画布库中创建相应的DicomTag

    //parsing txt string to find the corresponding dicomtag
    foreach (String elem in settings)
    {
        String tag = elem.Replace("(", "").Replace(")", "");
        String[] arr = tag.Split(',');
        DicomTag dTag = DicomTagDictionary.GetDicomTag(ushort.Parse(arr[0]), ushort.Parse(arr[1]));
    
        if (dTag != null)
        {
            toRemove.Add(dTag);
        }
        else
        {
            MessageBox.Show("Tag: (" + arr[0] + "," + arr[1] + ") is not valid");
        }
    }
    

    有时,即使标记确实存在 DicomTagDictionary.GetDicomTag(ushort group, ushort element) 方法找不到标记,例如(00080008)有效,但标记(00081070)无效。

    标签可以在这里找到: http://medical.nema.org/Dicom/2011/11_06pu.pdf

    可在此处找到透明画布等效物: https://github.com/ClearCanvas/ClearCanvas/blob/master/Dicom/DicomTags.cs

    2 回复  |  直到 9 年前
        1
  •  2
  •   rkh    9 年前

    我认为文本文件中的组和元素是十六进制的,而ushort将它们解析为十进制。 0008,1070(十进制)是十六进制的0x0008,0x042E,这不是有效的dicom标记(至少根据dicomlookup.com)

    如果指定ushort。使用HexNumber数字样式进行分析,该样式应正确解析文本文件中的值。

    msdn.microsoft.com/en-us/library/kaxyssf(v=vs.110).aspx

        2
  •  1
  •   Jake    9 年前

    我使用以下方法在Clear Canvas中编辑或创建不存在的标记:

    Platform.Log(LogLevel.Info, "Setting Tag: " + "0x" + Stats.g_TaglistTag1 + " to value of: " + Stats.g_tbTagList1);
    AC_To_Coerce[Convert.ToUInt32("0x" + Stats.g_TaglistTag1, 16)].SetStringValue(Stats.g_tbTagList1);
    

    AC_To_erce是一个DicomAttributeCollection对象。统计数据。g_TaglistTag1是DICOM标签Stats的十六进制字符串。g_tbTagList1是标记的值。这也可以用于为DicomFile对象或DicomMessage对象设置标记值,只需简单修改即可。

    这将设置或创建并设置值,并记录以下行:

    2015-09-18 21:02:24944[6704][7]信息-将标记:0x00100010设置为值:测试