三维标注遇到的问题总结

5 篇文章 0 订阅
2 篇文章 0 订阅

三维点云标注问题

1. 旋转角

旋转角表示当前方向点、中心点、以前的方向点组成的夹角。需要保存上次旋转后的旋转角总和,然后当前旋转时,把当前旋转角加到上次保存的总和中。

通过当前方向角建立方向矩阵与上次的8个坐标点相乘即可得到旋转后的8个坐标点,然后通过8个坐标点可得到其中点云。

在这里插入图片描述

2. 方向角

方向角是当前方向点、中心点与x轴方向(即向量[1,0,0])的夹角。

方向角的作用:

  • 画出汽车前进方向。
  • 另外也用来在外扩点云时判断哪条边是长,哪条边是宽,因为对于长宽的外扩比例可能不同。具体操作就是在已知4个点坐标是时候找相邻两条边,分别计算其向量与方向角对应向量的点积,如果点积接近0则为垂直关系,即该边为宽,否则为长。

3. 二维平面垂直拉伸影响水平拉伸

在垂直拉伸过程中,框的中心点会发生偏移,错误的原因是在正交过程中默认把框的中心点当做了旋转点,但是其实框的旋转点是不变的。

解决方案:保存拉伸前的旋转点,将坐标围绕该点进行旋转。

4. 正交操作需要先平移再旋转再平移回去

由于需要得到每次旋转后三维框中的点云坐标,如果直接将三维框的坐标点进行旋转得到的三维框坐标是相对于坐标原点旋转的,其框会偏离点云,这样就得不到框中的点云坐标。因此需要先将8个点的中心平移到坐标原点并保存平移向量,然后以坐标原点进行旋转,旋转过后将平移向量重新加到8个坐标点中,这样得到的8个点是真实的三维框坐标,然后计算框中的点云即可。

5. anti_transfer 函数

在三维坐标映射到二维坐标时需要先调用 transfer 函数,在二维坐标对三维框进行处理完成后需要再调用 anti_transfer 函数将三维坐标变成正交前的原始坐标。

6. myavi的鼠标事件触发

6.1 左击得到鼠标所在坐标

先定义函数 def picker_callback(picker) 在函数中取 picker.pick_position 即为鼠标坐标。然后在 fig 对象添加监听事件 self.fig.on_mouse_pick(picker_callback, type='world') 注意type默认为'point',点击的坐标会自动吸到附近的点云坐标中,改成'world'则不会吸附,鼠标指到哪里就得到哪里的坐标。

def picker_callback(picker):
    pos = picker.pick_position
    print(pos)
    
self.fig.on_mouse_pick(picker_callback, type='world')
6.2 鼠标点击触发事件

先定义函数 def press_callback(vtk_obj, event) 其中编写触发点击后的时间。然后添加监听事件self.scene.interactor.add_observer('RightButtonPressEvent', press_callback),其中'RightButtonPressEvent'可以改写成'LeftButtonPressEvent''MiddleButtonPressEvent'表示左击和中击事件。

def press_callback(vtk_obj, event):
    print('The press occurs').
    
self.scene.interactor.add_observer('RightButtonPressEvent', press_callback)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值