(uv: np.ndarray, xy: np.ndarray, z: np.ndarray, shift: np.ndarray)
| 82 | uv, xy, z = uv.reshape(-1, 2), xyz[..., :2].reshape(-1, 2), xyz[..., 2].reshape(-1) |
| 83 | |
| 84 | def fn(uv: np.ndarray, xy: np.ndarray, z: np.ndarray, shift: np.ndarray): |
| 85 | xy_proj = xy / (z + shift)[: , None] |
| 86 | f = (xy_proj * uv).sum() / np.square(xy_proj).sum() |
| 87 | err = (f * xy_proj - uv).ravel() |
| 88 | return err |
| 89 | |
| 90 | solution = least_squares(partial(fn, uv, xy, z), x0=0, ftol=1e-3, method='lm') |
| 91 | optim_shift = solution['x'].squeeze().astype(np.float32) |
no outgoing calls
no test coverage detected