【问题标题】:Getting a specific contour in VTK在 VTK 中获取特定轮廓
【发布时间】:2020-08-23 12:15:22
【问题描述】:

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

  1. 使用 PolyDataToImageData 将 polydata 转换为图像

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

  3. 使用 vtkImplicitPolyDataDistance 计算与原始 polydata 的距离

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

    结果如下:

  5. 然后我尝试使用 vtkContourFilter 通过 SetValue(0, 0.0) 获取 polydata。如您所见,结果并不完全正确:

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

有没有办法得到那些绿点轮廓?

【问题讨论】:

  • 不明白。您的输入是多数据还是图像?此外,管道的第一步应该包含一个错误。
  • 对不起,如果我不清楚,我的输入是一个多数据。第一步是简单地转换为图像(我通过将其传递给行进立方体/轮廓过滤器进行了双重检查,它给出了正确的体素化形状)

标签: vtk vtk.js isosurface


【解决方案1】:

我不完全了解您的管道。

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

PS:如果您的管道的目标是拥有“更大版本”的形状,您还可以查看 vtkWarpVector(并为其提供多数据的法线)。

【讨论】:

  • 谢谢查尔斯,我能够按照你的建议获得更高的标量值,但我开始知道那些绿色/黄色点是标量值的范围,所以对于一个定义的 iso 值,我可以说 0.1除非多数据到图像的转换间距非常接近,否则表面数量很少,这需要花费大量时间来处理。所以我可能不得不考虑其他事情
  • 我的最终目标是创建一个像这样的网格:vtk.1045678.n5.nabble.com/…。所以我现在正在研究超级树网格。我现在在步骤 1 中使用 PolyDataToImageData(相同的 vtk 示例)将其发送到 vtkHyperTreeGridSource 输入,但我总是得到:尝试为具有 0 个输入端口的算法连接输入端口索引 0。你知道我如何将 polydaya 或图像传递给 HyperTreeGridSource。我计划使用此输出将其转换为非结构化网格,然后使用我的管道(隐式距离等)在 iso 值 0.0 处获取轮廓
  • 对不起,我对这种细分不熟悉。对于这种任务,我使用了一个 morse smale 四边形,您在库名称 TTK 中有一个用作 VTK 模块。你有一个例子here
猜你喜欢
  • 1970-01-01
  • 2016-05-13
  • 2018-05-06
  • 2019-01-25
  • 1970-01-01
  • 1970-01-01
  • 2012-08-29
  • 2015-07-24
  • 1970-01-01
相关资源
最近更新 更多