ellipt_fourier_desc.py 857 B

1234567891011121314151617181920212223242526
  1. """Elliptic Fourier Descriptors
  2. parametrizing a closed contour (in red)"""
  3. import numpy as np
  4. import vedo
  5. import pyefd
  6. shapes = vedo.Assembly(vedo.dataurl+'timecourse1d.npy')
  7. s = shapes[55].c('red5').lw(3)
  8. pts1 = s.points[:,(0,1)].copy()
  9. pts2 = s.points[:,(0,1)].copy()
  10. pts2[:,0] *= -1
  11. pts2 = np.flip(pts2, axis=0)
  12. pts = np.array(pts1.tolist() + pts2.tolist())
  13. rlines = []
  14. for order in range(5,30, 5):
  15. coeffs = pyefd.elliptic_fourier_descriptors(pts, order=order, normalize=False)
  16. a0, c0 = pyefd.calculate_dc_coefficients(pts)
  17. rpts = pyefd.reconstruct_contour(coeffs, locus=(a0,c0), num_points=400)
  18. color = vedo.color_map(order, "Blues", 5,30)
  19. rline = vedo.Line(rpts).lw(3).c(color)
  20. rlines.append(rline)
  21. s.z(0.1) # move it on top so it's visible
  22. vedo.show(s, *rlines, __doc__, axes=1, bg='k', size=(1190, 630), zoom=1.8).close()