DICOM الصور الرقمية الطبية والتعامل معها باستخدام بايثون
لم اكن اعرف ان هناك معيار عالمي للصور الطبية يدعى DICOM
هذا المعيار تم تطويره والمسؤول عنه حاليا هي الجمعية الوطنية لمصنعي الاجهزة الكهربائية NEMA
حيث يقدم هذا المعيار خدمة رائعة للشركات المصنعة للأجهزة المتعلقة بالتصوير الطبي ( اجهزة تصوير ، اجهزة طباعة ، نقل وحفظ هذه الصور)
جميع هذه الاجهزة تعمل وفق نظام عمل موحد يسهل التواصل فيما بينها.
في هذه المدونة سأقدم شرح مبسط للأدوات التي تحتاجها للتعامل مع الفايلات المبنية وفق المعيار DICOM
صيغة هذه الملفات بالعادة تنتهي بـ dcm.
هناك عدة مكتبات يمكنها التعامل مع هكذا نوع لكن النوع الذي استخدمه بالشرح في هذه التدوينة هي pydicom
كبداية كل ماتحتاجه هو تضمين هذه المكتبة ضمن بيئة بايثون الخاصة بك. وبكل بساطة للقيام بهذا الامر ماعليك سوى استخدام الامر السحري في بايثون لتضمين اغلب المكتبات بكل سهولة:
pip install pydicom
بعد ذلك تقوم بعمل استدعاء للأمور التي تحتاجها في عملك dcmread هي الكلاس المسؤولة عن قراءة الملف. matplotlib.pyplot المسؤولة عن رسم الصور. get_testdata_file نستخدمها لجلب بيانات صورية طبية مجانية (للتجربة)
import matplotlib.pyplot as plt from pydicom import dcmread from pydicom.data import get_testdata_file
fpath = get_testdata_file('CT_small.dcm') ds = dcmread(fpath) # Normal mode: print() print(f"File path........: {fpath}") print(f"SOP Class........: {ds.SOPClassUID} ({ds.SOPClassUID.name})") print() pat_name = ds.PatientName display_name = pat_name.family_name + ", " + pat_name.given_name print(f"Patient's Name...: {display_name}") print(f"Patient ID.......: {ds.PatientID}") print(f"Modality.........: {ds.Modality}") print(f"Study Date.......: {ds.StudyDate}") print(f"Image size.......: {ds.Rows} x {ds.Columns}") print(f"Pixel Spacing....: {ds.PixelSpacing}") # use .get() if not sure the item exists, and want a default value if missing print(f"Slice location...: {ds.get('SliceLocation', '(missing)')}") # plot the image using matplotlib plt.imshow(ds.pixel_array, cmap=plt.cm.gray) plt.show()
لمشاهدة شرح الكود بشكل مختصر تستطيع متابعة هذا الفيديو على اليويتيوب قمت بشرح اكثر الامور

تعليقات
إرسال تعليق