читать теги файлов DICOM в C # - PullRequest
       4

читать теги файлов DICOM в C #

0 голосов
/ 09 февраля 2011

Можете ли вы сказать мне, как прочитать весь тег dicom и его VR в C #?

Ответы [ 5 ]

1 голос
/ 26 июля 2013

Я реализую это с помощью LeadTools

 private DicomDataSet _objLTDicomDataSet = null;
private void OpenDataset(string file, bool loadDefaultImage)
        {
            _objLTDicomDataSet =new DicomDataSet();
            _objLTDicomDataSet.Load(file, DicomDataSetLoadFlags.None);
            DicomElement element, _ele = null;
             element = _objLTDicomDataSet.FindFirstElement(null, DicomTag.PatientName, true);
            string tagName = _objLTDicomDataSet.GetStringValue(element, 0);
        }

также leadtools поддерживает различные методы для получения различных тегов, которые вы можете использовать для этих методов, и для чтения файла dicom. Методы как показано ниже

DicomDataSet.GetRootElement

DicomDataSet.GetParentElement

DicomDataSet.GetChildElement

DicomDataSet.GetFirstElement

DicomDataSet.GetLastElement

DicomDataSet.GetPreviousElement

DicomDataSet.GetNextElement

для получения дополнительной информации LeadTools Сайт

1 голос
/ 02 сентября 2011

In Evil Dicom Это действительно легко:

        //All the work is done with this constructor
        DicomFile df = new DicomFile("fileToRead.dcm");
        foreach (DicomObject d in df.DicomObjects)
        {
            Console.WriteLine(string.Format("I have a tag id of {0}, a VR of {1}", d.Tag.Id, d.VR));          
        }

        //To access the data in a native format use .Data property
        string name = df.PATIENT_NAME.Data;
1 голос
/ 10 февраля 2011

Это, конечно, полностью зависит от того, какую библиотеку DICOM вы используете.

Используя ClearCanvas, вы получите что-то вроде этого:

public foo(DicomFile dfile)
{
   DicomAttributeCollection dac;
   dac = dfile.DataSet;

   DicomUid uid;
   bool success;
   success = dac[DicomTags.SopInstanceUid].TryGetUid(0, out uid);

   if (success)
   {
      // The attribute was present in the collection.  The variable uid
      // contains the SopInstanceUid extracted from the DICOM file
   }
}

Другие атрибуты с разными VRбудет извлечен с использованием соответствующего поля DicomTags и с соответствующей функцией получения для VR.Например, если вы хотите извлечь EchoTime (атрибут с представлением значения DS) как double, вы должны использовать TryGetFloat64 вместо TryGetUid.Первый целочисленный параметр TryGetFloat64 (и другие подобные функции) указывает конкретное значение, которое вы хотите получить.Для атрибута со значением кратности 1 этот параметр всегда будет равен 0. Для атрибута с VM> 1 вы должны извлечь n-е значение, установив для параметра значение n-1.

1 голос
/ 17 марта 2011

Если вы используете привязку GDCM + C #:

http://gdcm.sourceforge.net/html/SimplePrint_8cs-example.html

public class SimplePrint
{
  public static void RecurseDataSet(File f, DataSet ds, string indent)
    {
    CSharpDataSet cds = new CSharpDataSet(ds);
    while(!cds.IsAtEnd())
      {
      DataElement de = cds.GetCurrent();
      // Compute VR from the toplevel file, and the currently processed dataset:
      VR vr = DataSetHelper.ComputeVR(f, ds, de.GetTag() );

      if( vr.Compatible( new VR(VR.VRType.SQ) ) )
        {
        uint uvl = (uint)de.GetVL(); // Test cast is ok
        System.Console.WriteLine( indent + de.GetTag().toString() + ":" + uvl ); // why not ?
        //SequenceOfItems sq = de.GetSequenceOfItems();
        // GetValueAsSQ handle more cases than GetSequenceOfItems
        SmartPtrSQ sq = de.GetValueAsSQ();
        uint n = sq.GetNumberOfItems();
        for( uint i = 1; i <= n; i++) // item starts at 1, not 0
          {
          Item item = sq.GetItem( i );
          DataSet nested = item.GetNestedDataSet();
          RecurseDataSet( f, nested, indent + "  " );
          }
        }
      else
        {
        System.Console.WriteLine( indent + de.toString() );
        }
      cds.Next();
      }
    }

  public static int Main(string[] args)
    {
    string filename = args[0];
    Reader reader = new Reader();
    reader.SetFileName( filename );
    bool ret = reader.Read();
    if( !ret )
      {
      return 1;
      }
    File f = reader.GetFile();
    DataSet ds = f.GetDataSet();

    RecurseDataSet( f, ds, "" );

    return 0;
    }
}
1 голос
/ 09 февраля 2011

У вас есть различные .NET-библиотеки с открытым исходным кодом для чтения файлов DICOM, но помимо прочего:

...