(extrinsics, lambda_t=1.0, normalize=True, batched=True)
| 106 | dists[i_start:i_end, j_start:j_end] = rot_diff[i_start:i_end, j_start:j_end] + lambda_t * trans_diff |
| 107 | return dists |
| 108 | def compute_ranking(extrinsics, lambda_t=1.0, normalize=True, batched=True): |
| 109 | |
| 110 | if normalize: |
| 111 | extrinsics = np.copy(extrinsics) |
| 112 | camera_center = np.copy(extrinsics[:, :3, 3]) |
| 113 | camera_center_scale = np.linalg.norm(camera_center, axis=1) |
| 114 | avg_scale = np.mean(camera_center_scale) |
| 115 | extrinsics[:, :3, 3] = extrinsics[:, :3, 3] / avg_scale |
| 116 | |
| 117 | |
| 118 | if batched: |
| 119 | if len(extrinsics) > 6000: |
| 120 | dists = extrinsic_distance_batch_chunked(extrinsics, lambda_t=lambda_t) |
| 121 | else: |
| 122 | dists = extrinsic_distance_batch(extrinsics, lambda_t=lambda_t) |
| 123 | else: |
| 124 | N = extrinsics.shape[0] |
| 125 | dists = np.zeros((N, N)) |
| 126 | for i in range(N): |
| 127 | for j in range(N): |
| 128 | dists[i,j] = extrinsic_distance(extrinsics[i], extrinsics[j], lambda_t=lambda_t) |
| 129 | ranking = np.argsort(dists, axis=1) |
| 130 | return ranking, dists |
no test coverage detected