首页 > 其他分享 >VTK_Learning_图形基本操作进阶_连通区域分析

VTK_Learning_图形基本操作进阶_连通区域分析

时间:2022-12-30 13:06:15浏览次数:37  
标签:连通 进阶 connectivityFilter 区域分析 vtkSmartPointer 区域 New 基本操作 include


1.连通区域分析

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

下面一个例子来分析VTK中如何对图形数据做连通区域分析:
 

#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL);
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);
sphereSource->SetPhiResolution(10);
sphereSource->Update();

vtkSmartPointer<vtkConeSource> coneSource =
vtkSmartPointer<vtkConeSource>::New();
coneSource->SetRadius(5);
coneSource->SetHeight(10);
coneSource->SetCenter(25, 0, 0);
coneSource->Update();

vtkSmartPointer<vtkAppendPolyData> appendFilter =
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();
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_Learning_图形基本操作进阶_连通区域分析_#include

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

2.VTKPolyDataConnectivityFilter类解析

vtk中的vtkPolyDataConnectivityFilter类可以用于实现连通区域分析,该类接受vtkPolyData数据作为输入。集体使用如下:

vtkSmartPointer<vtkPolyDataConnectivityFilter> connectivityFilter =
vtkSmartPointer<vtkPolyDataConnectivityFilter>::New();
connectivityFilter->SetInputData(appendFilter->GetOutput());
connectivityFilter->SetExtractionModeToCellSeededRegions();
connectivityFilter->AddSeed(100);
connectivityFilter->Update();

SetExtractionModeToLargestRegion():用于提取具有最多点数的连通区域;
SetExtractionModeToAllRegions():该模式主要用于连通区域标记,配合函数ColorRegionsOn()使用,在连通区域像是的同时,生成一个名为RegionId的点属性数据。
SetExtractionModeToSpecifiedRegions():该模式用于提取一个或多个连通区域,在该模式下,需要通过AddSpecifiedRegion()来添加西药提取的区域号,区域号从零开始。
SetExtractionModeToClosestPointRegion():该模式需要使用SetClosestPoint()函数设置一个空间点坐标,执行结果为离该点最近的连通区域。
SetExtractionModeToPointSeededRegions():该模式下需要使用AddSeed()函数添加种子点,提取种子点所在的区域。
SetExtractionModeToCellSeededRegions():该模式下需要使用AddSeed()函数调价种子单元,提取种子单元所在的区域。
 

标签:连通,进阶,connectivityFilter,区域分析,vtkSmartPointer,区域,New,基本操作,include
From: https://blog.51cto.com/u_15926338/5980077

相关文章

  • VTK_Learning_图像基本操作_彩色图像生成灰度图像_彩色图像成分提取
    1.灰度图像映射vtkImageLuminance负责将一个RGB彩色图像转换为一个单组分的灰度图像。映射公式如下:luminance=0.3*R+0.59*G+0.11*B该公式中,R为输入图像的第一分量(红......
  • C++进阶(位图+布隆过滤器的概念和实现+海量数据处理)
    位图概念位图:所谓位图,就是用每一位来存放某种状态,适用于海量数据,数据无重复的场景。通常是用来判断某个数据存不存在的。适用场景:如果我们需要对大量的数据进行处理,判......
  • python之xml基本操作
    1.概述XML(ExtensibleMarkupLanguage)中文译为可扩展标记语言,它是一种简单、灵活、易扩展的文本格式,它主要关注数据内容,常用来传送、存储数据。当通过XML来传送数据......
  • Python 面向对象进阶
    目录Python面向对象进阶面向对象三大特征介绍继承语法格式类成员的继承和重写查看类的继承层次结构与根类属性重写__str__()方法Python面向对象进阶面向对象三大特征......
  • 【OS】01 - 进阶操作系统
    ......
  • 钉钉的想象力,向企业服务第一平台进阶
    作者|曾响铃文| 响铃说时近年末,钉钉7.0版本在杭州重磅发布。两年一个大版本,这一次钉钉正试图向更高的维度进化:第一,在完成一家企业的组织数字化和业务数字化后,钉钉开始将......
  • 【维生素C语言】第十章 - 指针的进阶(下)
    前言: ......
  • 【进阶篇】Redis实战之Jedis使用技巧详解
    一、摘要在上一篇文章中,我们详细的介绍了redis的安装和常见的操作命令,以及可视化工具的介绍。刚知道服务端的操作知识,还是远远不够的,如果想要真正在项目中得到应用,我们......
  • Python进阶—Pandas
    Pandas再来一次文章目录​​一、Series和DataFrame​​​​二、选择数据​​​​三、赋值及操作(增、删、改)​​​​四、处理丢失数据​​​​五、读取并写入文件​​​​......
  • Python进阶—Numpy
    Numpy再来一遍文章目录​​一、Numpy的属性​​​​二、创建array​​​​三、Numpy的运算​​​​四、随机数生成及矩阵的统计​​​​五、Numpy索引​​​​六、合并​......