# 2. Projects

Learning3D: A Modern Library for Deep Learning on 3D Point Clouds Data.

# 3. Distance Metrics

## 3.1. Chamfer Distance





## 3.2. Earth Mover Distance





## 3.3. F-score





# 4. Sampling

## 4.1. Sampling from mesh





## 4.2. Sampling from point cloud

farthest point sampling





# 5. 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