Spaces:
Build error
Build error
| import numpy as np | |
| from ops.sky import Sky_Seg_Tool | |
| from ops.utils import dpt2xyz | |
| from .spiral import spiral_camera_poses | |
| class Trajectory_Generation(): | |
| def __init__(self, | |
| scene = None, | |
| method = 'spiral') -> None: | |
| ''' | |
| method = 'spiral'/ rot' / 'spin' | |
| ''' | |
| self._method = method | |
| self.forward_ratio = scene.traj_forward_ratio | |
| self.backward_ratio = scene.traj_backward_ratio | |
| self.min_percentage = scene.traj_min_percentage | |
| self.max_percentage = scene.traj_max_percentage | |
| def _radius(self, xyz): | |
| # get range | |
| _min = np.percentile(xyz,self.min_percentage,axis=0) | |
| _max = np.percentile(xyz,self.max_percentage,axis=0) | |
| _range = _max - _min | |
| # set radius to mean range of three axes | |
| self.radius = np.mean(_range) | |
| def _traj_spiral(self, nframe): | |
| trajs = spiral_camera_poses(nframe, self.radius, self.forward_ratio, self.backward_ratio) | |
| return trajs | |
| def __call__(self, nframe, xyz): | |
| if xyz.ndim > 2: | |
| xyz = xyz.reshape(-1,3) | |
| self._radius(xyz) | |
| if self._method == 'rot': | |
| trajs = self._traj_rot(nframe) | |
| elif self._method == 'spin': | |
| trajs = self._traj_spin(nframe) | |
| elif self._method == 'spiral': | |
| trajs = self._traj_spiral(nframe) | |
| else: | |
| raise TypeError('method = rot / spiral') | |
| return trajs | |
| def _generate_trajectory(cfg, scene, nframes=None): | |
| method = scene.traj_type | |
| nframe = cfg.scene.traj.n_sample*6 if nframes is None else nframes | |
| sky,dpt,intrinsic = scene.frames[0].sky,scene.frames[0].dpt,scene.frames[0].intrinsic | |
| xyz = dpt2xyz(dpt,intrinsic) | |
| init_xyz = xyz[~sky] | |
| generator = Trajectory_Generation(scene=scene,method=method) | |
| traj = generator(nframe,init_xyz) | |
| return traj |