VTK -SurfaceReconstruction

news/2024/11/18 14:02:31/

链接:
1.https://blog.csdn.net/hw140701/article/details/52796290
2.https://blog.csdn.net/HopefulLight/article/details/79157144?utm_source=blogxgwz6

经典的Signed Distance Function重建算法主要流程如下:
1、对每个数据点,搜索其邻域数据点,使用特征向量方法计算法线和法平面
2、由于法线的方向可有正负两个不确定,故对全局使用最小生成树近似计算法线朝向
3、以立方体素(voxel)为单位,沿着曲面滑动延展,计算每个格顶点到法平面的距离
4、使用Marching Cube算法从立方体素中(插值地)提取三角面

VTK库提供的vtkSurfaceReconstructionFilter类实现了该算法。
vtkSurfaceReconstructionFilter实现了一种隐式曲面重建的方法,即将曲面看作一个符号距离函数的等值面,曲面内外的距离值得符号函数相反,则零等值面即为所求的曲面。该方法需要对点云数据进行网格划分,然后估算每个点的切平面和方向,并以每个点与最近的切平面距离来近似表面距离。这样既可得到一个符号距离的体数据,使用vtkContourFilter来提取零等值面即可得到相应的网格。

#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkPolyDataMapper.h"
#include "vtkActor.h"
#include "vtkSmartPointer.h"
#include "vtkProperty.h"
#include "vtkCamera.h"
#include "vtkPoints.h"
#include "vtkCellArray.h"
#include "vtkSurfaceReconstructionFilter.h"
#include "vtkContourFilter.h"
#include "vtkSTLWriter.h"
int  main() {vtkSmartPointer<vtkRenderer>ren = vtkSmartPointer<vtkRenderer>::New();           //设置绘制者(绘制对象指针)vtkSmartPointer<vtkRenderWindow>renWin = vtkSmartPointer<vtkRenderWindow>::New();       //设置绘制窗口vtkSmartPointer<vtkRenderWindowInteractor>iren = vtkSmartPointer<vtkRenderWindowInteractor>::New(); //设置绘制交互操作窗口的vtkSmartPointer<vtkPoints>m_Points = vtkSmartPointer<vtkPoints>::New();vtkSmartPointer<vtkCellArray>vertices = vtkSmartPointer<vtkCellArray>::New();//_读进点云数据信息FILE *fp = NULL;fp = fopen("../points.txt", "r");	//读取TXT中的XYZ坐标if (!fp) {printf("打开文件失败!!\n");exit(0);}double x = 0, y = 0, z = 0;int i = 0;while (!feof(fp)) {fscanf(fp, "%lf	%lf	%lf", &x, &y, &z);m_Points->InsertPoint(i, x, y, z);	vertices->InsertNextCell(1);	vertices->InsertCellPoint(i);i ++;}fclose(fp);vtkSmartPointer<vtkPolyData>points = vtkSmartPointer<vtkPolyData>::New();points->SetPoints(m_Points);vtkSmartPointer<vtkSurfaceReconstructionFilter>surf = vtkSmartPointer<vtkSurfaceReconstructionFilter>::New();surf->SetInputData(points);surf->SetNeighborhoodSize(20);//20surf->SetSampleSpacing(0.5);//用于设置划分网格的网格间距,间距与小,网格越密集,一般采用默认值0.05.surf->Update();vtkSmartPointer<vtkContourFilter>contour = vtkSmartPointer<vtkContourFilter>::New();contour->SetInputConnection(surf->GetOutputPort());contour->SetValue(0, 0.0);contour->Update();vtkNew<vtkSTLWriter> stlWriter ;stlWriter->SetFileName("../save/tmp.stl");stlWriter->SetInputConnection(contour->GetOutputPort());stlWriter->Write();stlWriter->Update();cout << "写入模型成功" << endl;vtkSmartPointer<vtkPolyDataMapper>pointMapper = vtkSmartPointer<vtkPolyDataMapper>::New();pointMapper->SetInputData(contour->GetOutput());pointMapper->ScalarVisibilityOff();//为了改actor颜色vtkSmartPointer<vtkActor>actor = vtkSmartPointer<vtkActor>::New();actor->SetMapper(pointMapper);actor->GetProperty()->SetColor(1.0, 1.0, 1.0);ren->AddActor(actor);renWin->AddRenderer(ren);renWin->SetSize(800, 800);iren->SetRenderWindow(renWin);renWin->Render();renWin->SetWindowName("SurfaceReconstructionFilter");iren->Start();return 0;
}

http://www.ppmy.cn/news/372537.html

相关文章

VTK-vtkPointInterpolator/vtkInterpolatorKernel

欢迎大家加入社区&#xff0c;雪易VTK社区-CSDN社区云 前言&#xff1a;目前在做模型的ReMesh&#xff0c;在研究这个接口&#xff0c;希望能有所帮助。 vtkPointInterpolator 描述&#xff1a; 变量&#xff1a; Strategy&#xff1a;MASK_POINTS, NULL_VALUE, CLOSEST_POI…

VTK(The Visualization Toolkit)编译

VTK系列文章目录 文章目录 VTK系列文章目录前言一、准备工作二、VTK编译1.使用CMake生成vs工程2.编译vtk.sln 总结 前言 可视化工具包&#xff08;VTK&#xff09;是用于操作和显示科学数据的开源软件。它配有最先进的三维渲染工具、一套用于三维交互的小部件和广泛的二维绘图…

安装VTK

需要的环境及文件 平台&#xff1a;win10已安装好的Visual Studio&#xff0c;建议2017及2019。vs主要是用来编译VTK&#xff0c;最后生成我们想要的库文件&#xff0c;头文件之类的。已安装好的Qt&#xff0c;建议版本5.9或5.12cmake-gui&#xff0c;如未安装可参照下面的教程…

VTK-Tessellator Subdivision

前言&#xff1a;本博文主要研究Tessellator 的Subdivision实现方式&#xff0c;并对涉及到vtk中的所有相关接口进行研究&#xff0c;以期找出网格Remesh的方法。希望此篇文章也能给其他小伙伴带来帮助&#xff01; 目录 vtkTessellatorFilter vtkEdgeSubdivisonCriterion …

VTK

视觉化工具函式库&#xff08;VTK&#xff0c;Visualization Toolkit&#xff09;是一个开放源码&#xff0c;跨平台、支援平行处理&#xff08;VTK曾用于处理大小近乎1个Petabyte的资料&#xff0c;其平台为美国Los Alamos国家实验室所有的具1024个处理器之大型系统&#xff0…

VTK下载并安装

去官网下载https://vtk.org/download/ 选择最新稳定版本 然后点击source后边的压缩包进行下载。 下载完成后将其解压到特定的文件夹下&#xff0c;然后打开cmake-gui.exe&#xff0c;第一行选择刚刚解压的文件夹&#xff0c;这个文件夹下有一个CMakeLists.txt文件&#xff0c…

VTK实现电影级渲染效果(CVR)

目前vtk9.2.2版本中已经集成了ray marching&#xff08;光线步进&#xff09;算法实现的体渲染功能&#xff0c;官方博客中已经介绍为电影级体渲染了&#xff0c;如图&#xff1a; 此效果是在3d显示器上的显示效果&#xff0c;就此效果来看说是电影级渲染效果也没什么问题&…

vtk文件格式

最近学了一下vtk文件的格式, 做一个小结。文中用方括号标示出来的文字是根据实际需要自己定义的部分&#xff0c;其他的如DATASET&#xff0c; POINTS&#xff0c;CELLS等是vtk本身的格式要求一部分。 文章目录 1. 第一部分&#xff0c;数据版本声明(不重要)2. 第二部分&#x…