| | import numpy as np |
| |
|
| |
|
| | def random_point_dropout(batch_pc, max_dropout_ratio=0.875): |
| | ''' batch_pc: BxNx3 ''' |
| | for b in range(batch_pc.shape[0]): |
| | dropout_ratio = np.random.random()*max_dropout_ratio |
| | drop_idx = np.where(np.random.random((batch_pc.shape[1]))<=dropout_ratio)[0] |
| | if len(drop_idx)>0: |
| | batch_pc[b,drop_idx,:] = batch_pc[b,0,:] |
| | return batch_pc |
| |
|
| | def random_scale_point_cloud(batch_data, scale_low=0.8, scale_high=1.25): |
| | """ Randomly scale the point cloud. Scale is per point cloud. |
| | Input: |
| | BxNx3 array, original batch of point clouds |
| | Return: |
| | BxNx3 array, scaled batch of point clouds |
| | """ |
| | B, N, C = batch_data.shape |
| | scales = np.random.uniform(scale_low, scale_high, B) |
| | for batch_index in range(B): |
| | batch_data[batch_index,:,:] *= scales[batch_index] |
| | return batch_data |
| |
|
| | def shift_point_cloud(batch_data, shift_range=0.1): |
| | """ Randomly shift point cloud. Shift is per point cloud. |
| | Input: |
| | BxNx3 array, original batch of point clouds |
| | Return: |
| | BxNx3 array, shifted batch of point clouds |
| | """ |
| | B, N, C = batch_data.shape |
| | shifts = np.random.uniform(-shift_range, shift_range, (B,3)) |
| | for batch_index in range(B): |
| | batch_data[batch_index,:,:] += shifts[batch_index,:] |
| | return batch_data |