Shapeworks: 具有切割平面的网格的优化

创建于 2021-02-15  ·  8评论  ·  资料来源: SCIInstitute/ShapeWorks

当在具有切割平面的网格上进行优化时,优化似乎在初始化后冻结。 没有引发任何错误,但是卡住了。

去测试:

  • 解压test.zip
  • 光盘进入测试
  • 运行: shapeworks optimize --name correspondence_1024.xml

请注意,如果从xml中删除了切割平面,则优化将按预期运行。

所有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(如下所示)。 这导致两个问题。 首先,不管法线指向哪个方向(向上/向下),都会有至少一个完全违反约束条件的股骨。 其次,取决于输入间距,粒子分裂半径由数量ε决定; 在这种情况下,间隔为1000s,因此任何拆分都可能违反约束。
Screenshot from 2021-02-17 13-48-13

请注意,您使用的股骨已经使用修剪方法进行了修剪。 我认为这不会在实际情况下完成。 回想一下我如何删除ClipBinaryVolumes并为femur_cut.py applyCropping。
Screenshot from 2021-02-17 14-01-22

请指派我处理有关切割平面的任何未来问题(在C ++中)。 我尚未使用网格测试切割平面的代码。 没有任何理由它不起作用,但是最好对它进行错误测试。 谢谢,大家!

@HeavenlyBerserker哦,好的,从理论上讲,如果网格和切割平面有意义,那么该错误将不存在吗? Joe需要使用未修剪的股骨网格上的切割平面进行优化,我试图为他提供一个示例xml。 因此,我只是制作了切割平面并使用了股骨网格物体,但是如果我对此更加谨慎,那它应该起作用吗?

是的,我尝试过切割不会被破坏但碰到间距问题的飞机,但是它可以工作。 如果您可以将所有股骨放在相同的基本区域内,并调整切面合理,我认为没有理由这样做不可行,尤其是考虑到您仅使用一个切面。

好的,是的,当我使用以下数据时,确认没有错误: test.zip

感谢您帮助我了解@HeavenlyBerserker
现在关闭

我尚未使用网格测试切割平面的代码。 没有任何理由它不起作用,但是最好对它进行错误测试。

我们已经成功地切碎了一些网格物体,并为此进行了单元测试(MeshTests,PythonTests和shapeworksTests)。

请指定我将来在C ++中遇到的任何问题。

绝对地! 谢谢!!

@HeavenlyBerserker ,是否可以通过任何方式检测到这种情况并引发异常或错误消息? 我真的更喜欢挂或崩溃。 另外,有没有一种方法可以在运行之前进行验证? 参见#910。

嗯,应该有可能检查任何输入的至少一个网格/图像点是否满足约束条件。 并非万无一失,但应该可以在99.9%的时间内工作。

此页面是否有帮助?
0 / 5 - 0 等级