Spaces:
Running
Running
import numpy as np | |
import re | |
import os | |
import argparse | |
def natural_sort(l): | |
convert = lambda text: int(text) if text.isdigit() else text.lower() | |
alphanum_key = lambda key: [ convert(c) for c in re.split('([0-9]+)', key) ] | |
return sorted(l, key = alphanum_key) | |
def angular_distance_np(R_hat, R): | |
# measure the angular distance between two rotation matrice | |
# R1,R2: [n, 3, 3] | |
if R_hat.shape == (3,3): | |
R_hat = R_hat[np.newaxis,:] | |
if R.shape == (3,3): | |
R = R[np.newaxis,:] | |
n = R.shape[0] | |
trace_idx = [0,4,8] | |
trace = np.matmul(R_hat, R.transpose(0,2,1)).reshape(n,-1)[:,trace_idx].sum(1) | |
metric = np.arccos(((trace - 1)/2).clip(-1,1)) / np.pi * 180.0 | |
return metric | |
def main(): | |
parser = argparse.ArgumentParser(description='Rotation and translation metric.') | |
parser.add_argument('--trans1', type=str) | |
parser.add_argument('--trans2', type=str) | |
args = parser.parse_args() | |
transFiles1 = natural_sort([file for file in os.listdir(args.trans1) if (file.find("npy") != -1 )]) | |
transFiles1 = [os.path.join(args.trans1, img) for img in transFiles1] | |
transFiles2 = natural_sort([file for file in os.listdir(args.trans2) if (file.find("npy") != -1 )]) | |
transFiles2 = [os.path.join(args.trans2, img) for img in transFiles2] | |
# print(len(transFiles1), transFiles1) | |
# print(len(transFiles2), transFiles2) | |
for T1_file, T2_file in zip(transFiles1, transFiles2): | |
T1 = np.load(T1_file) | |
T2 = np.load(T2_file) | |
print("Shapes: ", T1.shape, T2.shape) | |
for i in range(T1.shape[2]): | |
R1 = T1[:3, :3, i] | |
R2 = T2[:3, :3, i] | |
t1 = T1[:4, -1, i] | |
t2 = T2[:4, -1, i] | |
R_norm = angular_distance_np(R1.reshape(1,3,3), R2.reshape(1,3,3))[0] | |
print("R norm:", R_norm) | |
exit(1) | |
if __name__ == "__main__": | |
main() |