Shapeworks: التحسين على الشبكات مع طائرات القطع

تم إنشاؤها على ١٥ فبراير ٢٠٢١  ·  8تعليقات  ·  مصدر: SCIInstitute/ShapeWorks

عندما تقوم بالتحسين على الشبكات مع مستويات القطع ، يبدو أن التحسين يتجمد بعد التهيئة. لم يتم إلقاء أي خطأ ولكنه يتعطل.

لاختبار:

  • بفك test.zip
  • القرص المضغوط قيد الاختبار
  • تشغيل: shapeworks optimize --name correspondence_1024.xml

لاحظ أنه إذا تمت إزالة مستوى القطع من xml ، فسيتم تشغيل التحسين كما هو متوقع.

bug

ال 8 كومينتر

تقرير خطأ ممتاز @ jadie1 ، يتضمن مجموعة بيانات صغيرة وإرشادات لإعادة الإنتاج.

HeavenlyBerserker ، كمرجع ، عالق هنا:

Call graph:
    5 Thread_5215217   DispatchQueue_1: com.apple.main-thread  (serial)
    + 5 start  (in libdyld.dylib) + 1  [0x7fff69ef2cc9]
    +   5 main  (in shapeworks) + 2606  [0x102bfb9fe]  shapeworks.cpp:88
    +     5 shapeworks::Executable::run(int, char const* const*)  (in shapeworks) + 188  [0x102c0ad7c]  Executable.cpp:128
    +       5 shapeworks::Executable::run(std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >, shapeworks::SharedCommandData&)  (in shapeworks) + 308  [0x102c0a6f4]  Executable.cpp:94
    +         5 shapeworks::Command::run(shapeworks::SharedCommandData&)  (in shapeworks) + 20  [0x102c14e64]  Command.cpp:27
    +           5 shapeworks::OptimizeCommand::execute(optparse::Values const&, shapeworks::SharedCommandData&)  (in shapeworks) + 921  [0x102c16889]  Commands.cpp:92
    +             5 shapeworks::Optimize::Run()  (in shapeworks) + 1938  [0x102ea5d52]  Optimize.cpp:120
    +               5 shapeworks::Optimize::Initialize()  (in shapeworks) + 1770  [0x102ea7d3a]  Optimize.cpp:733
    +                 1 itk::ParticleSystem<3u>::AdvancedAllParticleSplitting(double)  (in shapeworks) + 2133  [0x102eb46f5]  itkParticleSystem.txx:330
    +                 1 itk::ParticleSystem<3u>::AdvancedAllParticleSplitting(double)  (in shapeworks) + 2542  [0x102eb488e]  itkParticleSystem.txx:344
    +                 ! 1 itk::Constraints::IsAnyViolated(itk::Point<double, 3u> const&)  (in shapeworks) + 71  [0x102ecce67]  Constraints.h:61
    +                 1 itk::ParticleSystem<3u>::AdvancedAllParticleSplitting(double)  (in shapeworks) + 2530  [0x102eb4882]  itkParticleSystem.txx:344
    +                 1 itk::ParticleSystem<3u>::AdvancedAllParticleSplitting(double)  (in shapeworks) + 3010  [0x102eb4a62]  itkParticleSystem.txx:349
    +                 1 itk::ParticleSystem<3u>::AdvancedAllParticleSplitting(double)  (in shapeworks) + 1655  [0x102eb4517]  vector:0

أنا أؤيد جودة تقرير الخطأ هذا. لقد نظرت في المشكلة. شكرا للتحقق من هذا ، آلان.

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

أما بالنسبة للاختبار نفسه ، فهذا يحدث بسبب تموضع الشبكات. تم قطع مستويات القطع عند z = -40.5 إلى -42.5 ، ولكن تم وضع الشبكات عند z = -737.593 إلى -609.55 ، و -1217.76 إلى -1114.47 ، ومن 1079.93 إلى 1206.3 (كما هو موضح أدناه). هذا يسبب مشكلتين. أولاً ، بغض النظر عن الطريقة التي يشير بها الطبيعي (لأعلى / لأسفل) ، سيكون هناك عظمة واحدة على الأقل تنتهك القيود تمامًا. ثانيًا ، يتم تحديد نصف قطر تقسيم الجسيمات بواسطة كمية إبسيلون ، اعتمادًا على تباعد المدخلات ؛ في هذه الحالة ، يكون التباعد بالآلاف ، مما يجعل أي تقسيم من المحتمل أن ينتهك القيود.
Screenshot from 2021-02-17 13-48-13

كملاحظة ، لقد تم قطع femora الذي تستخدمه بالفعل باستخدام طريقة القص. لا أعتقد أن هذا سيتم في سيناريو حقيقي. تذكر كيف أزلت ClipBinaryVolumes وقمت بتطبيق اقتصاص لـ femur_cut.py.
Screenshot from 2021-02-17 14-01-22

يرجى تعيينني لأية مشكلات مستقبلية تتعلق بطائرات القطع (ضمن C ++). لم أختبر رمز طائرة القطع بالشبكات. ليس هناك أي سبب لعدم نجاحه ، ولكن سيكون من الجيد اختباره بحثًا عن الأخطاء. شكرا لكم جميعا!

HeavenlyBerserker ، حسنًا ، لذلك من الناحية النظرية ، إذا كانت الشبكات والطائرات

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

حسنًا ، لم أكّد أي خطأ عندما استخدمت هذه البيانات: test.zip

شكرا لمساعدتي في فهمHeavenlyBerserker
إغلاق هذا الآن

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

لقد قمنا بتقطيع بعض الشبكات بنجاح وهناك اختبارات وحدة لهذا (اختبارات الشبكة ، واختبارات بايثون ، واختبارات الأشكال).

الرجاء تعيينني لأي مشكلات مستقبلية داخل C ++.

قطعا! شكرا لك!!

HeavenlyBerserker ، هل هناك طريقة وإثارة استثناء أو رسالة خطأ؟ أنا أفضل حقًا ذلك على التعليق أو الانهيار. أيضًا ، هل هناك طريقة يمكننا التحقق منها قبل التشغيل؟ انظر # 910.

حسنًا ، يجب أن يكون من الممكن التحقق مما إذا كانت نقطة واحدة على الأقل من نقاط الشبكة / الصورة لأي إدخال تفي بالقيد. ليس خداعًا ، لكن يجب أن يعمل 99.9٪ من الوقت.

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

القضايا ذات الصلة

iyerkrithika21 picture iyerkrithika21  ·  12تعليقات

akenmorris picture akenmorris  ·  32تعليقات

iyerkrithika21 picture iyerkrithika21  ·  7تعليقات

akenmorris picture akenmorris  ·  23تعليقات

akenmorris picture akenmorris  ·  16تعليقات