def reference_porint_project(reference_points, map_range, img_metas):
points_shape = list(reference_points.shape)
points_shape[-1] = 1
## reference_points 2d -> 3d
reference_points_3d = torch.cat((reference_points,torch.zeros(points_shape,device=reference_points.device)),dim=-1)
# 0-1尺度 --> ego map尺度
reference_points_3d[..., 0:1] = reference_points_3d[..., 0:1]*(map_range[3] - map_range[0]) + map_range[0] #x轴
reference_points_3d[..., 1:2] = reference_points_3d[..., 1:2]*(map_range[4] - map_range[1]) + map_range[1] #y轴
reference_points_3d[..., 2:3] = reference_points_3d[..., 2:3]*(map_range[5] - map_range[2]) + map_range[2] #z轴
cam2ego_rotation = reference_points_3d.new_tensor(img_metas[0]['cam2ego_rotation'])
cam2ego_translation = reference_points_3d.new_tensor(img_metas[0]['cam2ego_translation'])
cam_intrinsic = reference_points_3d.new_tensor(img_metas[0]['cam_intrinsic'])
### ego 2 cam
reference_points_3d = reference_points_3d - cam2ego_translation
reference_points_3d = reference_points_3d @ cam2ego_rotation
### 3D to 2D projection
proj_mat_expanded = torch.eye(
4, device=cam_intrinsic.device, dtype=cam_intrinsic.dtype)
proj_mat_expanded[:3, :3] = cam_intrinsic
proj_mat = proj_mat_expanded
points_4 = torch.cat([reference_points_3d, reference_points_3d.new_ones(points_shape)], dim=-1)
point_2d = points_4 @ proj_mat.T
reference_points_uv_origin = point_2d[..., :2] / point_2d[..., 2:3]
# if with_depth:
# reference_points_uv_origin = torch.cat([reference_points_uv_origin, point_2d[..., 2:3]], dim=-1)
reference_points_uv_origin = (reference_points_uv_origin-1).round()
fov_inds = ((reference_points_uv_origin[:,:, 0] < img_metas[0]['img_shape'][1])
& (reference_points_uv_origin[:,:, 0] >= 0)
& (reference_points_uv_origin[:,: ,1] < img_metas[0]['img_shape'][0])
& (reference_points_uv_origin[:,: ,1] >= 0))
reference_points_uv = reference_points_uv_origin[0][fov_inds[0], :2]
# 图像尺度 --> 0-1尺度
reference_points_uv[..., 0] /= img_metas[0]['img_shape'][1] # 长宽归一化
reference_points_uv[..., 1] /= img_metas[0]['img_shape'][0]
return reference_points_uv
ego坐标系投影到uv平面
最新推荐文章于 2023-12-19 23:34:19 发布