3D Transformation
Projects
Learning3D: A Modern Library for Deep Learning on 3D Point Clouds Data.
Sampling
Sampling from mesh
Sampling from point cloud
farthest point sampling
Normalization
def normalize_to_box(input):
"""
normalize point cloud to unit bounding box
center = (max - min)/2
scale = max(abs(x))
input: pc [N, P, dim] or [P, dim]
output: pc, centroid, furthest_distance
From https://github.com/yifita/pytorch_points
"""
if len(input.shape) == 2:
axis = 0
P = input.shape[0]
D = input.shape[1]
elif len(input.shape) == 3:
axis = 1
P = input.shape[1]
D = input.shape[2]
else:
raise ValueError()
if isinstance(input, np.ndarray):
maxP = np.amax(input, axis=axis, keepdims=True)
minP = np.amin(input, axis=axis, keepdims=True)
centroid = (maxP+minP)/2
input = input - centroid
furthest_distance = np.amax(np.abs(input), axis=(axis, -1), keepdims=True)
input = input / furthest_distance
elif isinstance(input, torch.Tensor):
maxP = torch.max(input, dim=axis, keepdim=True)[0]
minP = torch.min(input, dim=axis, keepdim=True)[0]
centroid = (maxP+minP)/2
input = input - centroid
in_shape = list(input.shape[:axis])+[P*D]
furthest_distance = torch.max(torch.abs(input).reshape(in_shape), dim=axis, keepdim=True)[0]
furthest_distance = furthest_distance.unsqueeze(-1)
input = input / furthest_distance
else:
raise ValueError()
return input, centroid, furthest_distance