vtkConnectivityFilter提取连通区域中的问题

  1. 直接使用vtkConnectivityFilter提取连通区域,渲染上没问题,但是打印出polydata中的点数,发现跟原始数据是一致的。

     for (int i = 0; i < numRegions; ++i)
     {
     	vtkSmartPointer<vtkConnectivityFilter> connectivityFilter = vtkSmartPointer<vtkConnectivityFilter>::New();
     	connectivityFilter->SetInputData(polyData);
     	connectivityFilter->SetExtractionModeToSpecifiedRegions();
     	connectivityFilter->InitializeSpecifiedRegionList();
     	connectivityFilter->AddSpecifiedRegion(i);
     	connectivityFilter->Update();
     	cout << connectivityFilter->GetOutput()->GetNumberOfPoints() << endl;
     }
    
  1. 正确的做法是后街一个vtkCleanPolyData过滤器

     for (int i = 0; i < numRegions; ++i)
    {
    	vtkSmartPointer<vtkConnectivityFilter> connectivityFilter = vtkSmartPointer<vtkConnectivityFilter>::New();
    	connectivityFilter->SetInputData(polyData);
    	connectivityFilter->SetExtractionModeToSpecifiedRegions();
    	connectivityFilter->InitializeSpecifiedRegionList();
    	connectivityFilter->AddSpecifiedRegion(i);
    	connectivityFilter->Update();
    	
    	// 使用vtkCleanPolyData删除孤立点
    	vtkSmartPointer<vtkCleanPolyData> cleanPolyData = vtkSmartPointer<vtkCleanPolyData>::New();
    	cleanPolyData->SetInputData(connectivityFilter->GetOutput());
    	cleanPolyData->Update();
    	
    	cout << cleanPolyData->GetOutput()->GetNumberOfPoints() << endl;
    }
    
相关推荐
捕鲸叉5 小时前
第01章 20 使用vtkSphereSource和vtkPolyData逐级构建球体表面数据
vtk
捕鲸叉20 小时前
第01 章 04 vtkPointSet类的特点与其派生类vtkPolyData在流量场中的应用
vtk
捕鲸叉1 天前
第01章 07 MySQL+VTK C++示例代码,实现医学影像数据的IO数据库存储
数据库·mysql·vtk
无所谓จุ๊บ4 天前
VTK知识学习(36)-图像平滑
学习·vtk
无所谓จุ๊บ9 天前
VTK知识学习(33)-交互问题2
学习·vtk
捕鲸叉15 天前
第01章 数据模型02 vtkPolyData类介绍
c++·vtk
无所谓จุ๊บ17 天前
VTK知识学习(29)-交互问题
学习·vtk
无所谓จุ๊บ18 天前
VTK知识学习(28)-区域提取
学习·vtk
无所谓จุ๊บ1 个月前
VTK知识学习(27)- 图像基本操作(二)
学习·vtk
无所谓จุ๊บ1 个月前
VTK知识学习(20)- 数据的存储与表达
学习·vtk