2015-10-16 514 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新手,我強烈需要它爲我的研究項目,我會很高興,如果有人可以解釋我做錯了什麼,並指出一個正確的解決方案。

謝謝

回答