Spaces:
Running
on
Zero
Running
on
Zero
import numpy as np | |
def get_loop_cameras(num_imgs_in_loop, radius=2.0, | |
max_elevation=np.pi/6, elevation_freq=0.5, | |
azimuth_freq=2.0): | |
all_cameras_c2w_cmo = [] | |
for i in range(num_imgs_in_loop): | |
azimuth_angle = np.pi * 2 * azimuth_freq * i / num_imgs_in_loop | |
elevation_angle = max_elevation * np.sin( | |
np.pi * i * 2 * elevation_freq / num_imgs_in_loop) | |
x = np.cos(azimuth_angle) * radius * np.cos(elevation_angle) | |
y = np.sin(azimuth_angle) * radius * np.cos(elevation_angle) | |
z = np.sin(elevation_angle) * radius | |
camera_T_c2w = np.array([x, y, z], dtype=np.float32) | |
# in COLMAP / OpenCV convention: z away from camera, y down, x right | |
camera_z = - camera_T_c2w / radius | |
up = np.array([0, 0, -1], dtype=np.float32) | |
camera_x = np.cross(up, camera_z) | |
camera_x = camera_x / np.linalg.norm(camera_x) | |
camera_y = np.cross(camera_z, camera_x) | |
camera_c2w_cmo = np.hstack([camera_x[:, None], | |
camera_y[:, None], | |
camera_z[:, None], | |
camera_T_c2w[:, None]]) | |
camera_c2w_cmo = np.vstack([camera_c2w_cmo, np.array([0, 0, 0, 1], dtype=np.float32)[None, :]]) | |
all_cameras_c2w_cmo.append(camera_c2w_cmo) | |
return all_cameras_c2w_cmo |