你好堆栈溢出, 我试图将一些 6D 姿势估计算法与自定义数据集一起使用。它进行得很好,但我需要保存标签,也就是图片中显示的边界框的二维坐标。不幸的是它与地面实况数据不匹配,可能我在我的代码中做错了。
首先,我试图重新创建这个 6D 姿势估计算法:https://github.com/Microsoft/singleshotpose
我在搅拌机中生成一个对象,将其质心定位在 (0,0,0),然后为其拍照。我的想法是使用 for 循环轻松生成 1000 张图片,这样我就可以很好地训练模型。这是获取二维边界框的代码
scene = bpy.context.scene
brick = bpy.data.objects['brick']
bb_vertices = [Vector(v) for v in brick.bound_box]
mat = brick.matrix_world
world_bb_vertices = [mat @ v for v in bb_vertices]
co_2d = [world_to_camera_view(scene, scene.camera, v) for v in world_bb_vertices]
co_2d_new = np.delete(co_2d, 2, 1)
co_2d_final = np.reshape(co_2d_new, -1)
#print(co_2d_final)
# [0.44425908 0.54335487 0.3063629 0.47222671 0.29777738 0.6361047
# 0.44198048 0.69735122 0.71110761 0.3768487 0.57061917 0.27459577
# 0.57443786 0.46377245 0.7214548 0.55333525]
最后两步是重塑它,因为我得到了 (x,y,z) 坐标,但不需要 z 坐标。当我使用 opencv 绘制标签时,我得到了这个:
如您所见,这些点与边界框坐标不相似,但看起来有点眼熟。 如果有人能帮助我,我将不胜感激!提前致谢
编辑: 如果有人遇到同样的问题,可以在这里找到答案: https://blender.stackexchange.com/questions/287352/blender-3d-to-2d-transformation-giving-wrong-bounding-box-coordinates