Shapeworks: 在笔记本中使用shapeworks后使用itkwidgets.view时,某些分辨率的渲染体积崩溃

创建于 2021-03-23  ·  22评论  ·  资料来源: SCIInstitute/ShapeWorks

这曾经是“ MacOS上的“修饰区隔笔记本入门”崩溃”,但是很多调查已经发现了实际的问题,这可能是由于共享库不兼容造成的。

清洁系统,清洁conda。

这是崩溃的单元格:

shapeSeg = shapeSegList[10]
itkw.view( image          = sw2vtkImage(shapeSeg),
           slicing_planes = True,
           axes           = True,
           rotate         = True,
           interpolation  = True)
Crashed Thread:        0  Dispatch queue: com.apple.main-thread

Exception Type:        EXC_BAD_ACCESS (SIGSEGV)
Exception Codes:       KERN_INVALID_ADDRESS at 0x000000014b76fff3
Exception Note:        EXC_CORPSE_NOTIFY

Termination Signal:    Segmentation fault: 11
Termination Reason:    Namespace SIGNAL, Code 0xb
Terminating Process:   exc handler [0]

VM Regions Near 0x14b76fff3:
    MALLOC_LARGE           000000014b50a000-000000014b769000 [ 2428K] rw-/rwx SM=PRV  
--> 
    MALLOC_LARGE           000000014b770000-000000014d863000 [ 32.9M] rw-/rwx SM=PRV  

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   libsystem_platform.dylib        0x00007fff564c85e6 _platform_memmove$VARIANT$Nehalem + 486
1   libvnl.dylib                    0x000000010ae40e6b vnl_vector<double>::operator=(vnl_vector<double> const&) + 139
2   _ITKCommonPython.so             0x000000014ec0d18b vnl_vector<double>::operator=(vnl_vector<double>&&) + 65
3   _ITKCommonPython.so             0x000000014eadec9d 0x14de03000 + 13483165
4   _ITKCommonPython.so             0x000000014e869165 0x14de03000 + 10903909
5   _ITKCommonPython.so             0x000000014ec611a7 itk::ProcessObject::UpdateOutputInformation() + 339
6   _ITKCommonPython.so             0x000000014e47d8fe 0x14de03000 + 6793470
7   _ITKImageGridPython.so          0x00000001538b5619 itk::ProcessObject::UpdateOutputInformation() + 117
8   _ITKImageGridPython.so          0x00000001538b5ebc itk::ProcessObject::UpdateLargestPossibleRegion() + 18
9   _ITKCommonPython.so             0x000000014e10726b 0x14de03000 + 3162731
10  python                          0x00000001044c8843 _PyMethodDef_RawFastCallKeywords + 131
11  python                          0x00000001044c81d6 _PyObject_FastCallKeywords + 598
12  python                          0x0000000104600bb7 call_function + 455
...

所有22条评论

是的,我现在尝试运行它并遇到相同的崩溃,就在这里:
```shapeSeg = shapeSegList [10]
itkw.view(image = sw2vtkImage(shapeSeg),
slicing_planes = True,
轴=真,
旋转=真,
插值=真)

简化了问题,看起来像Image :: resample是这里的罪魁祸首。 重新采样后,ellipsoid_05加载查看器,而ellipsoid_00导致内核在尝试使用itk.view()时崩溃。

Screen Shot 2021-03-24 at 11 02 20 PM

Screen Shot 2021-03-24 at 11 01 06 PM

经过测试之后, Image :: resample wrt itkwidgets.view可能有问题
尝试过的图片:ellipsoid_1mode / segmentations / ellipsoid_00.nrrd和ellipsoid_1mode / segmentations / ellipsoid_05.nrrd
->在重新采样后由pyvista包装在vtk图像中时无法绘制00
-> 05工作正常
=> pyvista绘制时,_both_都可以正常工作
我向Image :: resample投放了一些调试代码,到目前为止没有发现异常。

如果您想尝试,这是一个简单的笔记本。
wishy_washy_resample.ipynb.zip

...加载时看起来像是空的:
Screen Shot 2021-03-24 at 7 59 23 PM

...以及运行时的外观。 将05更改为00,然后在itkw尝试渲染时再次运行使其崩溃。
Screen Shot 2021-03-24 at 7 55 29 PM

转置或...可以渲染的数组
如果您还记得的话,itkwidgets可以直接渲染一个numpy数组。 但是它将该数组解释为所传递内容的转置,当使用vtk数组时它会做某些事情。 因此,通常在将图像获得的结果包装到vtk数组中之前,先对其进行转置,并简单地将vtk数组与itkwidgets一起使用,以使事情简单。

我今天早上都尝试过,不幸的是,它没有任何作用。 换位与否,numpy或vtk数组,在Image.resample之后尝试使用itkwidgets进行渲染时,它们都会崩溃。

复制还是...我在重复自己吗?
来自Image的数组可能是问题所在。 也许它指向无效的内存。 因此,让我们创建一个副本!
复制数组后-在order='C'order='F' ,转置,修改,在编写函数时站在我的头上,并希望对其进行全面考虑,_每次仍会崩溃。

这表明数组本身的大小可能是个问题。 确认这一点的一种方法是,以相同的间隔( [1,1,2] )调用resample,效果很好。 另一种方法是创建一个具有可疑大小的伪造的numpy数组。 和...
请打鼓...
正在呈现...
有史以来第一次...(在GitHub中)
_shapeworks-free_ repro!

array = np.ndarray([109, 77, 204])
itkw.view(image = array)

因此,将其放入笔记本中并吸烟*。

*烟暗示着崩溃,不主张实际吸入任何东西,请注意,这是禁烟设施,不适用于任何其他优惠,...无论如何,我希望有人在微笑,因为这不是我们的问题! 除了它。 😞

array = np.ndarray([109, 77, 204])
itkw.view(image = array)
array = np.ndarray([109, 109, 204])
itkw.view(image = array)



md5-047f51858ff0a12b3bec85f300fc2efa



array = np.ndarray([109, 109, 109])
itkw.view(image = array)

所有这些示例都在未导入shapeworks时呈现了itk查看器。
导入shapeworks时崩溃。

嗯,我们有一些conda itk / vtk与shapeworks itk / vtk库交互正在进行吗?

我猜itkwidgets正在使用其他版本的itk

导入顺序并不重要,但是使用顺序很重要。 这意味着,如果导入所有内容,但在shapeworks之前使用itkwidget,则在使用shapeworks时会崩溃,反之亦然。

由于#1179的解决方案只是“不要使用itk”,因此我建议我们以相同的方式解决此问题。 除非当前没有更好的选择,否则我们从笔记本中删除itkwidgets。

听起来这是一个不错的计划。 从笔记本中删除itkwidgets是否合理? 我们用它做什么?

我们正在使用它来查看细分。 我认为我们可以改用pyvista

请注意,pyvista(据我所知)不尊重图像元信息(原点,体素间距,轴方向),但itkwidget却遵守。

请注意,pyvista(据我所知)不尊重图像元信息(原点,体素间距,轴方向),但itkwidget却遵守。

我们将对此进行深入研究,但是必须对原点有所尊重,因为可以同时在不同的位置绘制多个体积,并且此图显示了间距是用于绘制的。 我们的sw2vtkImage函数根本没有保留它(我知道我在某些情况下进行了更改,但也许它们在新的pybind分支中)。

Screen Shot 2021-03-26 at 1 34 32 PM

我想建议我们发布该版本并将其推向下一个版本,因为该版本对python和Notebook进行了许多其他改进,并且从本质上讲,我们将不得不重写它们。 也许我们只是让他们被打破。 这是公共存储库中的一个已知问题,我们有一个解决方法,以防任何用户被其使用。

(我们仍然需要修改“带有细分的入门”笔记本,以便它完成而不会崩溃,这只是意味着选择一个不同的任意图像来演示渲染。)

我同意。 让我们将其推送到6.1版本,然后我将更新发行说明和图形摘要以不再强调python内容。

在使用不会使查看器崩溃的任意图像之后,它仍然在使用平均形状图像的另外3个位置崩溃。
@cchriste

我建议我们将本笔记本从文档中排除,但文档中除外。

为我工作。 @sheryjoe吗?

pyvista显示逻辑坐标
与显示物理坐标的itkwidgets

给定问题#900,很难想象它曾经显示过物理坐标。

对于此图像(z间距= 2):

{
    dims: [93, 87, 94],
    origin: [-24, -19, -21],
    size: [93, 87, 188],
    spacing: [1, 1, 2]
}

itk查看器只能显示未缩放的版本,否则将导致崩溃。
Screen Shot 2021-03-30 at 3 57 34 PM

这是一个pyvista体积,显示了未缩放的椭圆体和缩放的版本。
Screen Shot 2021-03-30 at 3 56 20 PM

我不太喜欢pyvista查看器与itk查看器相比显示边界的方式。
但是它们是正确的,并且显示的是物理坐标。

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