36 lines
1.6 KiB
Python
36 lines
1.6 KiB
Python
|
# Copyright (c) 2022, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||
|
#
|
||
|
# NVIDIA CORPORATION & AFFILIATES and its licensors retain all intellectual property
|
||
|
# and proprietary rights in and to this software, related documentation
|
||
|
# and any modifications thereto. Any use, reproduction, disclosure or
|
||
|
# distribution of this software and related documentation without an express
|
||
|
# license agreement from NVIDIA CORPORATION & AFFILIATES is strictly prohibited.
|
||
|
|
||
|
def normalize_point_clouds(pcs, mode='shape_bbox'): # can be a property func
|
||
|
'''
|
||
|
copied from https://github.com/luost26/diffusion-point-cloud/blob/0bfd688379e78ac75fa75e6a2c5029e362496169/test_gen.py#L16
|
||
|
Args:
|
||
|
pcs: list of [N,3] or tensor in shape: B,N,3
|
||
|
'''
|
||
|
# logger.debug('Normalization mode: %s' % mode)
|
||
|
assert(type(pcs) == list or len(pcs.shape) ==
|
||
|
3), f'expect pcs to be list, get: {type(pcs)} or 3d tensor; '
|
||
|
output_list = []
|
||
|
for i in range(len(pcs)): # , desc='Normalize'):
|
||
|
pc = pcs[i]
|
||
|
pc = pc.detach().clone()
|
||
|
assert(mode == 'shape_bbox')
|
||
|
assert(len(pc.shape) == 2 and pc.shape[-1] in [3, 4,
|
||
|
6, 9]), f'expect get (N,3 or 6), get {pc.shape}'
|
||
|
pc_max, _ = pc.max(dim=0, keepdim=True) # (1, 3)
|
||
|
pc_min, _ = pc.min(dim=0, keepdim=True) # (1, 3)
|
||
|
pc_min = pc_min[:, :3]
|
||
|
pc_max = pc_max[:, :3]
|
||
|
shift = ((pc_min + pc_max) / 2).view(1, 3)
|
||
|
scale = (pc_max - pc_min).max().reshape(1, 1) / 2
|
||
|
pc[:, :3] = (pc[:, :3] - shift) / scale
|
||
|
# pcs[i] = pc
|
||
|
output_list.append(pc)
|
||
|
return output_list
|
||
|
|