Advertisement
Guest User

Untitled

a guest
Oct 17th, 2019
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.02 KB | None | 0 0
  1. import numpy as np
  2.  
  3. pt2d = np.loadtxt('pt2d.txt').astype(np.float64)
  4. pt3d = np.loadtxt('pt3d.txt').astype(np.float64)
  5.  
  6. print(pt2d.max(axis=0))
  7.  
  8. N = pt2d.shape[0]
  9. x, y = pt2d.T
  10. X, Y, Z = pt3d.T
  11.  
  12. A = np.zeros((2 * N, 12))
  13. val1 = np.full((N,), 1.0)
  14. val0 = np.full((N,), 0.0)
  15. A[0::2] = np.stack(
  16.     [X, Y, Z, val1, val0, val0, val0, val0, -x * X, -x * Y, -x * Z, -x], axis=1)
  17. A[1::2] = np.stack(
  18.     [val0, val0, val0, val0, X, Y, Z, val1, -y * X, -y * Y, -y * Z, -y], axis=1)
  19.  
  20. W, V = np.linalg.eig(A.T @ A)
  21. P = V[:, W.argmin()].reshape(3, 4)
  22. print(P)
  23.  
  24. M, P4 = P[:, :3], P[:, 3]
  25. C = - np.linalg.inv(M) @ P4
  26. print(C)
  27. q, r = np.linalg.qr(np.linalg.inv(M))
  28. K = np.linalg.inv(r)
  29. R = np.linalg.inv(q)
  30. T = np.linalg.inv(K) @ P4
  31. Rt = np.concatenate([R, T.reshape(3, 1)], axis=1)
  32. print(K)
  33. assert np.allclose(P, K @ Rt)
  34.  
  35. homo3d = np.stack([X, Y, Z, val1], axis=1).T
  36. homo2d = K @ Rt @ homo3d
  37. coor2d = homo2d[:2, :] / homo2d[2, :]
  38. coor2d = coor2d.T
  39. error = np.linalg.norm(coor2d - pt2d, axis=1).mean()
  40.  
  41. print(error)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement