سؤال

ما هي الطريقة الأبسط والأكثر استخدامًا لتحليل ملف DICOM؟

سيكون تنفيذ Python الأصلي دون استخدام مكتبات غير Python هو المفضل كثيرًا.DICOM هو تنسيق الملف القياسي في التصوير الطبي الرقمي (انظر هنا للمزيد من المعلومات).

توجد بعض مكتبات C/C++ التي تدعم قراءة (مجموعة فرعية) من ملفات DICOM.اثنان أو ثلاثة منهم لديهم روابط بايثون.سيخدم محلل Python الأصلي غرضين بالنسبة لي:

  1. لا حاجة لإنشاء أي مكتبات C/C++ خارجية.
  2. تعرف على تنسيق ملف DICOM.
هل كانت مفيدة؟

المحلول

واعتبارًا من اليوم، تتوفر حزمة Python خالصة أخرى لقراءة ملفات DICOM: pydicom

نصائح أخرى

أنا استخدم pydicom بشدة هذه الأيام، والصخور.

من السهل جدًا البدء باللعب بها:

import dicom 
data = dicom.read_file("yourdicomfile.dcm")

للحصول على الأشياء المثيرة للاهتمام من كائن "البيانات" هذا، الذي يشبه إلى حد ما com.dcmdump انتاج:

for key in data.dir():        
    value = getattr(data, key, '')
    if type(value) is dicom.UID.UID or key == "PixelData":
        continue

    print "%s: %s" % (key, value)

أعتقد أن الطريقة الرائعة لمعرفة المزيد حول تنسيق dicom هي فتح ملفات مشابهة وكتابة تعليمات برمجية لمقارنتها وفقًا لجوانب مختلفة:وصف الدراسة وعرض النافذة ومركزها وتمثيل البكسل وما إلى ذلك.

استمتع!:)

إذا كنت تريد التعرف على تنسيق DICOM، "التصوير الرقمي والاتصالات في الطب (DICOM):""مقدمة عملية ودليل البقاء" بقلم أوليغ بيانيخ سهل القراءة تمامًا ويقدم مقدمة جيدة لمفاهيم DICOM الرئيسية.Springer-Verlag هو ناشر هذا الكتاب.إن معيار DICOM الكامل هو بالطبع المرجع النهائي على الرغم من أنه أكثر ترويعا إلى حد ما.وهي متاحة من نيما (http://medical.nema.org).

تنسيق الملف في الواقع أقل خصوصية مما قد تتخيله ويتكون من مقدمة متبوعة بسلسلة من عناصر البيانات.تحتوي المقدمة على نص ASCII "DICM" والعديد من وحدات البايت المحجوزة غير المستخدمة.يلي الديباجة سلسلة من عناصر البيانات.يتكون كل عنصر بيانات من حجم العنصر ورمز ASCII المكون من حرفين يشير إلى تمثيل القيمة وعلامة DICOM والقيمة.يتم ترتيب عناصر البيانات الموجودة في الملف حسب أرقام علامات DICOM الخاصة بها.الصورة نفسها هي مجرد عنصر بيانات آخر بالحجم، وتمثيل القيمة، وما إلى ذلك.

تحدد تمثيلات القيمة بالضبط كيفية تفسير القيمة.هل هو رقم؟هل هي سلسلة أحرف؟إذا كانت سلسلة أحرف، فهل هي قصيرة أم طويلة وما هي الأحرف المسموح بها؟يخبرك رمز تمثيل القيمة بهذا.

علامة DICOM عبارة عن رمز سداسي عشري مكون من 4 بايت يتكون من رقم "مجموعة" مكون من 2 بايت ورقم "عنصر" مكون من 2 بايت.رقم المجموعة هو معرف يخبرك بكيان المعلومات الذي تنطبق عليه العلامة (على سبيل المثال، تشير المجموعة 0010 إلى المريض وتشير المجموعة 0020 إلى الدراسة).يحدد رقم العنصر تفسير القيمة (عناصر مثل رقم هوية المريض، ووصف السلسلة، وما إلى ذلك).لمعرفة كيفية تفسير القيمة، يبحث الكود الخاص بك عن علامة DICOM في ملف القاموس.

هناك بعض التفاصيل الأخرى المعنية، ولكن هذا هو جوهر الأمر.ربما يكون الشيء الأكثر إفادة الذي يمكنك القيام به للتعرف على تنسيق الملف هو أخذ مثال لملف DICOM، والنظر إليه باستخدام محرر سداسي عشري، وإجراء عملية تحليله ذهنيًا.أنصح بعدم محاولة التعرف على DICOM من خلال النظر في التطبيقات الحالية مفتوحة المصدر، على الأقل في البداية.ومن المرجح أن يربك بدلا من التنوير.الحصول على الصورة الكبيرة هو أكثر أهمية.بمجرد حصولك على الصورة الكبيرة، يمكنك النزول إلى التفاصيل الدقيقة.

المكتبة pydicom يبدو أن المذكورة أعلاه بمثابة مكتبة رائعة للوصول إلى هياكل بيانات DICOM.لاستخدامه للوصول على سبيل المثال.بيانات RT DOSE، أعتقد أن المرء سيفعل شيئًا مثل

import dicom,numpy
dose = dicom.ReadFile("RTDOSE.dcm")
d = numpy.fromstring(dose.PixelData,dtype=numpy.int16)
d = d.reshape((dose.NumberofFrames,dose.Columns,dose.Rows))

ومن ثم، إذا كنت في مايافي،

from enthought.mayavi import mlab
mlab.pipeline.scalar_field(d)

وهذا يعطي إحداثيات خاطئة وقياسًا خاطئًا للجرعات، لكن المبدأ يجب أن يكون سليمًا.

يجب أن تكون بيانات التصوير المقطعي متشابهة جدًا.

يتم الآن تطوير أحدث gdcm هنا:

http://gdcm.sourceforge.net/

وهو يدعم Java وC# بالإضافة إلى لغة python.

لماذا الكتابة بعد آخر تطبيق dicom عندما يمكنك مركزية تطبيق C++ واحد وإتاحته للعديد من اللغات المختلفة

منذ عدة سنوات كنت أبحث عن نفس الشيء ووجدت هذا:بايثون DICOM ليب

لم أكن معجبًا جدًا بالكود، ولكنه لغة بايثون الأصلية التي تقرأ ملفات DICOM.

DICOM هو الألم الحقيقي ...حتى عندما تلتزم الشركة المصنعة بالمعايير.إذا قمت بكتابة مكتبة DICOM الخاصة بك، فستجد أن الشركات المصنعة المختلفة لـ DICOM غير متوافقة فعليًا مع البائعين الآخرين [بحاجة لمصدر].

لقد حاولت (في وقت فراغي) كتابة محلل لغة C dicom مستعيرًا بشكل كبير من محلل روبي صغير لطيف صادفته بمكر يسمى ""روبي ديكوم'.إنه في الواقع رمز قابل للقراءة للغاية (لقد نظرت إلى أحد الإصدارات السابقة الأصغر حجمًا).

كان أكبر مشكلة هي محاولة تجميع مكتبة من علامات الرؤوس مع أنواع البيانات المتوقعة.هناك العلامات المحددة قياسيًا، وعلامات البائع.تحتوي ملفات Ruby-dicom على مكتبة من العلامات بتنسيق نصي يمكن فحصه بسهولة.

لقد تخليت عن الأدبيات الرسمية لأنني كنت مهتمًا فقط بتنسيق الملف الذي يبدو أنه موجود فقط في واحد من ملفات PDF العشرة أو ما يقرب من ذلك.

ملفات DICOM المحلية الخاصة بي ليست مضغوطة وتتبع ترتيبات بت قياسية سهلة الترميز، ولكن كن مستعدًا لمختلف عمليات الضغط والصور الغريبة 12 بت المخزنة في حاويات 8 بت ذات نهاية كبيرة أو صغيرة وبدون أجزاء حشو...

لقد استسلمت عندما أصبح الوقت نادرًا جدًا.

من المحتمل أن تكون لغة Python خيارًا أفضل بكثير من لغة C لهذا النمط من تحليل الرأس...

هناك بعض المكتبات (غالبًا ما يتم تنفيذها في C/C++) مع روابط Python، على سبيل المثال:

ومع ذلك، فأنا أبحث عن تطبيق Python أصلي لمعرفة المزيد حول تنسيق ملف DICOM.

أتساءل ما الذي جربه الملصق الأصلي وما هي الأساليب التي نجحت وتلك التي لم تنجح معه.لم أعمل مطلقًا مع DICOM، لكن البحث السريع على Google عن "DICOM python" أعطى العديد من النتائج المثيرة للاهتمام.ويبدو أن هذا المشروع: http://www.creatis.univ-lyon1.fr/Public/Gdcm/ ينبغي تسليم ما تريد.يحتوي على روابط بيثون وقائمة بريدية نشطة جدًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top