Spaces:
Paused
Paused
import numpy as np | |
import os | |
import json | |
# 定义反向的 tf_mat2extr 函数 (C2W -> W2C) | |
def tf_mat2extr(tf_mat): | |
""" | |
Convert a camera-to-world (C2W) transformation matrix back to | |
a world-to-camera (W2C) extrinsic matrix. | |
""" | |
tf_mat_inv = np.linalg.inv(tf_mat) | |
trans_mat = np.eye(4) | |
trans_mat[1, 1] = -1 | |
trans_mat[2, 2] = -1 | |
tf_mat_inv = trans_mat @ tf_mat_inv | |
extr = np.stack([tf_mat_inv[0, :], tf_mat_inv[1, :], tf_mat_inv[2, :]], axis=0) | |
return extr[:, :4] | |
root = '/data1/hezijian/save_render_data_yw/all/' # revise your path here | |
for sub_folder in os.listdir(root): | |
# sub_folder = '0000' | |
sub_folder_json_path = os.path.join(root, sub_folder, 'transforms.json') | |
params_path = os.path.join(root,sub_folder,'parm') | |
info = json.load(open(sub_folder_json_path)) | |
frames = info['frames'] | |
if not os.path.exists(params_path): | |
os.makedirs(params_path) | |
for frame in frames: | |
transform_matrix = frame['transform_matrix'] | |
flx = frame['fl_x'] | |
fly = frame['fl_y'] | |
cx = frame['cx'] | |
cy = frame['cy'] | |
file_name = frame['file_path'].split('/')[1].split('.')[0] | |
transform_matrix = np.array(transform_matrix) | |
extrinsic_matrix = tf_mat2extr(transform_matrix) | |
intrinsic_matrix = np.array([[flx, 0, cx],[0,fly,cy],[0,0,1]]) | |
np.save(os.path.join(params_path,'%s_extrinsic.npy'%file_name),extrinsic_matrix) | |
np.save(os.path.join(params_path,'%s_intrinsic.npy'%file_name),intrinsic_matrix) | |