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

VTK / ITK Dice Similarity Coefficient on Meshes

我是 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 Slicer 计算的存在一些差异)。

为了让 2 个网格相交,我尝试使用 vtkIntersectionPolyDataFilter。但是,此过滤器的输出是一组标记输入 vtkPolyData 对象的交点的线,而不是闭合曲面。因此,我需要以某种方式从这些线生成网格并计算其体积。

您知道哪种方法可以很好、准确地生成这样的网格以及如何生成吗?


或者,我也尝试使用 ITK。我找到了一个应该可以解决这个问题的包(http://www.insight-journal.org/browse/publication/762,日期为 2010 年),但我无法针对最新版本的 ITK 对其进行编译。它说 ITK 必须使用(现已弃用)ITK_USE_REVIEW 标志 ON 进行编译。不用说,我编译它时将新的 Module_ITKReview 设置为 ON 并且还具有向后兼容性,但没有成功。


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

如果您想计算骰子相似系数,我建议您首先使用 vtkPolyDataToImageStencil 从网格生成体积(光栅化)。 这样就很容易计算出DSC了。

祝你好运:)

你可以试试vtkBooleanOperationPolyDataFilter

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

filter->SetOperationToIntersection();

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

我曾经的印象是,多边形的布尔运算对于 "organs" 大小为 100k 的多边形和更多多边形来说并不是很理想。视情况而定。