in phosa/utils/camera.py [0:0]
def local_to_global_cam(bboxes, cams, L):
"""
Converts a weak-perspective camera w.r.t. a bounding box to a weak-perspective
camera w.r.t. to the entire image.
Args:
bboxes (N x 4): Bounding boxes in xyxy format.
cams (N x 3): Weak perspective camera.
L (int): Max of height and width of image.
"""
square_bboxes = make_bbox_square(bbox_xy_to_wh(bboxes))
global_cams = []
for cam, bbox in zip(cams, square_bboxes):
x, y, b, _ = bbox
X = np.stack((x, y))
# Bbox space [0, b]
s_crop = b * cam[0] / 2
t_crop = cam[1:] + 1 / cam[0]
# Global image space [0, 1]
s_og = s_crop / L
t_og = t_crop + X / s_crop
# Normalized global space [-1, 1]
s = s_og * 2
t = t_og - 0.5 / s_og
global_cams.append(np.concatenate((np.array([s]), t)))
return np.stack(global_cams)