VTK:连通区域分析_cfqcfqcfqcfqcfq的博客-程序员秘密_vtk连通区域轮廓

技术标签: VTK  

   在VTK中连通区域分析常用到的类是:vtkPolyDataConnectivityFilter。从名字可以看出来其输入类型为vtkPolyData;了解VTK的人都知道这是图形的基本数据结构保存了图形的几何结构和拓扑结构。如果你要进行连通分析的对象是图形那自然就没问题。但如果需要对图像进行连通区域分析,那该类就不能直接用了,要先进行一步数据类型转换。根据参考文1,我们可以以一种非严谨方式将VTK数据处理算子(Filter)分为一下几类:

    1、图像处理   其输入为vtkImageData(图像基本数据类型),输出也为vtkImageData

    2、几何提取   其输入为vtkImageData,输出为vtkPolyData

    3、图形处理   其输入为vtkPolyData,输出也为vtkPolyData,例如前面的vtkPolyDataConnectivityFilter

    4、渲染       如Mapper和Actor 来完成图形图像的显示


    为了实现vtkImageData==>vtkPolyData  我们需要使用一种几何提取处理器,参考文献一提到了一种vtkContourFilter(轮廓提取)来完成。vtkContourFilter使用较为简单,只需要设置一个参数等值线,其可以通过函数SetValue或GenerateVale()来完成设置,其具体的不同见参考文献2.

     完成数据类型转换我们就可以使用vtkPolyDataConnectivityFilter来提取连通区域。该类在提取连通区域时候有如下6中模式:

    1)提取数据集中的最大(最多点)连接区域:SetExtractionModeToLargestRegion();

    2)提取指定区域号:SetExtractionModeToSpecifiedRegions()

    3)提取共享指定点ids的所有区域:SetExtractionModeToPointSeededRegions()

    4)提取共享指定单元ID的所有区域:SetExtractionModeToCellSeededRegions()

    5)提取最靠近指定点的区域:SetExtractionModeToClosestPointRegion()

    6)提取所有区域(用于着色区域):SetExtractionModeToAllRegions()

   区域标记号被以点的标量属性数据来保存。为了标记所有区域还必须配合函数ColorRegionOn()


  下面演示代码: 模式为SetExtractionModeToAllRegions() 获取连通区域后 遍历所有点来查看其所属于的连通区域号

//[1] --read image
    QString str="F:/lunkuo5.jpg";
    QByteArray ba=str.toLocal8Bit();
    const char *fileName=ba.data();
    vtkSmartPointer<vtkJPEGReader> reader
            =vtkSmartPointer<vtkJPEGReader>::New();
    reader->SetFileName(fileName);
    reader->Update();
    //[1]

    //[2] --灰度化
    vtkSmartPointer<vtkImageLuminance> luninanceFilter=
            vtkSmartPointer<vtkImageLuminance>::New();
    luninanceFilter->SetInputConnection(reader->GetOutputPort());
    luninanceFilter->Update();
    //[2]

    //[3] --图像二值化
    vtkSmartPointer<vtkImageThreshold> thresholdFilter=
            vtkSmartPointer<vtkImageThreshold>::New();
    thresholdFilter->SetInputConnection(luninanceFilter->GetOutputPort());
    thresholdFilter->ThresholdByUpper(100);//大于该灰度范围的区间为有效范围
    thresholdFilter->SetInValue(255);//有效范围内的输出值
    thresholdFilter->SetOutValue(0);//无效范围的输出值
    thresholdFilter->UpdateDataObject();
    thresholdFilter->UpdateInformation();
    thresholdFilter->Update();
    //[3]

    //[4] --exactor contour
    vtkSmartPointer<vtkContourFilter> contourFilter=
            vtkSmartPointer<vtkContourFilter>::New();
    contourFilter->SetInputConnection(thresholdFilter->GetOutputPort());
    contourFilter->ComputeNormalsOn();
    contourFilter->SetValue(0,100);
    contourFilter->Update();
    //[4]

    //[4] --连通区域分析
    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;
    //[4]
  
    for(int i=0;i<connectFilter1->GetOutput()->GetNumberOfPoints();++i)
    {
        int regionId=connectFilter1->GetOutput()->GetPointData()->GetScalars()->GetTuple1(i);
        double *xyz=connectFilter1->GetOutput()->GetPoint(i);

    }


参考文献:

 1  第06章-图像处理及可视化(1)

 2 vtkContourFilter部分成员函数的使用说明

 3 vtkPolyDataConnectivityFilter

 4 ExtrenalContour

 5 vtk-example

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/cfqcfqcfqcfqcfq/article/details/53199973

智能推荐

全网最全的DP和HDMI区别_dp线和hdmi区别_小曾同学.com的博客-程序员秘密

今天被同事吐槽:你都不知道DP线啊。。。。唉,我确实不知道啊。所以整理了一些资料,帮助记忆。首先要知道的一件事 :DP和HDMI都是多媒体显示的输出接口,都支持视频,音频同时传输,而且各有各的好处。DP是什么?DP 的全称为 DisplayPort, 是一种高清数字显示接口标准,可以连接电脑和显示器,也可以直接连接电脑和家庭影院,DP将在传输视频信号的同时加入对高清音频信号传输的支持,同时支持更高的分辨率和刷新率。HDMI是什么?HDMI:高清多媒体接口(High Definition Mu

springboot Nexus Repository Maven仓库搭建及使用_springboot nexus 多个版本_i学长的猫的博客-程序员秘密

 Nexus Repository 是搭建maven的镜像的工具之一,在全球范围内使用挺广的。一、Nexus 搭建过程  Nexus 镜像的搭建还是相对简单的,将下载的文件解压到相应的目录下,然后进入./nexus-version/bin/下,启动nexus即可将Nexus Repository运行起来(其中Nexus是基于Jetty来运行的)。或者使用docker ru...

git------跟踪远程分支之git checkout 常用方法以及另类新解_git checkout -b 追踪_绝世唐门三哥的博客-程序员秘密

1.如果在一个跟踪分支上输入 git pull,Git 能自动地识别去哪 个服务器上抓取、合并到哪个分支。2.如果通过git checkout -b 新创建的分支推送的时候会提示要求你跟踪远程某个分支一、创建新分支并跟踪分支:将本地分支与远程分支设置为不同名字,且关联成功:运行 git checkout -b [本地branch名] [remotename]/[远程bra...

2020年王鼎杯反序列化题目复现_晶晶娃在战斗的博客-程序员秘密

1.think_java。题目描述如下:下载题目附件,发现是java程序,使用jd-gui进行反编译,如下图:发现test.class中有调用swagger API,百度找到swagger的访问地址如:http://127.0.0.1:8081/swagger-ui.html。构造相关URL访问。发现没有用户登录的数据,返回继续审计代码,查看SqlDict.class,发现代码中有sql语句,对应着swagger API的字典库功能,数据库名字叫myapp,在对应页面进行sql注入。构造的

git 设置全局代理,Git http.proxy设置_weixin_39578899的博客-程序员秘密

I was trying to figure this git thing out and at one moment I messed with the http.proxy variable. Right now it's just nonsense, 'asdf' so pushing doesn't work. I don't know what the proxy setting was...

Hive SQL随机抽样_渔好学的博客-程序员秘密

使用Hive随机抽样 &amp;lt;!-- 文章内容 --&amp;gt; &amp;lt;div data-note-content=&quot;&quot; class=&quot;show-content&quot;&amp;gt; &amp;lt;div class=&quot;show-content-free&quot;&amp;gt; &amp;lt;h1&amp;gt;1 在hive中使用rand简单随机抽

随便推点

05 MyNotification_mynotiflcation_蓝风9的博客-程序员秘密

前言关于 Notification, 呵呵 大家工作中应该还是听常用的, 给用户一个 xxx 提示element-ui 的 Notification :https://element.eleme.cn/#/zh-CN/component/notification可能 我们有些时候 需要扩展这个 Notification, 来实现 我们自己的 一些更加个性化的 通知提示当然 这些都是站在巨人的肩膀上面, 站在官方的 Notification 上面来处理的另外就是 在一些场景下...

【论文阅读】Q-BERT: Hessian Based Ultra Low Precision Quantization of BERT_zoetu的博客-程序员秘密

Q-BERT提出Hessian信息的混合精度量化和组量化, 达到了 13 倍的权重压缩率,激活大小和嵌入大小仅为原来的 1/4,且准确率损失在 2.3% 以内。

html中th可以换行吗,如何在th和td之间放置换行符?_梁政城的博客-程序员秘密

我有桌子,我想把我的td的标签下。这是我的HTML代码:如何在th和td之间放置换行符?Your EmailJob Category//I need break line hereProgrammerWeb Developer我的输出为我提供了标记文本,然后在文本标签它旁边。我想有低于th的td内容。我试图使用标签,但是看起来像在td标签之外不起作用。如果有人知道最好的方法来解决这个问题,请让我知...

解决windows上Git密码输入错误无法修改问题以及解决更改Git用户的用户名和密码问题_git14.8.2版本在页面无法重置用户密码_IT change the world的博客-程序员秘密

1.打开控制面板----&gt;用户账户----&gt;凭证管理器-----&gt;windows凭据2.点击修改,即可修改Git用户的用户名和密码点击删除后,运行程序,windows会弹出窗口提示输入用户名和密码。...

基于html2canvas实现网页保存为图片及图片清晰度优化_淘宝新蔷程序员特训营,快速学会开发项目的博客-程序员秘密

参考:https://segmentfault.com/a/1190000011478657?utm_source=tag-newest1、从“https://github.com/niklasvh/html2canvas/releases”下载“html2canvas.js”保存到网站目录“dist”2、从“https://github.com/niklasvh/html2canvas”下载源码,运行“examples”目录下的demo.html3、改写demo.html,再运行。会看到&lt

推荐文章

热门文章

相关标签