


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 <vtkRenderWindow.h>
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 {
22 vtkSmartPointer<vtkPoints> sourcePoints =
23 vtkSmartPointer<vtkPoints>::New();
24 double sourcePoint1[3] = {0.5, 0.0, 0.0};
25 sourcePoints->InsertNextPoint(sourcePoint1);
26 double sourcePoint2[3] = {0.0, 0.5, 0.0};
27 sourcePoints->InsertNextPoint(sourcePoint2);
28 double sourcePoint3[3] = {0.0, 0.0, 0.5};
29 sourcePoints->InsertNextPoint(sourcePoint3);
30
31 vtkSmartPointer<vtkPoints> targetPoints =
32 vtkSmartPointer<vtkPoints>::New();
33 double targetPoint1[3] = {0.0, 0.0, 0.55};
34 targetPoints->InsertNextPoint(targetPoint1);
35 double targetPoint2[3] = {0.0, 0.55, 0.0};
36 targetPoints->InsertNextPoint(targetPoint2);
37 double targetPoint3[3] = {-0.55, 0.0, 0.0};
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);
63 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 <vtkRenderWindow.h>
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 {
25 vtkSmartPointer<vtkPolyDataReader> reader =
26 vtkSmartPointer<vtkPolyDataReader>::New();
27 reader->SetFileName("C:\\Users\\Administrator\\Desktop\\VTK2\\hellovtk\\vtk_图像处理学习\\第六章_图像处理\\data\\fran_cut.vtk");
28 reader->Update();
29 vtkSmartPointer<vtkPolyData> original = reader->GetOutput();
30
31 vtkSmartPointer<vtkTransform> translation =
32 vtkSmartPointer<vtkTransform>::New();
33 translation->Translate(0.2, 0.0, 0.0);
34 translation->RotateX(30);
35
36 vtkSmartPointer<vtkTransformPolyDataFilter> transformFilter1 =
37 vtkSmartPointer<vtkTransformPolyDataFilter>::New();
38 transformFilter1->SetInputData(reader->GetOutput());
39 transformFilter1->SetTransform(translation);
40 transformFilter1->Update();
41
42 vtkSmartPointer<vtkPolyData> source =
43 vtkSmartPointer<vtkPolyData>::New();
44 source->SetPoints(original->GetPoints());
45
46 vtkSmartPointer<vtkPolyData> target =
47 vtkSmartPointer<vtkPolyData>::New();
48 target->SetPoints(transformFilter1->GetOutput()->GetPoints());
49
50 vtkSmartPointer<vtkVertexGlyphFilter> sourceGlyphFilter =
51 vtkSmartPointer<vtkVertexGlyphFilter>::New();
52 sourceGlyphFilter->SetInputData(source);
53 sourceGlyphFilter->Update();
54
55 vtkSmartPointer<vtkVertexGlyphFilter> targetGlyphFilter =
56 vtkSmartPointer<vtkVertexGlyphFilter>::New();
57 targetGlyphFilter->SetInputData(target);
58 targetGlyphFilter->Update();
59
60 vtkSmartPointer<vtkIterativeClosestPointTransform> icpTransform =
61 vtkSmartPointer<vtkIterativeClosestPointTransform>::New();
62 icpTransform->SetSource(sourceGlyphFilter->GetOutput());
63 icpTransform->SetTarget(targetGlyphFilter->GetOutput());
64 icpTransform->GetLandmarkTransform()->SetModeToRigidBody();
65 icpTransform->SetMaximumNumberOfIterations(20);
66 icpTransform->StartByMatchingCentroidsOn();
67 icpTransform->Modified();
68 icpTransform->Update();
69
70 vtkSmartPointer<vtkTransformPolyDataFilter> transformFilter2 =
71 vtkSmartPointer<vtkTransformPolyDataFilter>::New();
72 transformFilter2->SetInputData(sourceGlyphFilter->GetOutput());
73 transformFilter2->SetTransform(icpTransform);
74 transformFilter2->Update();
75
76 vtkSmartPointer<vtkPolyDataMapper> sourceMapper =
77 vtkSmartPointer<vtkPolyDataMapper>::New();
78 sourceMapper->SetInputConnection(sourceGlyphFilter->GetOutputPort());
79
80 vtkSmartPointer<vtkActor> sourceActor =
81 vtkSmartPointer<vtkActor>::New();
82 sourceActor->SetMapper(sourceMapper);
83 sourceActor->GetProperty()->SetColor(0,1,0);
84 sourceActor->GetProperty()->SetPointSize(3);
85
86 vtkSmartPointer<vtkPolyDataMapper> targetMapper =
87 vtkSmartPointer<vtkPolyDataMapper>::New();
88 targetMapper->SetInputConnection(targetGlyphFilter->GetOutputPort());
89
90 vtkSmartPointer<vtkActor> targetActor =
91 vtkSmartPointer<vtkActor>::New();
92 targetActor->SetMapper(targetMapper);
93 targetActor->GetProperty()->SetColor(1,0,0);
94 targetActor->GetProperty()->SetPointSize(3);
95
96 vtkSmartPointer<vtkPolyDataMapper> solutionMapper =
97 vtkSmartPointer<vtkPolyDataMapper>::New();
98 solutionMapper->SetInputConnection(transformFilter2->GetOutputPort());
99
100 vtkSmartPointer<vtkActor> solutionActor =
101 vtkSmartPointer<vtkActor>::New();
102 solutionActor->SetMapper(solutionMapper);
103 solutionActor->GetProperty()->SetColor(0,0,1);
104 solutionActor->GetProperty()->SetPointSize(3);
105
106 vtkSmartPointer<vtkRenderer> renderer =
107 vtkSmartPointer<vtkRenderer>::New();
108 renderer->SetBackground(1.0, 1.0, 1.0);
109
110 vtkSmartPointer<vtkRenderWindow> renderWindow =
111 vtkSmartPointer<vtkRenderWindow>::New();
112 renderWindow->AddRenderer(renderer);
113 renderer->AddActor(sourceActor);
114 renderer->AddActor(targetActor);
115 renderer->AddActor(solutionActor);
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("PolyDataICP");
124 renderWindow->Render();
125 renderWindow->Render();
126 renderWindowInteractor->Start();
127
128 return EXIT_SUCCESS;
129 }


【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
2022-08-16 Qt 无法解析的外部符号“public: virtual struct QMetaObject const ...“
2022-08-16 Qt char*,wchar_t*与QString之间的转换(利用reinterpret_cast和_stprintf函数,fromWCharArray从字符数组里读取数据)
2021-08-16 C++ 实现 COM → IUnknown → 接口
2021-08-16 C++ COM编程之IUnknown接口
2021-08-16 C++ COM三大接口:IUnknown、IClassFactory、IDispatch。
2021-08-16 C++ COM组件QueryInterface函数
2021-08-16 C++ COM组件的AddRef和Release()方法使用