补洞

在VTK中,利用vtkFillHolesFilter进行补洞。其内部执行过程是首先检测出网格中的所有边界边,然后找出这些边界边中的每个孔洞,最后利用vtkPolygon::NonDegenerateTriangulate将每个孔洞进行三角化(即生成三角网格)。需要注意的是,有些边界的孔洞是不需要三角化的,例如一个平面网格,若填补其四周的边界变,则会与原网格产生覆盖。vtkFillHolesFilter的SetHoleSize函数用来控制需要修补洞的最大面积,大于该值则不需要修补该洞。

示例演示

我们利用vtkFillHolesFilter对bunny进行补洞,看看效果。

/**********************************************************************Copyright (c) Mr.Bin. All rights reserved.
For more information visit: http://blog.csdn.net/webzhuce**********************************************************************/
#include <vtkSmartPointer.h>
#include <vtkPolyData.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkProperty.h>
#include <vtkFeatureEdges.h>
#include <vtkFillHolesFilter.h>
#include <vtkPLYReader.h>int main(int argc, char *argv[])
{vtkNew<vtkPLYReader> reader;reader->SetFileName("E:/github/Study-VTK/data/bunny.ply");reader->Update();vtkNew<vtkFeatureEdges> featureedges;featureedges->SetInputData(reader->GetOutput());featureedges->BoundaryEdgesOn();featureedges->FeatureEdgesOff();featureedges->ManifoldEdgesOff();featureedges->NonManifoldEdgesOff();featureedges->Update();int numberofopenedges = featureedges->GetOutput()->GetNumberOfCells();if(numberofopenedges) std::cout<<"该网格模型不是封闭的..."<<std::endl;else {std::cout<<"该网格模型是封闭的..."<<std::endl;return EXIT_SUCCESS;}vtkNew<vtkFillHolesFilter> fillholesfilter;fillholesfilter->SetInputData(reader->GetOutput());fillholesfilter->Update();//double leftviewport[4] = {0.0, 0.0, 0.5, 1.0};double rightviewport[4] = {0.5, 0.0, 1.0, 1.0};vtkNew<vtkPolyDataMapper> originalmapper;originalmapper->SetInputData(reader->GetOutput());vtkNew<vtkActor> originalactor;originalactor->SetMapper(originalmapper);vtkNew<vtkPolyDataMapper> filledmapper;filledmapper->SetInputData(fillholesfilter->GetOutput());vtkNew<vtkActor> filledactor;filledactor->SetMapper(filledmapper);filledactor->GetProperty()->SetRepresentationToWireframe();filledactor->GetProperty()->SetColor(1.0, 0.0, 0.0);vtkNew<vtkRenderer> leftrenderer;leftrenderer->SetViewport(leftviewport);leftrenderer->AddActor(originalactor);leftrenderer->SetBackground(0.0, 0.0, 0.0);vtkNew<vtkRenderer> rightrenderer;rightrenderer->SetViewport(rightviewport);rightrenderer->AddActor(filledactor);rightrenderer->SetBackground(0.0, 0.0, 0.0);vtkNew<vtkRenderWindow> renderwindow;renderwindow->AddRenderer(leftrenderer);renderwindow->AddRenderer(rightrenderer);renderwindow->SetSize(640, 320);renderwindow->Render();renderwindow->SetWindowName("FillHoles");vtkNew<vtkRenderWindowInteractor> renderwindowinteractor;renderwindowinteractor->SetRenderWindow(renderwindow);renderwindow->Render();renderwindowinteractor->Start();return EXIT_SUCCESS;
}

运行结果

从结果来看,修补的区域三角形单元明显比原始网格数据的大,同时也不光滑。所以真实应用,该类作用不大。

参考资料

  • VTK图形图像开发进阶[M]

图形处理之补洞vtkFillHolesFilter相关推荐

  1. 一种基于三代PacBio测序数据的补洞方法

    一种基于三代PacBio测序数据的补洞方法 技术领域 本发明涉及生物信息技术领域,具体涉及DNA组装的补洞方法,它使用三代PacBio 测序数据来进行基因组数据的补洞. 背景技术 三代PacBio测序 ...

  2. 3D三角形网格补洞算法及源码(转)

    在逆向工程中,由于设备或模型的原因,我们获取得到的三维模型数据往往并不完整,从而使得生成的网格模型存在孔洞,这对后续的模型分析会造成影响.下面介绍一种基于径向基函数(RBF:Radial Basis ...

  3. 3D打印切片软件补洞修复算法研究

    基于变分法的网格补洞算法 三维网格模型修复一直是计算机辅助几何设计领域中的一个重要领域,关于网格网格补洞算法也看过一些文章,也有很不错的修复效果.最近安排到一个任务关于3D打印模型修复功能,查阅了不少 ...

  4. AREngine深度图优化之一基于两基带统计的补洞方法

    我们都知道AREngine返回的深度图质量并不高,大概率是直接返回的tof深度图,跟ARCORE返回的深度图差距还是比较大的.在我们当前AR云渲染项目中,需要用到AREngine返回的深度图,这就需要 ...

  5. 无人机倾斜摄影模型如何加工处理裁剪降噪补洞

    1.计算完成模型 2.提交新的生产项目-用于进行修饰的三维网格 格式修改为OBJ 最后提交 3.计算完成之后-打开输入目录-OBJ格式拷贝至新文件夹 4.打开Geomagic Studio 2013 ...

  6. Halcon三维测量(4):点云图转深度图+点云滤波(补洞)+断线拟合

    对于三维测量的套路,都是将图像转成二维进行测量和处理 我仍然以这个开关检测项目为例,开关点云有x,y,z,三个空间坐标 如果对这个三维点云直接处理,有一个思路我提供给大家,将点云模型完全调平,然后针对 ...

  7. 图形处理(十二)拉普拉斯网格优化、最小二乘网格模型光顺

    看这篇博文前,请先参考我的另外一篇博文<图形处理(三)简单拉普拉斯网格变形-Siggraph 2004>学习拉普拉斯坐标的相关理论知识.这里要分享的paper,是通过拉普拉斯的方法实现三角 ...

  8. 从补天白帽大会看网络世界那些“挖洞”的人

    因为比特币的兴起,我们渐渐熟知在网络的世界中有一群"挖矿"的人和这个词的涵义.不过还有一个与之相近的词同样脱胎于网络世界--"挖洞",它的背后同样围绕了一个群体 ...

  9. 什么是计算机图形学?(转自中国科学技术大学-刘利刚)

    (如需交流,请关注公众号:神马观止) [注] 由于时常有本科学生来向笔者询问计算机图形学是做什么的,为了使得学生能够快速了解计算机图形学,有利于他们在选择研究生方向做出适合自己的选择,特撰写此文.本文 ...

最新文章

  1. jq添加新节点赋予class属性并获取该对象
  2. 图片怎么等比缩放_mac图像缩放工具Teorex iResizer
  3. tcpdump抓取udp报文
  4. java反码算术运算求和,位运算的妙用,运算妙用
  5. ReSharper 2020.2 补丁
  6. 美国警察开特斯拉追疑犯,时速飙到193公里,然后发现没电了...
  7. 纵观软件行业开发方法论的发展
  8. cmd删除txt部分文字_Python识别图片中的文字
  9. HTTP协议 (四) 缓存
  10. [译] 通过官网 Go 语言学习笔记 | How to Write Go Code
  11. 直播app源代码,单例模式
  12. flash player 离线版下载地址
  13. ABB机器人示教器上人机界面的功能
  14. bootstraptable冻结列无效_Bootstrap Table 冻结列功能详解
  15. 点对点视频分发:从早期互联网到ZB字节(Zettabyte)时代的分布式网络
  16. 监视浏览器是否打开控制台
  17. 大数据职业理解_大数据岗位介绍和职业规划分析
  18. Mathlab基础——常用命令
  19. 【POJ No. 2431】 丛林探险 Expedition
  20. 年轮广场-NC13583(暴力)

热门文章

  1. 上下班定时打卡之自动获取经纬度
  2. jQuery对于FireBox中的keypress与event
  3. 13、Python timetimeit 模块
  4. 程序人生 - 提前冲线!10名浙江高中生不用高考,直接被清华大学录取,杭州4位学霸来自这些学校
  5. 微星B450M迫击炮MAX开启CPU虚拟化功能
  6. PMP中文报名注意事项
  7. i39 1.6 [TNT] 特别版 Mac iPhone 手机铃声制作软件
  8. python中赋值“=”的理解
  9. 0基础如何学习自动化测试?按照这7步一步一步来学习就成功了
  10. 计算机缺乏内存将无法运行,解决方案:计算机无法进入常见系统故障的内存