当前位置: 首页 > news >正文

VTK 几何体连通区域分析 vtkPolyDataConnectivityFilter

前言:

   vtkPolyDataConnectivityFilter 使用过,但网上没有看到完事的教程;这里整理一下;

 

提取数据集中连通的多边形数据。

该类是一个滤波器,提取cell(区域) - 拥有公共点或者满足某个阈值

该类在提取连通区域时候有如下6种模式:
   1 )提取数据集中的最大(最多点)连接区域:SetExtractionModeTo LargestRegion();
    2)提取指定区域号:SetExtractionModeTo SpecifiedRegions();
    3)提取共享指定点ids的所有区域:SetExtractionModeTo PointSeededRegions();
    4)提取共享指定单元ID的所有区域:SetExtractionModeTo CellSeededRegions();
    5)提取最靠近指定点的区域:SetExtractionModeTo ClosestPointRegion();
    6)提取所有区域(用于着色区域):SetExtractionModeTo AllRegions()

这个滤波器是针对多边形数据的。

通过修改 ScalarConnectivity 该布尔值,可以修改该类的行为。如果该值为true,算法中① 共享一个点的cell 会被认为是几何连通的;②cell中点的标量在指定的标量范围内;这两种情况下,cell会被认为是连通的。

如果 ScalarConnectivity 和 FullScalarConnectivity 都为 true,只有当cell中所有的点的标量值满足指定范围,该cell才会被认为是连通的。如果 FullScalarConnectivity 为false,cell中任何一个点满足标量的指定范围都会被认为是连通的。

ColorRegionsOn() 用于对不同的连通区域着色。

1. LargestRegion 这种通常取最大的哪个;

vtkNew<vtkPolyDataConnectivityFilter> ConnectivityFilter ;ConnectivityFilter->SetInputConnection(polyData);ConnectivityFilter->SetExtractionModeToLargestRegion();ConnectivityFilter->Updata()
// get largest region
mPolydata->DeepCopy(ConnectivityFilter->GetOutput());

2. SpecifiedRegions 可能会有多个连通区域,每个有相应Id;

需要在第6个的基础上,取其中一个 ;

    vtkNew<vtkConnectivityFilter> connectivityFilter;connectivityFilter->SetInputData(mVtkPolyDataAll);connectivityFilter->SetExtractionModeToAllRegions();connectivityFilter->ColorRegionsOn();connectivityFilter->Update();int regionNum = connectivityFilter->GetNumberOfExtractedRegions()  # 获取连通区域的数目
for (int i =0;i<regionNum;i++)
{connectivityFilter2 = vtk.vtkPolyDataConnectivityFilter()connectivityFilter2.SetInputData(mVtkPolyDataAll)connectivityFilter2.InitializeSpecifiedRegionList()   # 清空要提取的连通区域号的列表connectivityFilter2.SetExtractionModeToSpecifiedRegions()  # 用于提取一个或多个连通区域connectivityFilter2.AddSpecifiedRegion(i)  # 设置提取的连通区域号connectivityFilter2.Update()// get one regionvtkPolyData * polydata = connectivityFilter2->GetOutput();
}


 3. SetExtractionModeToPointSeededRegions 获取包含一个 点 id 的区域;

需要先找到一个点Id,这个 id 通常需要使用交互,鼠标选择得到 ;

  vtkSmartPointer<vtkPolyDataConnectivityFilter> connectivityFilter =vtkSmartPointer<vtkPolyDataConnectivityFilter>::New();connectivityFilter->SetInputData(appendFilter->GetOutput());connectivityFilter->SetExtractionModeToPointSeededRegions();connectivityFilter->AddSeed(100);connectivityFilter->Update();// get plydataconnectivityFilter->GetOutput();

4. SetExtractionModeToCellSeededRegions 需要指定一个 cell id;

vtkSmartPointer<vtkPolyDataConnectivityFilter> connectivityFilter = vtkSmartPointer<vtkPolyDataConnectivityFilter>::New();connectivityFilter->SetInputData(polyData);connectivityFilter->SetExtractionModeToCellSeededRegions(); connectivityFilter->InitializeSeedList();connectivityFilter->AddSeed(cellId); connectivityFilter-Update();

6. SetExtractionModeToClosestPointRegion 提取最靠近指定点的区域

vtkSmartPointer<vtkPolyDataConnectivityFilter> connectivityFilter = vtkSmartPointer<vtkPolyDataConnectivityFilter>::New();connectivityFilter->SetInputData(polyData);connectivityFilter->SetExtractionModeToClosestPointRegion(); connectivityFilter->InitializeSeedList();connectivityFilter->AddSeed(PointId); connectivityFilter-Update();

6. SetExtractionModeToAllRegions 获取所有连通区域

    vtkSmartPointer<vtkPolyDataConnectivityFilter> connectFilter1=vtkSmartPointer<vtkPolyDataConnectivityFilter>::New();connectFilter1->SetInputConnection(contourFilter->GetOutputPort());connectFilter1->SetExtractionModeToAllRegions();connectFilter1->ColorRegionsOn();connectFilter1->MarkVisitedPointIdsOn();connectFilter1->Update();int regionNum=connectFilter1->GetNumberOfExtractedRegions();qDebug()<<"regionNum:"<<regionNum;

http://www.lryc.cn/news/63566.html

相关文章:

  • scss、css样式中使用变量的方法;Vue动态改变css等样式文件中的变量
  • 数据治理在学术上的发展史以及未来展望
  • 【搭建博客】宝塔面板部署Typecho博客,并发布上线访问
  • 【Spring篇】IOC相关内容
  • Python超矩形
  • 【软考数据库】第五章 计算机网络
  • 深眸科技|深度学习、3D视觉融入机器视觉系统,实现生产数智化
  • DateFormat使用时需要注意:多线程下需要特殊处理
  • Packet Tracer - 研究直连路由
  • 大专生程序员找工作的一点小建议 知识分享 经验分享
  • PyCaret:低代码自动化的机器学习工具
  • 【Hello Network】网络编程套接字(三)
  • 3.4 只读存储器
  • 从后端开发转大数据开发怎么样?
  • 编程式导航路由跳转到当前路由(参数不变),多次执行会抛出NavigatorDuplicated的禁告错误?
  • AppArmor无内核及系统日志的问题及解决
  • 本地更改配置ssh密钥和更改github网址
  • MATLAB函数封装2:QT调用封装函数
  • AJAX和JSON
  • 源码:SharedPreferences分析
  • 大二一个学期学这么点内容,没有概念,只有实操
  • AppWeb 身份验证绕过漏洞 (CVE-2018-8715)
  • 为什么监控摄像头画面不如手机拍摄视频画面清晰
  • EU GMP附录一与关键区域空气微生物取样方案及相关法规标准解读
  • 【软件测试】自动化测试日志问题该怎么解决?测试老鸟总结方案...
  • 快速响应 智慧应急|大势智慧亮相第三届武汉国际安全应急博览会
  • MySQL数据库——MySQL DELETE:删除数据
  • 管家婆安装导致电脑蓝屏问题解决方案
  • Compiler Lab1- 自制词法分析器
  • 构建API的战斗——与来自Kong的Marco Palladino的问答