12345678910111213141516171819202122232425262728 |
- """Fit a surface to a set of points"""
- # Thin Plate Spline transformations describe a nonlinear warp
- # transform defined by a set of source and target landmarks.
- # Any point on the mesh close to a source landmark will
- # be moved to a place close to the corresponding target landmark.
- # The points in between are interpolated using Bookstein's algorithm.
- from vedo import Grid, Points, Arrows, show
- import numpy as np
- np.random.seed(1)
- surf = Grid([0,0,0], res=[25,25])
- ids = np.random.randint(0, surf.npoints, 10) # pick 10 indices
- pts = surf.points[ids]
- ptsource, pttarget = [], []
- for pt in pts:
- pt1 = pt + [0, 0, np.random.randn() * 0.1]
- pt2 = surf.closest_point(pt1)
- ptsource.append(pt2)
- pttarget.append(pt1)
- warped = surf.warp(ptsource, pttarget, mode='2d')
- warped.color("b4").lc('lightblue').lw(1).wireframe(False)
- apts = Points(pttarget).point_size(15).c("red5")
- arrs = Arrows(ptsource, pttarget).c("black")
- show(warped, apts, arrs, __doc__, axes=1, viewup="z").close()
|