这曾经是“ 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
...
是的,我现在尝试运行它并遇到相同的崩溃,就在这里:
```shapeSeg = shapeSegList [10]
itkw.view(image = sw2vtkImage(shapeSeg),
slicing_planes = True,
轴=真,
旋转=真,
插值=真)
简化了问题,看起来像Image :: resample是这里的罪魁祸首。 重新采样后,ellipsoid_05加载查看器,而ellipsoid_00导致内核在尝试使用itk.view()时崩溃。
经过测试之后, 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
...加载时看起来像是空的:
...以及运行时的外观。 将05更改为00,然后在itkw尝试渲染时再次运行使其崩溃。
转置或...可以渲染的数组
如果您还记得的话,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分支中)。
我想建议我们发布该版本并将其推向下一个版本,因为该版本对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查看器只能显示未缩放的版本,否则将导致崩溃。
这是一个pyvista体积,显示了未缩放的椭圆体和缩放的版本。
我不太喜欢pyvista查看器与itk查看器相比显示边界的方式。
但是它们是正确的,并且显示的是物理坐标。