vtk如何使用点云聚类算法



我希望能够在c#中聚类点云,不幸的是,PCL不支持c#。我知道c#可以使用VTK,所以我想知道是否有可能用VTK聚类点云,但我不知道是否可能。希望有人能给我一些建议。提前感谢!

我试过在VTK中使用欧几里得聚类,但效果不太好。我希望结合c#和VTK来实现区域增长算法,或者其他点云分割算法,只要能用c#就可以了

使用vtk的vtkEuclideanClusterExtraction实际上并不是一个坏主意。

为了使算法工作良好,你需要确保你的点云是干净的,所以没有很多异常点。对于此任务,您可以使用vtkStatisticalOutlierRemoval为例。

下面是一个关于如何使用算法(c++)的例子:

vtkNew<vtkSimplePointsReader> readPointCloud;
readPointCloud->SetFileName(inputWest4.c_str());
readPointCloud->Update();
//Clean PointCloud 
vtkNew<vtkStatisticalOutlierRemoval> removal;
removal->SetInputConnection(readPointCloud->GetOutputPort());
removal->SetSampleSize(5);
removal->SetStandardDeviationFactor(1.0);
removal->Update();
// Cluster Extraction
vtkNew<vtkEuclideanClusterExtraction> cluster;
cluster->SetInputConnection(removal->GetOutputPort());
cluster->SetExtractionModeToAllClusters();
cluster->SetRadius(1.1);
//cluster->ColorClustersOn();
cluster->Update();
cout << "Number of Extracteed Clusters: " << cluster->GetNumberOfExtractedClusters() << endl;

注意:使用cluster->SetExtractionModeToAllClusters(),我确保提取所有可以在点云中找到的集群。例如,使用cluster->SetExtractionModeToLargestCluster(),我可以提取最大的集群。

输出:

cout——比;14

用蓝色和红色标记的簇

最新更新