这种问题可分解为三步:

1.根据长(l)宽(w)高(h)计算出一个和正向运动方向重合的3D bbox的8个角点坐标向量:

x_corners = [-l/2,-l/2,l/2,l/2,-l/2,-l/2,l/2,l/2]
y_corners = [w/2,-w/2,-w/2,w/2,w/2,-w/2,-w/2,w/2]
#z_corners = [0,0,0,0,h,h,h,h]   #for kitti3d dataset
z_corners = [-h/2,-h/2,-h/2,-h/2,h/2,h/2,h/2,h/2]  #for our lidar-coordination-based dataset

2.根据3D bbox的朝向角(rotation angle)构建旋转矩阵与8个角点的坐标相称以将8个点旋转到实际位置,不同3D坐标系下,无论是相机坐标系还是雷达坐标系还是其他3d坐标系下,旋转问题处理起来其实是相同的,关键是看绕哪个轴旋转以及朝向角的正/负方向,也就是说无论坐标系定义其 x,y,z实际指向哪里,我们都只需看绕哪个轴旋转以及旋转角度的值(已含正/负方向)即可定义出对应的旋转矩阵(旋转矩阵本质是由正交向量组成,通过与矩阵相乘来对图像做旋转或缩放这样的线性变换以及SVD之类原理的解释可参考有关书籍资料,这里不多说):

# Rotation around x-axis
def rotx(r):c = np.cos(r)s = np.sin(r)return np.array([[1,  0,  0],[0,  c, -s],[0,  s,  c]])# Rotation around y-axis
def roty(r):c = np.cos(r)s = np.sin(r)return np.array([[c,  0,  s],[0,  1,  0],[-s, 0,  c]])# Rotation around z-axis
def  rotz(r):c = np.cos(r)s = np.sin(r)return np.array([[c, -s,  0],[s,  c,  0],[0,  0,  1]])

绕哪个轴旋转时,这个轴方向的坐标是无需旋转的只需保持原样即可,一般为了保持(x,y,z)三个维度在运算上的统一,给旋转矩阵的行列维度都增加对围绕旋转的轴这个方向的坐标的乘以0(不参与运算)或1(复制)处理。上面的r是3D bbox的实际朝向角,lidar坐标系下,r一般定义为与lidar坐标系下的x轴的夹角且以逆时针旋转为正向,相机坐标系下,r一般定义为与相机坐标系下的x轴的夹角且以顺时针方向旋转为正向,所以lidar坐标系下,旋转坐标一般调用rotz(r),而相机坐标系下一般调用roty(r)。为何旋转子矩阵是正负cos(r)和正负sin(r)的组合组成的,了解以特征向量组成的矩阵的作用的不难理解,或者画一下图也比较容易明白。

3.对3D bbox旋转后的各角点的坐标(此时3D bbox各个角点的坐标仍是相对3D bbox中心点的相对坐标)加上中心点的坐标得到相应坐标系下的绝对坐标。

完整代码如下(以lidar坐标系统下3D bbox的中心在其几何中心为例):

def center2corner_3d(x,y,z,w,l,h,r):x_corners = [-l/2,-l/2,l/2,l/2,-l/2,-l/2,l/2,l/2]y_corners = [w/2,-w/2,-w/2,w/2,w/2,-w/2,-w/2,w/2]#z_corners = [0,0,0,0,h,h,h,h]   #for kitti3d datasetz_corners = [-h/2,-h/2,-h/2,-h/2,h/2,h/2,h/2,h/2]  #for our lidar-coordination-based datasetR = rotz(r)corners_3d = np.dot(R, np.vstack([x_corners, y_corners, z_corners])) + np.vstack([x,y,z])return np.transpose(corners_3d,(0,2,1))

不同坐标系下3D bbox通过中心点坐标和长宽高求8个角点问题相关推荐

  1. 在平面内,已知矩形的中心点坐标、长、宽和倾斜角度,求矩形四个角点的坐标

    实现思路: 1.已知矩形的中心点坐标.长和宽,求矩形在不旋转的情况下矩形的四个顶点坐标: 2.再求按逆时针旋转一定角度后的四个点坐标: (在平面内,已知一个矩形的四个角坐标,将矩形绕中心点转动一个角度 ...

  2. 定义一个结构体类型Point,包含数据成员x和y,它们是平面坐标系下的坐标点(x,y),求两点间的距离

    题目描述:定义一个结构体类型Point,包含数据成员x和y,它们是平面坐标系下的坐标点(x,y).编写如下函数: (1)struct Point Input():在函数中输入一个坐标点的值,并返回该值 ...

  3. 【flutter布局】如何在动态宽高的容器下,使子组件自动占满宽高

    场景: 实现一个弹性布局,卡片为动态高度,高度由左半边内容决定.右边内容自动占满高度,并使用spaceBetween对齐. 最终效果: 问题: 倘若Row组件无固定高度(height is uncon ...

  4. 平行坐标系下采用CHT方法检测自然图像中的消失点(VanishingPoint)

    --------------------20210826更新-------------------- code和paper链接:https://pan.baidu.com/s/13RyRu0rg7Fh ...

  5. dq坐标系下无功功率表达式_一种dq旋转坐标系下谐波电流计算方法与流程

    本发明涉及一种谐波电流计算方法,具体涉及一种dq旋转坐标系下谐波电流计算方法. 背景技术: 自20世纪七十年代起,电网中的晶闸管.二极管整流器.变频器.电气化铁路及各种电力电子设备用量不断增加,这些设 ...

  6. IE6下div宽高设置

    IE6下宽高设置.IE下div 中没有内容时,设置宽高不起作用,必须设置div背景色,并使用滤镜.才能使Div填充目标区域.多用于,其他容器元素使用背景图片,但是背景图片的部分需要其他的事件支持.如跳 ...

  7. Python金融数据挖掘 第11章 复习思考题1 (聚类)给出一个数据集data_multivar.txt,里面有200个点坐标,在平面坐标系下可以画出它的散点图,用K均值聚类算法来训练模型,分4类。

    1.题目 给出一个数据集data_multivar.txt,里面有200个点坐标,在平面坐标系下可以画出它的散点图,如图11-12所示. data_multivar.txt 图11-12 数据集 da ...

  8. 不同坐标系下角速度_技术 | 西安80坐标与地方坐标系的转换方法技巧

     提示:点击上方"壹伴编辑器"↑免费订阅本刊 1.在实施GIS项目中,我们常常会遇到坐标系转换的问题,对于地方坐标系,如果没有提供转换参数,经常需要用控制点来进行坐标几何纠正,下面 ...

  9. 将物体固定在坐标某个点_坐标变换(2)—不同坐标系下的变换

    如下图所示,在自动驾驶车辆上会存在大量冗余的传感器,例如轮速传感器.激光雷达,毫米波雷达,摄像头,超声波雷达,GPS,IMU等.不同传感器对同一物体的测量原始结果都是在自身坐标下,所以首先我们需要对多 ...

最新文章

  1. Sql养成一个好习惯是一笔财富
  2. Lights inside 3D Grid LightOJ - 1284 (概率dp + 推导)
  3. opencv:图像读取BGR变成RGB
  4. 论文学习10-Joint entity recognition and relation extraction as a multi-head selection problem(实体关系联合抽取模型
  5. 【快讯】呼伦贝尔市人民医院利用Oracle APEX快速开发预检分诊系统
  6. contenttype添加field
  7. 详解中奖概率逻辑:为什么你中不了特等奖(附原件)
  8. linux系统反应优化,细说Linux系统优化-实践篇【转载】
  9. 10、Android--技巧
  10. 如何通过文件流将很多图片存入SD卡,而不是自己内存
  11. 基于Android Ndk/Jni的内存泄漏检测
  12. 微信小程序-制作购物车
  13. 合批/批量渲染 (Batch)、实例化Instancing
  14. 红警辅助脚本_红警Ol全能辅助_红警自动切小号刷资源_加速采集打野_建筑升级……
  15. Julia处理高斯光束的光斑图像
  16. Lua unpack函数用法
  17. kubectl命令的使用、滚动更新以及回滚操作
  18. 淘宝客导购产品设计 (一)
  19. rar文件解压后可以删除吗?rar文件删除后怎么恢复?
  20. 黑马python2019吾爱破解_2019KCTF 南充茶坊(python逆向)

热门文章

  1. remote: error: cannot lock ref ‘refs/heads/dev/mz/dev‘: ‘refs/heads/dev‘ exists; cannot create ‘refs
  2. android网络 gps定位失败,android 网络定位失败 location为null的真正原因
  3. 论文阅读《Multi-view Multi-behavior Contrastive Learning in Recommendation》
  4. iOS开发之Objective-C(面试篇)-李飞-专题视频课程
  5. 德睿多媒体信息发布系统
  6. 多项式拟合一般方程法详细推导
  7. 物联网专科专业必修课程_大专学物联网专业好不好 物联网要学哪些课程
  8. 详解ISO13400文档-3
  9. Unity TileMap修改瓦片图片
  10. 北京信息科技大学第十一届程序设计竞赛(重现赛)I andy种树