1.连通区域分析

许多图形数据中,并非只包含一个对象(连通区域)。而在处理这些图形数据时,有时需要对每一个对象单独处理或者让其单独显示。比如,利用MarchingCube方法提取三维图像中的 等值面,得到的结果往往是存在多个连通的对象区域,这就是需要对图形数据进行连通分析,提取每个联通区并计算其属性信息,以此来得到需要的连通区域。

下面的例子中构造了一个含有多个连通区域的梦想数据。vtkAppendPolyData可以实现vtkPolyData的合并,使用该类可以方便的构造多个连通区域的数据,该类型接受两个或者多个VTKPolyData数据输入,合并结果包含输入数据的所有几何和拓扑数据。若输入为两个或者多个数据都含有点属性数据,则将去存储值输出结果中;对于单元属性亦是如此。

vtkPolyDataConnectivityFilter连通区域分析:提取数据集中连通的多边形数据。该类是一个滤波器,提取cell(区域)-拥有公共点或者满足某个阈值
该类在提取连通区域时候有如下6中模式:
1)提取数据集中的最大(最多点)连接区域:SetExtractionModeTo LargestRegion();
2)提取指定区域号:SetExtractionModeTo SpecifiedRegions();
3)提取共享指定点ids的所有区域:SetExtractionModeTo PointSeededRegions();该模式下需要使用AddSeed()函数添加种子点,提取种子点所在的区域。
4)提取共享指定单元ID的所有区域:SetExtractionModeTo CellSeededRegions();模式下需要使用AddSeed()函数调价种子单元,提取种子单元所在的区域。
5)提取最靠近指定点的区域:SetExtractionModeTo ClosestPointRegion();该模式需要使用SetClosestPoint()函数设置一个空间点坐标,执行结果为离该点最近的连通区域。
6)提取所有区域(用于着色区域):SetExtractionModeTo AllRegions()该模式主要用于连通区域标记,配合函数ColorRegionsOn()使用,在连通区域像是的同时,生成一个名为RegionId的点属性数据。
这个滤波器值针对多边形数据的。另外通过修改ScalarConnectivity该布尔值,可以修改该累的行为。如果该值为true,算法中①共享一个点的cell会被认为是几何连通的;②cell中点的标量在指定的标量范围内;这两种情况下,cell会被认为是连通的。如果ScalarConnectivity和FullScalarConnectivity都为true,只有当cell中所有的点的标量值满足指定的范围,该cell才会被认为是连通的。如果FullScalarConnectivity为false,cell中任何一个点满足标量的指定范围都会被认为连通的。

运行代码

#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkRenderingFreeType);
VTK_MODULE_INIT(vtkInteractionStyle);#include <vtkSmartPointer.h>
#include <vtkSphereSource.h>
#include <vtkConeSource.h>
#include <vtkAppendPolyData.h>
#include <vtkPolyDataConnectivityFilter.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkProperty.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
int main()
{vtkSmartPointer<vtkSphereSource> sphereSource =//创建一个球体vtkSmartPointer<vtkSphereSource>::New();sphereSource->SetRadius(10);//半径sphereSource->SetThetaResolution(10);//竖:为10sphereSource->SetPhiResolution(10);//横:为10sphereSource->Update();vtkSmartPointer<vtkConeSource> coneSource =//创建一个椎体vtkSmartPointer<vtkConeSource>::New();coneSource->SetRadius(5);//椎体的底面半径coneSource->SetHeight(10);//椎体的高coneSource->SetCenter(25, 0, 0);//coneSource->Update();vtkSmartPointer<vtkAppendPolyData> appendFilter =//kAppendPolyData可以实现vtkPolyData的合并,使用该类可以方便的构造多个连通区域的数据,该类型接受两个或者多个VTKPolyData数据输入,合并结果包含输入数据的所有几何和拓扑数据vtkSmartPointer<vtkAppendPolyData>::New();appendFilter->AddInputData(sphereSource->GetOutput());appendFilter->AddInputData(coneSource->GetOutput());appendFilter->Update();vtkSmartPointer<vtkPolyDataConnectivityFilter> connectivityFilter =vtkSmartPointer<vtkPolyDataConnectivityFilter>::New();connectivityFilter->SetInputData(appendFilter->GetOutput());connectivityFilter->SetExtractionModeToCellSeededRegions();//提取共享指定单元ID的所有区域:connectivityFilter->AddSeed(100);connectivityFilter->Update();vtkSmartPointer<vtkPolyDataMapper> originalMapper =vtkSmartPointer<vtkPolyDataMapper>::New();originalMapper->SetInputConnection(appendFilter->GetOutputPort());originalMapper->Update();vtkSmartPointer<vtkActor> originalActor =vtkSmartPointer<vtkActor>::New();originalActor->SetMapper(originalMapper);vtkSmartPointer<vtkPolyDataMapper> extractedMapper =vtkSmartPointer<vtkPolyDataMapper>::New();extractedMapper->SetInputConnection(connectivityFilter->GetOutputPort());extractedMapper->Update();vtkSmartPointer<vtkActor> extractedActor =vtkSmartPointer<vtkActor>::New();extractedActor->SetMapper(extractedMapper);//double leftViewport[4] = { 0.0, 0.0, 0.5, 1.0 };double rightViewport[4] = { 0.5, 0.0, 1.0, 1.0 };vtkSmartPointer<vtkRenderer> leftRenderer =vtkSmartPointer<vtkRenderer>::New();leftRenderer->SetViewport(leftViewport);leftRenderer->AddActor(originalActor);leftRenderer->SetBackground(1, 0, 0);vtkSmartPointer<vtkRenderer> rightRenderer =vtkSmartPointer<vtkRenderer>::New();rightRenderer->SetViewport(rightViewport);rightRenderer->AddActor(extractedActor);rightRenderer->SetBackground(0, 0, 0);vtkSmartPointer<vtkRenderWindow> renderWindow =vtkSmartPointer<vtkRenderWindow>::New();renderWindow->AddRenderer(leftRenderer);renderWindow->AddRenderer(rightRenderer);renderWindow->SetSize(640, 320);renderWindow->Render();renderWindow->SetWindowName("PolyDataConnectedCompExtract");leftRenderer->ResetCamera();rightRenderer->SetActiveCamera(leftRenderer->GetActiveCamera());vtkSmartPointer<vtkRenderWindowInteractor> interactor =vtkSmartPointer<vtkRenderWindowInteractor>::New();interactor->SetRenderWindow(renderWindow);interactor->Initialize();interactor->Start();return 0;
}

运行截图

VTK:图形基本操作进阶——连通区域分析相关推荐

  1. VTK:图形基本操作进阶——点云配准技术(LandMark标记点算法和坐标系显示方法)

    1.点配准 在计算机逆向工程中,通过三维扫描等实物数字化技术可以获取各种点云数据.但是受到测量环境和设备的影响,再一次测量的情况下,难以获得实物整体的点云数据,因此需要多次从不同的角度进行测量.但是不 ...

  2. VTK修炼之道51:图形基本操作进阶_连通区域分析

    1.连通区域分析 许多图形数据中,并非只包含一个对象(连通区域).而在处理这些图形数据时,有时需要对每一个对象单独处理或者让其单独显示.比如,利用MarchingCube方法提取三维图像中的等值面,得 ...

  3. opencv笔记(十八)——连通区域分析

    本文主要介绍在CVPR和图像处理领域中较为常用的一种图像区域(Blob)提取的方法--连通性分析法(连通区域标记法).文中介绍了两种常见的连通性分析的算法:1)Two-pass:2)Seed-Fill ...

  4. OpenCV二值图像处理——阈值,连通区域分析(C++)

    阈值 阈值又叫临界值,是指一个效应能够产生的最低值或最高值 对于图像的直方图存在明显边界的图像,我们可以很容易找到这个阈值,但是如果图像直方图分界不明显,那么这个阈值的寻找将变得十分困难.因此我们存在 ...

  5. OpenCV与图像处理学习九——连通区域分析算法(含代码)

    OpenCV与图像处理学习九--连通区域分析算法(含代码) 一.连通区域概要 二.Two-Pass算法 三.代码实现 一.连通区域概要 连通区域(Connected Component)一般是指图像中 ...

  6. opencv(十三)-快速连通区域分析

    索引目录 1.连通区域标记算法 2.剔除小连通区域 参考 1.连通区域标记算法 连接区域标记算法(connected component labeling algorithm)是图像分析中最常用的算法 ...

  7. OpenCv连通区域分析——Two-Pass 算法区域生长算法

    连通区域(Connected Component)一般是指图像中具有相同像素值且位置相邻的前景像素点组成的图像区域.连通区域分析是指将图像中的各个连通区域找出并标记,通常连通区域分析处理的对象是一张二 ...

  8. VTK修炼之道46:图形基本操作进阶_三角网格体积、表面积、测地距离、包围盒

    1.基本图形操作意义 图形处理,比如图形平滑.多分辨率分析.特征提取等都离不开一些基本的图形操作.掌握这些基本的图形操作有助于理解和深入学习图形处理和分析方法. VTK中提供了多种图形的基本操作,其中 ...

  9. VTK修炼之道58:图形基本操作进阶_点云配准技术(迭代最近点ICP算法)

    1.Iterative Closest Points算法 点云数据配准最经典的方法是迭代最近点算法(Iterative Closest Points,ICP).ICP算法是一个迭代的过程,每次迭代中对 ...

  10. VTK修炼之道55:图形基本操作进阶_表面重建技术(等值面提取)

    1.等值面提取 等值面(线)提取是一种常用的可视化技术,常应用于医学.地质.气象等领域.例如,在医学图像处理中,由于CT.MRI等图像分辨率越来越高,虽然体绘制技术可以清晰地对数据内部结构进行可视化, ...

最新文章

  1. numpy 辨异(二) —— np.identity()/np.eye()
  2. 动态加载类的原理——元数据的使用
  3. 地图的四着色 (CSU-1508)
  4. 读书节来当当薅羊毛!170买400/240买600
  5. 支付宝上线长辈模式: 字体图标加大 去除了营销推送
  6. error C3859: 超过了 PCH 的虚拟内存范围;请使用“-Zm276”或更大的命令行选项重新编译...
  7. python的异常处理及异常类定义
  8. Linux系统目录的作用你了解吗?
  9. 【xpghost】揭晓Windows 7快捷键的秘密
  10. 气象报告是什么计算机领域,计算机辅助翻译系统在亚运气象服务方面地应用报告.pdf...
  11. 计算机蓝屏原因原理,蓝屏炸弹
  12. 贝叶斯分析之利用线性回归模型理解并预测数据(三)
  13. Kaminari分页
  14. UE4-(蓝图)第一百二十课 贴花(蓝图生成示例开枪生成弹孔)
  15. 常见bugger集合
  16. python多线程网易云歌单
  17. 二层与三层交换机我知道,四层交换机是什么东西?
  18. Mac下Android studio怎么格式化代码
  19. 微信小程序openid如何获得IP白名单的方法
  20. 【cmd】CMD中Pushd和Popd命令的用法

热门文章

  1. 基于SimpleLink CC26x2R LaunchPad的RTLS实时定位系统搭建
  2. php 58房源采集,如何用火车采集器采集二手房数据
  3. 命令方块召唤别墅指令_我的世界:如何在MC召唤实体303?告示牌的数字,才是关键!...
  4. ArcGis 加载tif,tpk,shp格式文件
  5. 云服务器系统么开始bios,云服务器怎么进入bios
  6. 【信号处理】扩展卡尔曼滤波EKF(Matlab代码实现)
  7. Django 框架图
  8. 使用Python调用OUTLOOK发邮件(带附件)
  9. 烤仔的客厅 | 明晚7:30,KAKA和烤仔在b站等你~
  10. windows c++ 获取本地ip地址