Pyradiomics: لماذا يحدث عدم التطابق الهندسي عند اشتقاق القناع والصورة من نفس سلسلة DICOM؟

تم إنشاؤها على ٢٣ أبريل ٢٠١٩  ·  13تعليقات  ·  مصدر: AIM-Harvard/pyradiomics

أهلا،

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

الإعداد: لدي سلسلة DICOM مريض واحدة مع 158 شريحة ، كل منها بأبعاد 512 × 512 بكسل. لقد قمت بتحميل السلسلة في Slicer وقمت بتحديد ROI (عقدة) ثم قمت بتصدير خريطة التسمية الثنائية كملف nrrd. بعد ذلك ، استخدمت أداة سطر الأوامر dcm2niix لتحويل نفس سلسلة DICOM إلى وحدة تخزين .nii.

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

كما ذكرنا ، هناك حلان: (1) حفظ الصورة كمجلد .nii أو .nrrd مباشرة من Slicer ، ويبدو أن هذا يعمل بشكل جيد ؛ (2) ضبط قيمة التسامح (على الرغم من أن هذا الحل يترك لي الشعور بعدم الارتياح). في النهاية ، أريد إجراء تحويل دفعي لمئات من سلاسل DICOM 'إلى مجلدات .nii أو .nrrd ، ولدي بالفعل أقنعة لهذه المئات من السلاسل. لذلك كنت آمل في استخدام أداة سطر الأوامر لتحويل الدُفعات من dcm >> nii أو nrrd بدلاً من Slicer.

شكرا لك على مساعدتك.

[2019-04-23 16:38:19] E: radiomics.script: Feature extraction failed!
Traceback (most recent call last):
  File "/anaconda3/lib/python3.6/site-packages/pyradiomics-0+unknown-py3.6-macosx-10.7-x86_64.egg/radiomics/imageoperations.py", line 192, in checkMask
    lsif.Execute(imageNode, maskNode)
  File "/anaconda3/lib/python3.6/site-packages/SimpleITK/SimpleITK.py", line 43958, in Execute
    return _SimpleITK.LabelStatisticsImageFilter_Execute(self, *args)
RuntimeError: Exception thrown in SimpleITK LabelStatisticsImageFilter_Execute: /scratch/dashboard/SimpleITK-OSX10.6-x86_64-pkg/SimpleITK-build/ITK-prefix/include/ITK-4.13/itkImageToImageFilter.hxx:241:
itk::ERROR: LabelStatisticsImageFilter(0x7fcd1e601050): Inputs do not occupy the same physical space! 
InputImage Origin: [-1.8200000e+02, 1.6933569e+02, -3.0314999e+02], InputImage_1 Origin: [-1.8200000e+02, -1.7000000e+02, -3.0314999e+02]
    Tolerance: 6.6406202e-07
InputImage Direction: 1.0000000e+00 0.0000000e+00 0.0000000e+00
0.0000000e+00 -1.0000000e+00 0.0000000e+00
0.0000000e+00 0.0000000e+00 1.0000000e+00
, InputImage_1 Direction: 1.0000000e+00 0.0000000e+00 0.0000000e+00
0.0000000e+00 1.0000000e+00 0.0000000e+00
0.0000000e+00 0.0000000e+00 1.0000000e+00

    Tolerance: 1.0000000e-06


During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/anaconda3/lib/python3.6/site-packages/pyradiomics-0+unknown-py3.6-macosx-10.7-x86_64.egg/radiomics/scripts/segment.py", line 40, in extractSegment
    feature_vector.update(extractor.execute(imageFilepath, maskFilepath, label))
  File "/anaconda3/lib/python3.6/site-packages/pyradiomics-0+unknown-py3.6-macosx-10.7-x86_64.egg/radiomics/featureextractor.py", line 397, in execute
    boundingBox, correctedMask = imageoperations.checkMask(image, mask, **self.settings)
  File "/anaconda3/lib/python3.6/site-packages/pyradiomics-0+unknown-py3.6-macosx-10.7-x86_64.egg/radiomics/imageoperations.py", line 207, in checkMask
    raise ValueError('Image/Mask geometry mismatch. Potential fix: increase tolerance using geometryTolerance, '
ValueError: Image/Mask geometry mismatch. Potential fix: increase tolerance using geometryTolerance, see Documentation:Usage:Customizing the Extraction:Settings:geometryTolerance for more information
question

ال 13 كومينتر

هذا لأن التفاوت الافتراضي صارم للغاية. أسهل طريقة هي تمكين إعادة التشكيل.

warkentinmatt قد يكون من الممكن أيضًا الإصلاح من خلال تمكين correctMask . يسمح هذا بإعادة تشكيل القناع (أقرب جار) ، بدون إعادة تشكيل الصورة. الشرط الوحيد هو أن المساحة المادية للقناع مضمنة في الصورة.

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

لا تقوم PyRadiomics بتصحيح القناع افتراضيًا ، حيث يعمل ذلك كتحذير للخطوة الإضافية التي تقوم بها PyRadiomics.

شكرا لكم على حد سواء على ردودكم.

JoostJM فقط للتأكد من فهمي لتعليقاتك ، عندما يقوم Slicer بتصدير / حفظ خريطة تسمية NRRD ، فإنه يقوم بقص الحجم إلى حد عائد الاستثمار؟ لا تحافظ على الأبعاد الأصلية لحجم الإدخال؟ عندما أقوم بمسح المشهد في Slicer ، وإعادة استيراد سلسلة DICOM ، ثم تحميل قناع NRRD ، يتم تثبيت القناع على CT في الموقع التشريحي المناسب. بالنسبة لي ، افترضت أن هذا يعني أنه تم الحفاظ على الأبعاد الأصلية للتصوير المقطعي المحوسب في القناع. هل أداة التقطيع ذكية بما يكفي (أي استخدام البيانات الوصفية الصحيحة) لمحاذاة القناع بشكل صحيح على التصوير المقطعي؟

أيضًا ، فقط حتى أكون واضحًا بشأن ما تم تحقيقه من خلال إعادة تشكيل القناع الثنائي: ما أفهمه هو أنه إذا كان عائد الاستثمار موجودًا في موقع مركزي في الصورة (وبالتالي ، يحتوي مركز المصفوفة على بضع مئات / آلاف "1") ، فإن إعادة التشكيل هذه أقرب جيران القناع عند حدود الحجم هو أساسًا حشو القناع بـ 0؟ هل هذا تفسير صحيح؟

شكرا لك على مساعدتك.

لذلك فقط للتأكد من فهمي لتعليقاتك ، عندما يقوم Slicer بتصدير / حفظ خريطة تسمية NRRD ، فإنه يقوم بقص الحجم إلى حد عائد الاستثمار؟

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

أيضًا ، فقط حتى أكون واضحًا بشأن ما تم تحقيقه من خلال إعادة تشكيل القناع الثنائي: ما أفهمه هو أنه إذا كان عائد الاستثمار موجودًا في موقع مركزي في الصورة (وبالتالي ، يحتوي مركز المصفوفة على بضع مئات / آلاف "1") ، فإن إعادة التشكيل هذه أقرب جيران القناع عند حدود الحجم هو أساسًا حشو القناع بـ 0؟ هل هذا تفسير صحيح؟

صيح

عندما أقوم بمسح المشهد في Slicer ، وإعادة استيراد سلسلة DICOM ، ثم تحميل قناع NRRD ، يتم تثبيت القناع على CT في الموقع التشريحي المناسب. بالنسبة لي ، افترضت أن هذا يعني أنه تم الحفاظ على الأبعاد الأصلية للتصوير المقطعي المحوسب في القناع. هل أداة التقطيع ذكية بما يكفي (أي استخدام البيانات الوصفية الصحيحة) لمحاذاة القناع بشكل صحيح على التصوير المقطعي؟

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

بالنظر مرة أخرى إلى الخطأ (المرة الأولى التي ألقيت فيها نظرة سريعة على الهاتف) ، إليك الاختلافات:

InputImage Origin: [-1.8200000e+02, 1.6933569e+02, -3.0314999e+02], 
InputImage_1 Origin: [-1.8200000e+02, -1.7000000e+02, -3.0314999e+02]
    Tolerance: 6.6406202e-07

InputImage Direction: 1.0000000e+00 0.0000000e+00 0.0000000e+00
0.0000000e+00 -1.0000000e+00 0.0000000e+00
0.0000000e+00 0.0000000e+00 1.0000000e+00
, 

InputImage_1 Direction: 1.0000000e+00 0.0000000e+00 0.0000000e+00
0.0000000e+00 1.0000000e+00 0.0000000e+00
0.0000000e+00 0.0000000e+00 1.0000000e+00

إذن لديك موقف تكون فيه القيمة المطلقة للأصل متوقفة قليلاً (ويكون الاختلاف أكبر من التفاوت الافتراضي) ، ولكن أيضًا يكون اتجاه إحدى الصور مقلوبًا في Y مقارنة بالصورة الأخرى. هذا يعني أنه لا يمكنك معالجة المشكلة عن طريق تقليل التفاوت ، وستحتاج إلى إعادة تشكيل القناع أو الصورة. يجب ألا تؤدي عملية إعادة التشكيل هذه إلى تغيير قيم البكسل ، على الرغم من أنها ستكون عملية إعادة توجيه بشكل فعال.

JoostJM شكرًا لك على ردك مرة أخرى ، أقدر ذلك كثيرًا.

fedorov كيف ستؤدي إعادة تشكيل القناع أو الصورة إلى حل مشكلة انعكاس Y في أحدهما بالنسبة للآخر؟ هذا ليس واضحا بالنسبة لي. كنت أفهم أنه تم استخدام إعادة التشكيل لضمان نفس الحجم / الأبعاد.

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

نعم ، أود الحصول على مزيد من المعلومات حول كيفية ضمان مطابقة الأبعاد. من فضلك و شكرا لك.

في الواقع ، أود الحصول على أي معلومات أو موارد يمكن أن تعزز فهمي لبعض هذه المفاهيم التي ناقشناها (مثل التباعد والاتجاه والأصل). بسذاجة ، قد أعتقد أن أصل الصورة هو إحداثيات [x ، y ، z] لـ [0،0،0] ، وبعبارة أخرى ، إحدى "الزوايا" (العلوية الأمامية اليمنى؟) لمصفوفة الصور . هل القيم الأصلية الموضحة في السجل لها تفسير ملموس (مثل المليمترات أو شيء من هذا القبيل)؟ ماذا تمثل هذه الأرقام؟ سامح جهلي ، لقد تعلمت ذاتيًا في كل شيء يتعلق بالتصوير / علم الأشعة ، لكنني أريد أن أفهم هذه المفاهيم مقابل مجرد تنفيذ الحلول لجعل الأشياء تعمل.

warkentinmatt لا تقلق بشأن كل الأسئلة ، إنه منحنى حاد للمبتدئين!

كيف يمكن أن تؤدي إعادة تشكيل القناع أو الصورة إلى حل مشكلة انعكاس Y في أحدهما بالنسبة للآخر؟

اتجاهات الصورة هي في الأساس تحويل يقوم بتدوير نظام إحداثيات مصفوفة الصور (IJK) إلى الفضاء التشريحي (XYZ).

في مثال 1D البسيط أدناه ، "فهرس المصفوفة" هو نظام إحداثيات صفيفك 1d ، و Left-Right هو نظام الإحداثيات في الفضاء المادي لعالم 1d. في الصورة 2 ، يكون ترتيب القيم في المصفوفة معاكسًا لاتجاه محور نظام الإحداثيات الفيزيائية ، أي أن مصفوفة وحدات البكسل موجهة بشكل مختلف. تأخذ عملية إعادة التشكيل هندسة الصورة المحددة بواسطة حجم المصفوفة والاتجاه والأصل ، وتعين قيمًا من صورة أخرى في وحدات البكسل الخاصة بالهندسة المرجعية.

image

هل لهذا معنى؟

إذا كنت تريد مزيدًا من التفاصيل حول كيفية ضمان مطابقة الأبعاد أثناء تصدير الملصق من 3D Slicer ، فأخبرنا بذلك.
نعم ، أود الحصول على مزيد من المعلومات حول كيفية ضمان مطابقة الأبعاد. من فضلك و شكرا لك.

انظر لقطة الشاشة أدناه حول كيفية تصدير مقطع من 3D Slicer إلى خريطة تسمية (وهي صورة ثنائية بشكل فعال). لاحظ أنه حتى إذا اتبعت هذا الإجراء ، فليس من المستحيل أن تظل تواجه عدم تطابق هندسي ، نظرًا لأن قيم التفاوتات الافتراضية صارمة للغاية. لكن يجب أن يكون اتجاه مجموعة الصور هو نفسه.

image

في الواقع ، أود الحصول على أي معلومات أو موارد يمكن أن تعزز فهمي لبعض هذه المفاهيم التي ناقشناها (مثل التباعد والاتجاه والأصل). بسذاجة ، قد أعتقد أن أصل الصورة هو إحداثيات [x ، y ، z] لـ [0،0،0] ، وبعبارة أخرى ، إحدى "الزوايا" (العلوية الأمامية اليمنى؟) لمصفوفة الصور . هل القيم الأصلية الموضحة في السجل لها تفسير ملموس (مثل المليمترات أو شيء من هذا القبيل)؟ ماذا تمثل هذه الأرقام؟ سامح جهلي ، لقد تعلمت ذاتيًا في كل شيء يتعلق بالتصوير / علم الأشعة ، لكنني أريد أن أفهم هذه المفاهيم مقابل مجرد تنفيذ الحلول لجعل الأشياء تعمل.

إليك بعض الموارد التي قد تكون مفيدة:

أتمنى أن يساعدك هذا!

fedorov شكرًا جزيلاً لك على الوقت الذي

لذلك يبدو لي أن إعادة التشكيل لها دورين مهمين لكنهما متميزين لضمان المحاذاة الهندسية بين مجلدين:

1) أولاً ، إذا لزم الأمر ، قم بتخزين الحجم الأصغر حتى يتطابق مع نفس الحجم / الأبعاد للحجم المرجعي ، باستخدام شيء مثل الجيران الأقرب.

2) بعد ذلك ، بمجرد اتفاق الحجم ، استخدم معلومات الأصل والاتجاه والتباعد لأخذ عينات من وحدات البكسل بحيث تضمن أن مجلدين في محاذاة تشريحية / فيزيائية يتم فهرستها أيضًا بنفس الطريقة (أي محاذاة فهرس الصفيف ).

هل سيكون هذا ملخصًا عادلاً لدور إعادة التشكيل؟

أيضًا ، شكرًا لك على مشاركة هذه الموارد ، وأتطلع إلى العمل من خلالها لتعزيز فهمي.

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

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

fedorovJoostJM أعلم أن هذه القضية مغلقة ، وأنا أقدر بشدة كل المساعدة التي قدمتها لكما . أردت فقط أن أعود إلى الوراء لتوضيح فهمي. بعد قراءة الكثير من الموارد التي قدمتها كل واحدة ، ومشاهدة بعض مقاطع الفيديو المفيدة ، أشعر براحة أكبر مع هذه المفاهيم.

لذلك في المثال الذي ولّد هذه المشكلة ، نظرًا لأن القناع مشتق من نفس الصورة التي تم استخدامها لاستخراج الميزة ، كان التباعد هو نفسه. بمعنى آخر ، يحمل تغيير وحدة واحدة في موقع فوكسل في أي من اتجاهات x و y و z إما للقناع أو الصورة نفس تفسير التغيير المادي. في الحالات التي يكون فيها التباعد هو نفسه بين القناع والصورة ، لن تكون هناك حاجة إلى الاستيفاء "لملء الفجوات" ، أليس كذلك؟ لذا ، فإن إعادة تشكيل القناع ستضمن ببساطة تطابقًا هندسيًا مع الصورة فيما يتعلق بكل من أبعاد الحجم ، بالإضافة إلى ضمان أن كلا المجلدين اللذين يكونان في محاذاة فيزيائية يتم أيضًا فهرستها بالصفيف بنفس الطريقة (فيما يتعلق بالاتجاه والأصل ). هل حصلت على هذا الصحيح في النهاية؟

إذا لم تكن المسافات متماثلة بين مجلدين ، فستحتاج إلى إقحام وحدات البكسل للحصول على مجلدين في محاذاة هندسية. على سبيل المثال ، إذا كان تباعد الصورة [1 مم ، 1 مم ، 1 مم] وكان القناع [2 مم ، 2 مم ، 2 مم] ، فستحتاج إلى إقحام وحدات البكسل في القناع "لملء الفجوات" في التباعد المادي.

شكرا مرة أخرى على مساعدتك. لقد أحدثت كل الاختلاف.

warkentinmatt نعم ، هذا منطقي ، أعتقد أنك

مصدر آخر مفيد يتعلق بإعادة التشكيل هو هذه الصفحة: https://www.slicer.org/wiki/Registration : Resampling

تضمين التغريدة شكرا مرة أخرى على مساعدتك.

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

بالتأكيد ، يسعدنا الاتصال ومعرفة المزيد حول كيفية استخدام البيراديوميكس! فقط أرسل لي بريدًا إلكترونيًا (إنه عام في ملفي الشخصي على جيثب) ، ويمكننا أن نتقابل لتناول القهوة

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات