2015-10-16 25 views
0

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

所以,我想用这种方式:

//------------------------------------------------------------------------- 
// 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新手,我强烈需要它为我的研究项目,我会很高兴,如果有人可以解释我做错了什么,并指出一个正确的解决方案。

谢谢

回答