VTK 几何体连通区域分析 vtkPolyDataConnectivityFilter

这篇具有很好参考价值的文章主要介绍了VTK 几何体连通区域分析 vtkPolyDataConnectivityFilter。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:

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

VTK 几何体连通区域分析 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 region
    vtkPolyData * 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 plydata
   connectivityFilter->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 获取所有连通区域文章来源地址https://www.toymoban.com/news/detail-430952.html

    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;
 

到了这里,关于VTK 几何体连通区域分析 vtkPolyDataConnectivityFilter的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • d3d12龙书阅读----绘制几何体(上)

    本节主要介绍了构建一个简单的彩色立方体所需流程与重要的api 下面主要结合立方体代码分析本节相关知识 输入装配器阶段的输入 首先,我们需要定义立方体的八个顶点 顶点结构体: 当然,对于更复杂的情况,我们不仅要定义顶点的位置与颜色,还要包括法线向量、纹理

    2024年03月27日
    浏览(61)
  • 【ThreeJS基础教程-初识Threejs】1.6各种各样的几何体

    本段内容会写在0篇以外所有的,本人所编写的Threejs教程中 对,学习ThreeJS有捷径 当你有哪个函数不懂的时候,第一时间去翻一翻文档 当你有哪个效果不会做的时候,第一时间去翻一翻所有的案例,也许就能找到你想要的效果 最重要的一点,就是,绝对不要怕问问题,越怕找

    2024年02月08日
    浏览(48)
  • Three.js——scene场景、几何体位置旋转缩放、正射投影相机、透视投影相机

    个人简介 👀 个人主页: 前端杂货铺 🙋‍♂️ 学习方向: 主攻前端方向,正逐渐往全干发展 📃 个人状态: 研发工程师,现效力于中国工业软件事业 🚀 人生格言: 积跬步至千里,积小流成江海 🥇 推荐学习:🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2/3项目实战 🥝Node.js🍒

    2024年04月14日
    浏览(54)
  • 【前端知识】Three 学习日志(十)—— 常见几何体(长方体、球体、圆柱、矩形平面、圆形平面)

    Three 学习日志(十)—— 常见几何体(长方体、球体、圆柱、矩形平面、圆形平面) 一、构建常用几何体 二、 遍历加入场景中 三、效果展示 四、完整代码

    2024年02月07日
    浏览(38)
  • 10---OpenCV:图像进阶操作之连通区域分析

    图像的连通域是指图像中具有相同像素值并且位置相邻的像素组成的区域,连通域分析是指在图像中寻找出彼此互相独立的连通域并将其标记出来 。提取图像中不同的连通域是图像处理中较为常用的方法,例如在车牌识别、文字识别、目标检测等领域对感兴趣区域分割与识别

    2024年02月16日
    浏览(48)
  • 计算机视觉任务图像预处理之去除图像中的背景区域-------使用连通域分析算法(包含完整代码)

    通过连通域分析算法能够找到最大的连通域,即图片的主体部分,然后保存该连通域的最小外接矩阵,即可去除掉无关的背景区域 更多图像预处理操作工具集包含在这个github仓库中

    2024年02月06日
    浏览(56)
  • OpenCV 通过计算连通域面积过滤面积小的区域–Python

    代码参考:https://blog.csdn.net/u014264373/article/details/119486850 通过卷积神经网络预测图像的分割结果时,会发现分割外部出现了小面积的连通域。 常识告诉我们,这么小的物体一定不是我们的分割目标,因此,我们通过后处理的方法把它过滤掉,可以提高分割准确度。 这种小面积

    2024年02月08日
    浏览(61)
  • Halcon区域几何变换和仿射变换

    算子参数: move_region(Region : RegionMoved : Row, Column : ) 1.Region(输入要移动的区域) 2.RegionMoved(输出移动后区域) 3.Row(输入要移动区域的向量的行距离 point.y ) 4.Column(输入要移动区域的向量的列距离 point.x) 实例: 效果图:

    2023年04月08日
    浏览(58)
  • OPENCV C++图像提取,图像处理,roi,阈值分割,连通区域筛选,边缘检测(以箱子边缘框选为例)

    本周有机会接触了一点opnev, 在此做一下记录, 最终以 框选出下图箱子为目的( 图片箱子为相机实拍结果,曝光有点低,会有亿点点暗 ), 本文会拆解步骤并附上图片, 完整的源码在最后.PS: 本文参考了好多大佬分享的理论知识, 在此先感谢大佬的分享~~ 首先是梳理一下流程, 下图是

    2024年02月07日
    浏览(52)
  • OpenCV——图像连通域分析

       cv::connectedComponents 函数将二值图像分割成多个连通区域,每个连通区域被赋予一个唯一的标签。函数的返回值为标签数目。该函数的原型如下: image :输入图像。 labels :输出的连通区域标签图像。 connectivity :为连通性。 ltype :输出图像的数据类型。 cv::connectedCompon

    2024年02月11日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包