nuScenes数据集3dBox转换2dBox


前言

接续上篇文章nuScenes数据集3Dbounding box的更新,本篇文章主要讲解如何从图像的3dbox转到2dbox(内附源码)

注意:在nuScenes源码文件下有一个get_2d_annotation_as_json.py,运行之后可以直接得到2d注释信息,但是小编在运行得到后,发现会有遗漏,也就是多个相机下的sanples数量不等。因此加以改进得到所有的注释信息。

一、主要函数

1.从3d视角投影到2d平面(均为图像下)

代码如下:

def view_points(points: np.ndarray, view: np.ndarray, normalize: bool) -> np.ndarray:
# points就是我们的3d框的8个角坐标;view就是我们所需要用到对应相机的相机内参。
    assert view.shape[0] <= 4
    assert view.shape[1] <= 4
    assert points.shape[0] == 3

    viewpad = np.eye(4)
    viewpad[:view.shape[0], :view.shape[1]] = view

    nbr_points = points.shape[1]

    points = np.concatenate((points, np.ones((1, nbr_points))))
    points = np.dot(viewpad, points)
    points = points[:3, :]

    if normalize:
        points = points / points[2:3, :].repeat(3, 0).reshape(3, nbr_points)

    return points

2.得到目标在图像视角下的2d坐标(坐上,右下)

def post_process_coords(corner_coords: List,
                        imsize: Tuple[int, int] = (1600, 900)) -> Union[Tuple[float, float, float, float], None]:
    polygon_from_2d_box = MultiPoint(corner_coords).convex_hull  # 多边形
    img_canvas = box(0, 0, imsize[0], imsize[1])  # 图像的画布 box(minx,miny,maxx,maxy)左上右下

    if polygon_from_2d_box.intersects(img_canvas):  # 如果相交
        img_intersection = polygon_from_2d_box.intersection(img_canvas)
        intersection_coords = np.array([coord for coord in img_intersection.exterior.coords])

        min_x = min(intersection_coords[:, 0])
        min_y = min(intersection_coords[:, 1])
        max_x = max(intersection_coords[:, 0])
        max_y = max(intersection_coords[:, 1])

        return min_x, min_y, max_x, max_y
    else:
        return None

二、效果展示

在生成2dbox的时候,加入了id信息。

t帧图像
t+1帧图像
从上面相连的两帧可以看出,同一个物体的id号是没有改变的,可以很好的应用到数据集的检测、跟踪过程。

放一个场景下的一段GIF图:
在这里插入图片描述
从这里可以更清楚的看到一个scene下,目标的id是始终保持一致的。

三、源码以及运行

1.源码链接

源码链接

2.源码运行

获取源码后,需要更改dataroot,确保数据集的路径准确。在pycharm上直接运行draw_2d_box.py即可;另外一个py文件是把同一场景下的6个摄像机的图片放在一起。

  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值