0

这就是我想做的事情:我有一个 .pcd(PCL 标准格式)文件,其中存储了一个点云,我想构建它的体素表示,然后提取等值面。如果我没记错的话,我应该按照这个例子http://www.vtk.org/Wiki/VTK/Examples/Cxx/Modelling/MarchingCubes,我应该将我的 pcd 设置为 vtkVoxelModeller 而不是球体的输入。

所以我尝试了这种方式:

//-------------------------------------------------------------------------
// loading Point Cloud
//-------------------------------------------------------------------------
pcl::PointCloud<PointType>::Ptr cloud (new pcl::PointCloud<PointType>);
std::string inputFilename = "GiraffeHead_2.pcd";
if (pcl::io::loadPCDFile<PointType> (inputFilename.c_str(), *cloud) == -1)
{
    PCL_ERROR ("Couldn't read file test_pcd.pcd \n");
    return (-1);
}

PointType min_pt,max_pt;
pcl::getMinMax3D(*cloud,min_pt,max_pt);
...
//-------------------------------------------------------------------------
// copying Point Cloud into PolyData
//-------------------------------------------------------------------------
vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
for (size_t i = 0; i < cloud->points.size (); ++i)
    points->InsertNextPoint(cloud->points[i].x,cloud->points[i].y,cloud->points[i].z);

vtkSmartPointer<vtkPolyData> PCData = vtkSmartPointer<vtkPolyData>::New();
PCData->SetPoints(points);

其余代码取自示例,我所做的唯一修改是根据我的表面设置边界,并且:

voxelModeller->SetInputConnection(PCData->GetProducerPort());

当我运行可执行文件时,我得到一个空窗口:(

由于我是 VTK 的新手,我的研究项目非常需要它,如果有人能解释我做错了什么并指出正确的解决方案,我会非常高兴。

谢谢

4

1 回答 1

0

我发现本教程已被弃用。

下列的:

http://www.vtk.org/Wiki/VTK/Examples/Cxx/PolyData/ImplicitModeller

http://www.paraview.org/Wiki/ParaView/PCL_Plugin

成功了!

于 2015-10-17T15:48:37.617 回答