VTK/Examples/Python/IterativeClosestPoints
From KitwarePublic
< VTK | Examples(Redirected from Iterative Closest Points (ICP) (python))
import vtk from vtk import * import hybrid from hybrid import * # ============ create source points ============== print "Creating source points..." sourcePoints = vtk.vtkPoints() sourceVertices = vtk.vtkCellArray() id = sourcePoints.InsertNextPoint(1.0, 0.1, 0.0) sourceVertices.InsertNextCell(1) sourceVertices.InsertCellPoint(id) id = sourcePoints.InsertNextPoint(0.1, 1.1, 0.0) sourceVertices.InsertNextCell(1) sourceVertices.InsertCellPoint(id) id = sourcePoints.InsertNextPoint(0.0, 0.1, 1.0) sourceVertices.InsertNextCell(1) sourceVertices.InsertCellPoint(id) source = vtk.vtkPolyData() source.SetPoints(sourcePoints) source.SetVerts(sourceVertices) source.Update() print "Displaying source points..." # ============ display source points ============== pointCount = 3 for index in range(pointCount): point = [0,0,0] sourcePoints.GetPoint(index, point) print "source point[%s]=%s" % (index,point) #============ create target points ============== print "Creating target points..." targetPoints = vtk.vtkPoints() targetVertices = vtk.vtkCellArray() id = targetPoints.InsertNextPoint(1.0, 0.0, 0.0) targetVertices.InsertNextCell(1) targetVertices.InsertCellPoint(id) id = targetPoints.InsertNextPoint(0.0, 1.0, 0.0)## targetVertices.InsertNextCell(1) targetVertices.InsertCellPoint(id) id = targetPoints.InsertNextPoint(0.0, 0.0, 1.0) targetVertices.InsertNextCell(1) targetVertices.InsertCellPoint(id) target = vtk.vtkPolyData() target.SetPoints(targetPoints) target.SetVerts(targetVertices) target.Update() # ============ display target points ============== print "Displaying target points..." pointCount = 3 for index in range(pointCount): point = [0,0,0] targetPoints.GetPoint(index, point) print "target point[%s]=%s" % (index,point) print "Running ICP ----------------" # ============ run ICP ============== icp = vtk.vtkIterativeClosestPointTransform() icp.SetSource(source) icp.SetTarget(target) icp.GetLandmarkTransform().SetModeToRigidBody() #icp.DebugOn() icp.SetMaximumNumberOfIterations(20) icp.StartByMatchingCentroidsOn() icp.Modified() icp.Update() icpTransformFilter = vtk.vtkTransformPolyDataFilter() icpTransformFilter.SetInput(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 "xformed source point[%s]=%s" % (index,point)

