PointCloud2D.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import numpy as np
  2. import alphashape
  3. import shapely
  4. #import shapely.geometry
  5. import matplotlib.pyplot as plt
  6. class PointCloud2D(object):
  7. """description of class"""
  8. # constructor
  9. # -----------------------------------------------------------------------------
  10. def __init__(self,x,y):
  11. # attibutes
  12. self.X = x
  13. self.Y = y
  14. # methods
  15. # -----------------------------------------------------------------------------
  16. def removeIsolatedPoint(self, dist, nbPoint):
  17. keepX = []
  18. keepY = []
  19. removeX = []
  20. removeY = []
  21. for i in range(len(self.X)):
  22. x, y=self.X[i], self.Y[i]
  23. idx = (self.X >( x-dist/2)) & (self.X < (x+dist/2)) & (self.Y > (y-dist/2)) & (self.Y < (y+dist/2))
  24. if len(idx[idx==True])> nbPoint:
  25. keepX.append(x)
  26. keepY.append(y)
  27. else:
  28. removeX.append(x)
  29. removeY.append(y)
  30. return PointCloud2D(keepX,keepY),PointCloud2D(removeX,removeY)
  31. def toPoint(self):
  32. res = []
  33. for i, x in enumerate(self.X):
  34. res.append((x,self.Y[i]))
  35. return res
  36. def contour(self, alpha):
  37. return alphashape.alphashape(self.toPoint(), alpha)
  38. def convexHull(self):
  39. return shapely.geometry.MultiPoint(self.toPoint()).convex_hull
  40. def plot(self, mark):
  41. plt.plot(self.X,self.Y,mark)
  42. # class methods
  43. # -----------------------------------------------------------------------------
  44. def toXYarray(poly):
  45. X, Y = [], []
  46. listOfPoints = list(poly.exterior.coords)
  47. for xy in listOfPoints:
  48. x,y = xy
  49. X.append(x)
  50. Y.append(y)
  51. return X,Y