Realcat's picture
update: major change
499e141
# -*- coding: utf-8 -*-
# @Author : xuelun
import math
import numpy as np
from imageio import imread
import datasets.scenenet.scenenet_pb2 as sn
def camera_intrinsic_transform(vfov=45,hfov=60,pixel_width=320,pixel_height=240):
camera_intrinsics = np.zeros((3,4))
camera_intrinsics[2,2] = 1
camera_intrinsics[0,0] = (pixel_width/2.0)/math.tan(math.radians(hfov/2.0))
camera_intrinsics[0,2] = pixel_width/2.0
camera_intrinsics[1,1] = (pixel_height/2.0)/math.tan(math.radians(vfov/2.0))
camera_intrinsics[1,2] = pixel_height/2.0
return camera_intrinsics
def read_depth(filename):
depth = np.array(imread(filename))
depth = depth.astype(np.float32) / 1000
return depth
def position_to_np_array(position,homogenous=False):
if not homogenous:
return np.array([position.x,position.y,position.z])
return np.array([position.x,position.y,position.z,1.0])
def interpolate_poses(start_pose,end_pose,alpha):
assert alpha >= 0.0
assert alpha <= 1.0
camera_pose = alpha * position_to_np_array(end_pose.camera)
camera_pose += (1.0 - alpha) * position_to_np_array(start_pose.camera)
lookat_pose = alpha * position_to_np_array(end_pose.lookat)
lookat_pose += (1.0 - alpha) * position_to_np_array(start_pose.lookat)
timestamp = alpha * end_pose.timestamp + (1.0 - alpha) * start_pose.timestamp
pose = sn.Pose()
pose.camera.x = camera_pose[0]
pose.camera.y = camera_pose[1]
pose.camera.z = camera_pose[2]
pose.lookat.x = lookat_pose[0]
pose.lookat.y = lookat_pose[1]
pose.lookat.z = lookat_pose[2]
pose.timestamp = timestamp
return pose
def normalize(v):
return v/np.linalg.norm(v)
def world_to_camera_with_pose(view_pose):
lookat_pose = position_to_np_array(view_pose.lookat)
camera_pose = position_to_np_array(view_pose.camera)
up = np.array([0,1,0])
R = np.diag(np.ones(4))
R[2,:3] = normalize(lookat_pose - camera_pose)
R[0,:3] = normalize(np.cross(R[2,:3],up))
R[1,:3] = -normalize(np.cross(R[0,:3],R[2,:3]))
T = np.diag(np.ones(4))
T[:3,3] = -camera_pose
return R.dot(T)