1.点云配准
在计算机逆向工程中,通过三维扫描等实物数字化技术可以获取各种点云数据。但是受到测量环境和设备的影响,再一次测量的情况下,难以获取实物整体的点云数据,因此需要多次从不同角度进行测量。但不同的测量数据之间可能会存在平移错误或旋转错位等问题。这就需要使用点云配准技术来对测量点云数据进行局部配准和整合,以得到完整的模型数据。
另外,在外科手术导航技术中,图像标记点技术与人体表面标记点的配准是一个关键步骤,对于手术定位的精度有着重要的影响。通常这需要使用基于标记点的配准技术。因此,点云配准及时对一组源点云数据应用一个空间变换,使得变换后的数据与目标点云数据能够一一映射,使两组数据之间的平均距离误差最小。
2.LandMark配准实验
VTKLandMarkTransform实现了片几点配准算法,使得两个点集在配准后的平均距离最小。通过SetSourceLandmarks()和SetTargetLandmarks()函数分别设置源标记点集和目标标记点集。需要注意的是,源标记点集和目标标记点集序号要对应。基于标记点的配准算法如下所示:#include <vtkAutoInit.h> VTK_MODULE_INIT(vtkRenderingOpenGL); VTK_MODULE_INIT(vtkRenderingFreeType); VTK_MODULE_INIT(vtkInteractionStyle); #include <vtkSmartPointer.h> #include <vtkPoints.h> #include <vtkLandmarkTransform.h> #include <vtkPolyData.h> #include <vtkVertexGlyphFilter.h> #include <vtkTransformPolyDataFilter.h> #include <vtkPolyDataMapper.h> #include <vtkActor.h> #include <vtkProperty.h> #include <vtkRenderer.h> #include <vtkRenderWindow.h> #include <vtkRenderWindowInteractor.h> #include <vtkAxesActor.h> //研究一下坐标系显示位置 #include <vtkOrientationMarkerWidget.h> int main() { vtkSmartPointer<vtkPoints> sourcePoints = vtkSmartPointer<vtkPoints>::New(); double sou