网格上的VTK / ITK骰子相似系数

时间:2016-03-25 10:15:21

标签: mesh vtk overlap itk

我是 VTK 的新手,我正在尝试从2个网格开始计算骰子相似系数(DSC)。 DSC可以计算为2 Vab / (Va + Vb),其中Vab是网格A和网格B之间的重叠体积。

要读取网格(即使用3D切片器导出的.vtk格式的器官轮廓,https://www.slicer.org),我使用以下代码段:

string inputFilename1 = "organ1.vtk";

// Get all data from the file
vtkSmartPointer<vtkGenericDataObjectReader> reader1 = vtkSmartPointer<vtkGenericDataObjectReader>::New();
reader1->SetFileName(inputFilename1.c_str());
reader1->Update();

vtkSmartPointer<vtkPolyData> struct1 = reader1->GetPolyDataOutput();

我可以使用vtkMassProperties计算两个网格的体积(虽然我观察到用VTK计算的数据与使用3D切片计算的数据之间存在一些差异)。

然后交叉2个网格,我正在尝试使用vtkIntersectionPolyDataFilter。但是,此过滤器的输出是一组行,用于标记输入vtkPolyData对象的交集,而不是封闭的表面。因此,我需要以某种方式从这些线生成网格并计算其体积。

你知道哪种方法可以很好,准确地生成这样的网格以及如何做到这一点?

或者,我也尝试使用 ITK 。我找到了一个应该处理这个问题的软件包(http://www.insight-journal.org/browse/publication/762,日期为2010年),但是我无法针对最新版本的ITK进行编译。它说ITK必须使用(现已弃用)ITK_USE_REVIEW标志ON进行编译。毋庸置疑,我将新Module_ITKReview设置为ON进行编译,并且向后兼容,但没有运气。

最后,如果您有任何其他替代(可编写脚本)的软件/库来解决此问题,请告诉我。我需要自动执行这些计算。

2 个答案:

答案 0 :(得分:1)

您可以尝试vtkBooleanOperationPolyDataFilter

http://www.vtk.org/doc/nightly/html/classvtkBooleanOperationPolyDataFilter.html

filter->SetOperationToIntersection();

如果您的数据流畅且表现良好,则此过滤器效果非常好。然而,尖锐的结构,例如,源于二进制图像行进立方体算法的算法可能会产生问题。也就是说,vtkPolyDataToImageStencil在这方面并不一定表现得更好。

我曾经有过这样的印象:多边形上的布尔运算并不适用于&#34; organ&#34;大小100k多边形和更多。取决于。

答案 1 :(得分:0)

如果你想计算骰子相似系数,我建议你首先使用vtkPolyDataToImageStencil从网格中生成体积(栅格化)。 然后,计算DSC很容易。

祝你好运:)