在VTK中获取特定轮廓

问题描述

我喜欢从图像数据中获取特定轮廓。 我的主要目标是重新整理网格形式的多数据。所以我遵循以下管道:

  1. 使用PolyDataToImageData将多数据转换为图像

  2. 将上述图像输出转换为vtkImageDataGeometryFilter

  3. 使用vtkImplicitPolyDataDistance计算与原始多数据的距离

  4. 在步骤2中将距离值复制到图像输出标量

    结果如下:

    enter image description here

  5. 然后我尝试使用vtkContourFilter来获取具有SetValue(0,0.0)的多数据。如您所见,结果并不完全正确:

    enter image description here

距离数组的值是https://pastebin.ubuntu.com/p/2mZsgdrcmX/,并且永远不会为0,因此我认为我在SetValue中做错了,但是我也不知道如何获取特定的绿色轮廓。

有什么方法可以获取这些绿色点的轮廓吗?

解决方法

我不太确定您是否了解管道。

vtkContourFilter中,SetValue采用两个参数。第一个是轮廓的ID(因为过滤器可以一次提取多个轮廓,请参见SetNumberOfContours)。第二个是轮廓的等值线。 在这里,将等值设置为0.0。这意味着您希望这些点位于原始数据集的距离0处。看第一张图像,似乎是这些红点。如果要在绿色点处绘制轮廓,则可能需要指定更高的标量值。

PS:如果管道的目标是使形状具有“更大的形状”,则还可以查看vtkWarpVector(并为其指定多数据的法线)。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...