浙江省网站建设,东莞设计网站公司,网站开发小组总结报告,站长之家查询域名一#xff1a;主要的知识点
1、说明
本文只是教程内容的一小段#xff0c;因博客字数限制#xff0c;故进行拆分。主教程链接#xff1a;vtk教程——逐行解析官网所有Python示例-CSDN博客
2、知识点纪要
本段代码主要涉及的有①ICP配算法的运用#xff0c;②运用ICP的…一主要的知识点1、说明本文只是教程内容的一小段因博客字数限制故进行拆分。主教程链接vtk教程——逐行解析官网所有Python示例-CSDN博客2、知识点纪要本段代码主要涉及的有①ICP配算法的运用②运用ICP的配准矩阵二代码及注释import vtkmodules.vtkRenderingOpenGL2 import vtkmodules.vtkInteractionStyle from vtkmodules.vtkCommonCore import vtkPoints from vtkmodules.vtkCommonDataModel import vtkCellArray, vtkPolyData, vtkIterativeClosestPointTransform from vtkmodules.vtkFiltersGeneral import vtkTransformPolyDataFilter # from vtkmodules.vtkFiltersSources import def main(): 原文写法 sourcePoints vtkPoints() sourceVertices vtkCellArray() sp_id sourcePoints.InsertNextPoint(1.0, 0.1, 0.0) # 返回为0 sourceVertices.InsertNextCell(1) sourceVertices.InsertCellPoint(sp_id) sp_id sourcePoints.InsertNextPoint(0.1, 1.1, 0.0) # 返回为1 sourceVertices.InsertNextCell(1) sourceVertices.InsertCellPoint(sp_id) sp_id sourcePoints.InsertNextPoint(0.0, 0.1, 1.0) # 返回为2 sourceVertices.InsertNextCell(1) sourceVertices.InsertCellPoint(sp_id) source vtkPolyData() source.SetPoints(sourcePoints) source.SetVerts(sourceVertices) 我觉得这种写法与一般示例的写法出入较大在这里重写 sourcePoints vtkPoints() sourcePoints.InsertNextPoint(1.0, 0.1, 0.0) sourcePoints.InsertNextPoint(0.1, 1.1, 0.0) sourcePoints.InsertNextPoint(0.0, 0.1, 1.0) sourceCells vtkCellArray() sourceCells.InsertNextCell(1, [0]) sourceCells.InsertNextCell(1, [1]) sourceCells.InsertNextCell(1, [2]) source vtkPolyData() source.SetPoints(sourcePoints) source.SetVerts(sourceCells) pointCount 3 for index in range(pointCount): point [0, 0, 0] sourcePoints.GetPoint(index, point) print(source point[%s]%s % (index, point)) # target_points。目标点位 targetPoints vtkPoints() targetPoints.InsertNextPoint(1, 0, 0) targetPoints.InsertNextPoint(0, 1, 0) targetPoints.InsertNextPoint(0, 0, 1) targetCells vtkCellArray() targetCells.InsertNextCell(1, [0]) targetCells.InsertNextCell(1, [1]) targetCells.InsertNextCell(1, [2]) target vtkPolyData() target.SetPoints(targetPoints) target.SetVerts(targetCells) pointCount 3 for index in range(pointCount): point [0, 0, 0] targetPoints.GetPoint(index, point) print(target point[%s]%s % (index, point)) # 构建icp icp vtkIterativeClosestPointTransform() icp.SetSource(source) icp.SetTarget(target) icp.GetLandmarkTransform().SetModeToRigidBody() # 设为刚体只能旋转和平移不能缩放 icp.SetMaximumNumberOfIterations(20) # 设置最大迭代次数为20 icp.StartByMatchingCentroidsOn() # 开启ICP算法的质心预匹配步骤它会在第一次迭代时先应用一个平移变换将源点云的质心移动到目标点云的质心位置 icp.Modified() # 通知 VTK 管道这个对象icp 变换对象的参数已被修改 icp.Update() vtkTransformPolyDataFilter 将一个 vtkPolyData 数据集应用几何变换然后生成一个新的、已变换的 vtkPolyData 对象 下面一段代码的含义是指将source乘以ipc得到的4x4配准矩阵 icpTransformFilter vtkTransformPolyDataFilter() icpTransformFilter.SetInputData(source) icpTransformFilter.SetTransform(icp) icpTransformFilter.Update() transformedSource icpTransformFilter.GetOutput() # display transformed points pointCount 3 for index in range(pointCount): point [0, 0, 0] transformedSource.GetPoint(index, point) print(transformed source point[%s]%s % (index, point)) if __name__ __main__: main()