当前位置: 首页 > 网络知识

VTK 实例62:点云配准

时间:2026-01-29 09:25:19

1 #include <vtkAutoInit.h> 2 VTK_MODULE_INIT(vtkRenderingOpenGL2); 3 VTK_MODULE_INIT(vtkRenderingFreeType); 4 VTK_MODULE_INIT(vtkInteractionStyle); 5 6 #include <vtkPoints.h> 7 #include <vtkSmartPointer.h> 8 #include <vtkLandmarkTransform.h> 9 #include <vtkMatrix4x4.h> 10 #include <vtkPolyDataMapper.h> 11 #include <vtkActor.h> 12 #include <vtkRenderWindoh> 13 #include <vtkRenderer.h> 14 #include <vtkRenderWindowInteractor.h> 15 #include <vtkProperty.h> 16 #include <vtkTransformPolyDataFilter.h> 17 #include <vtkVertexGlyphFilter.h> 18 #include <vtkAxesActor.h> 19 20 int main(int, char *[]) 21 ; 25 sourcePoints>InsertNextPoint(sourcePoint1); 26 double sourcePoint2[3] = ; 27 sourcePoints>InsertNextPoint(sourcePoint2); 28 double sourcePoint3[3] = ; 29 sourcePoints>InsertNextPoint(sourcePoint3); 30 31 vtkSmartPointer<vtkPoints> targetPoints = 32 vtkSmartPointer<vtkPoints>::New(); 33 double targetPoint1[3] = ; 34 targetPoints>InsertNextPoint(targetPoint1); 35 double targetPoint2[3] = ; 36 targetPoints>InsertNextPoint(targetPoint2); 37 double targetPoint3[3] = ; 38 targetPoints>InsertNextPoint(targetPoint3); 39 40 vtkSmartPointer<vtkLandmarkTransform> landmarkTransform = 41 vtkSmartPointer<vtkLandmarkTransform>::New(); 42 landmarkTransform>SetSourceLandmarks(sourcePoints); 43 landmarkTransform>SetTargetLandmarks(targetPoints); 44 landmarkTransform>SetModeToRigidBody(); 45 landmarkTransform>Update(); 46 47 vtkSmartPointer<vtkPolyData> source = 48 vtkSmartPointer<vtkPolyData>::New(); 49 source>SetPoints(sourcePoints); 50 51 vtkSmartPointer<vtkPolyData> target = 52 vtkSmartPointer<vtkPolyData>::New(); 53 target>SetPoints(targetPoints); 54 55 vtkSmartPointer<vtkVertexGlyphFilter> sourceGlyphFilter = 56 vtkSmartPointer<vtkVertexGlyphFilter>::New(); 57 sourceGlyphFilter>SetInputData(source); 58 sourceGlyphFilter>Update(); 59 60 vtkSmartPointer<vtkVertexGlyphFilter> targetGlyphFilter = 61 vtkSmartPointer<vtkVertexGlyphFilter>::New(); 62 targetGlyphFilter>SetInputData(target); targetGlyphFilter>Update(); 64 65 vtkSmartPointer<vtkTransformPolyDataFilter> transformFilter = 66 vtkSmartPointer<vtkTransformPolyDataFilter>::New(); 67 transformFilter>SetInputData(sourceGlyphFilter>GetOutput()); 68 transformFilter>SetTransform(landmarkTransform); 69 transformFilter>Update(); 70 71 vtkSmartPointer<vtkPolyDataMapper> sourceMapper = 72 vtkSmartPointer<vtkPolyDataMapper>::New(); 73 sourceMapper>SetInputConnection(sourceGlyphFilter>GetOutputPort()); 74 75 vtkSmartPointer<vtkActor> sourceActor = 76 vtkSmartPointer<vtkActor>::New(); 77 sourceActor>SetMapper(sourceMapper); 78 sourceActor>GetProperty()>SetColor(1,1,0); 79 sourceActor>GetProperty()>SetPointSize(5); 80 81 vtkSmartPointer<vtkPolyDataMapper> targetMapper = 82 vtkSmartPointer<vtkPolyDataMapper>::New(); 83 targetMapper>SetInputConnection(targetGlyphFilter>GetOutputPort()); 84 85 vtkSmartPointer<vtkActor> targetActor = 86 vtkSmartPointer<vtkActor>::New(); 87 targetActor>SetMapper(targetMapper); 88 targetActor>GetProperty()>SetColor(1,0,0); 89 targetActor>GetProperty()>SetPointSize(5); 90 91 vtkSmartPointer<vtkPolyDataMapper> solutionMapper = 92 vtkSmartPointer<vtkPolyDataMapper>::New(); 93 solutionMapper>SetInputConnection(transformFilter>GetOutputPort()); 94 95 vtkSmartPointer<vtkActor> solutionActor = 96 vtkSmartPointer<vtkActor>::New(); 97 solutionActor>SetMapper(solutionMapper); 98 solutionActor>GetProperty()>SetColor(0,0,1); 99 solutionActor>GetProperty()>SetPointSize(5); 100 101 vtkSmartPointer<vtkRenderer> renderer = 102 vtkSmartPointer<vtkRenderer>::New(); 103 104 vtkSmartPointer<vtkRenderWindow> renderWindow = 105 vtkSmartPointer<vtkRenderWindow>::New(); 106 renderWindow>AddRenderer(renderer); 107 renderer>AddActor(sourceActor); 108 renderer>AddActor(targetActor); 109 renderer>AddActor(solutionActor); 110 111 vtkSmartPointer<vtkAxesActor> axes = 112 vtkSmartPointer<vtkAxesActor>::New(); 113 axes>SetScale(30); 114 renderer>AddActor(axes); 115 renderer>SetBackground(.3, .6, .3); 116 117 vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = 118 vtkSmartPointer<vtkRenderWindowInteractor>::New(); 119 renderWindowInteractor>SetRenderWindow(renderWindow); 120 121 renderWindow>SetSize(640, 480); 122 renderWindow>Render(); 123 renderWindow>SetWindowName("PolyDataLandmarkReg"); 124 renderWindow>Render(); 125 renderWindowInteractor>Start(); 126 127 return EXIT_SUCCESS; 128 }

1 #include <vtkAutoInit.h> 2 VTK_MODULE_INIT(vtkRenderingOpenGL2); 3 VTK_MODULE_INIT(vtkRenderingFreeType); 4 VTK_MODULE_INIT(vtkInteractionStyle); 5 6 #include <vtkPoints.h> 7 #include <vtkSmartPointer.h> 8 #include <vtkLandmarkTransform.h> 9 #include <vtkMatrix4x4.h> 10 #include <vtkPolyDataMapper.h> 11 #include <vtkActor.h> 12 #include <vtkRenderWindoh> 13 #include <vtkRenderer.h> 14 #include <vtkRenderWindowInteractor.h> 15 #include <vtkProperty.h> 16 #include <vtkTransformPolyDataFilter.h> 17 #include <vtkVertexGlyphFilter.h> 18 #include <vtkIterativeClosestPointTransform.h> 19 #include <vtkPolyDataReader.h> 20 #include <vtkTransform.h> 21 22 //测试文件:../data/fran_cut.vtk 23 int main(int argc, char * argv[]) 24



上一篇:VTK 实例53:网格平滑
下一篇:VTK 实例54:封闭性检测
VTK
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器
  • 英特尔第五代 Xeon CPU 来了:详细信息和行业反应
  • 由于云计算放缓引发扩张担忧,甲骨文股价暴跌
  • Web开发状况报告详细介绍可组合架构的优点
  • 如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳
  • 美光在数据中心需求增长后给出了强有力的预测
  • 2027服务器市场价值将接近1960亿美元
  • 生成式人工智能的下一步是什么?
  • 分享在外部存储上安装Ubuntu的5种方法技巧
  • 全球数据中心发展的关键考虑因素
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器

    英特尔第五代 Xeon CPU 来了:详细信息和行业反应

    由于云计算放缓引发扩张担忧,甲骨文股价暴跌

    Web开发状况报告详细介绍可组合架构的优点

    如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳

    美光在数据中心需求增长后给出了强有力的预测

    2027服务器市场价值将接近1960亿美元

    生成式人工智能的下一步是什么?

    分享在外部存储上安装Ubuntu的5种方法技巧

    全球数据中心发展的关键考虑因素