kitti数据集在3D目标检测中的入门(二)可视化详解

本文已参与「新人创作礼」活动,一起开启创作之路。

推荐阅读第一篇博客:https://juejin.cn/post/708342135068像素生存者25048846 因为在写第一篇的时候对于kitti数据集的用法总结的不是太清楚,这里根据可视化代码,httpwatch然后重新总结一下其主要的流程认知:

一:点云数据bin投影到图像上

一个bin文件对应一个360方向的点云:

kitti数据集在3D目标检测中的入门(二)可视化详解
可以看到其中间黑的位置是车所在的位置,以中心点的3D坐标下,一个bin文件存储着多个点的坐标,(x,y,z,r),r表示反射的强度这里一般用不到。

pointcloud = np.fromfile(str("G:/3Ddet/Point-GNN/000000.bin"), dtype=np.float32, count=-1).reshape([-1, 4])
print(pointcloud.shape)
x = pointcloud[:, 0]  # x position of point
y = pointcloud[:, 1]  # y position of point
z = pointcloud[:, 2]  # z position of point
r = pointcloud[:, 3]  # reflectance value of point
d = np.sqrt(x ** 2 + y ** 2)  # Map Distance from sensor

可以通过以上代码,得到每个点的x,y,z的值,一个bin文件大约有10万多个点。

kitti数据集在3D目标检测中的入门(二)可视化详解
(1)将点云下的坐标系转换到以0号像素游戏照相机下的坐标系下,需要利用到外参矩阵。http 404 其过程:

  • 1.1像素画生成器:假设n个点,则得到矩阵nx3:

kitti数据集在3D目标检测中的入门(二)可视化详解

  • 1.2:然后齐次矩阵利用1扩充成nx4大小:

kitti数据集在3D目标检测中的入门(二)可视化详解

  • 1.3:然后点乘外参矩阵 np.dot(pts_3d_velo, np.transposhttp代理e(self.V2C)),其中V2C是3*4列,像素画格式为:

kitti数据集在3D目标检测中的入门(二)可视化详解
旋转矩阵是坐标系的转换,平移矩阵是坐标原点的giti移动,从给出的标注文件看出bin文件对应的矩阵有的是不同,这里我认为是因为每天的拍摄的震动会导致稍微有一点不同,但是平移中的0.27m(z轴方向,见上面的车图)大致是不变的。得到结果nx3,即可视化图表每个点在相机坐标系下的坐标:
kitti数据集在3D目标检测中的入门(二)可视化详解

  • 1.4:之后利用0号相机的修正矩阵进行修正:

R0修正矩阵3×3:

kitti数据集在3D目标检测中的入门(二)可视化详解
np.transpose(np.dothttps和http的区别(self.R0, np.transpose(pts_3可视化编程d_ref)))像素,得到n可视化管理x3:
kitti数据集在3D目标检测中的入门(二)可视化详解
这里为什么修正?主要是随着像素画时间的偏移,0号相机的坐标可http://www.baidu.com能会有偏差,将其校准,然后后面的投影即可通过http 302内参矩阵和位移完成。

  • 1.5:之后齐次矩阵填充1得github永久回家地址到nx4,为了后面的运算:

kitti数据集在3D目标检测中的入门(二)可视化详解

  • 1.6:pts_2d = np.dot(pts_3d可视化大屏_rehttp代理ct, np.transpose(self.P)) 进行内参矩阵的点乘,然可视化大屏后投影到图像上:

kitti数据集在3D目标检测中的入门(二)可视化详解
内参矩阵只和可视化编程相机的内部参数有关:焦距f和光心位置c,每个相机的焦距httpclient是一样的。 这里首先需要注意的是:图像的像素坐标系原点在左上角,而上面公式假定原点在图像中心,为了处理这一偏移,设光心在图像上对应的像素坐标为(cu,cv),所以需要填上giticu和cv—cx,chttps域名y。
kitti数据集在3D目标检测中的入门(二)可视化详解
其中的45.7=0.06f=0.067github中文官网网页07=45,上面的最后一列是相机坐标系的偏移,主要是x轴**可视化图表,y和z轴稍微有点误差**。 得到:
kitti数据集在3D目标检测中的入门(二)可视化详解
因为内参矩阵的类似于:
kitti数据集在3D目标检测中的入门(二)可视化详解
所以要得到图片上的x,y需要ptsgit命令_2d[:, 0] /= pts_2d[:, 2]; pts_2d[:, 1] /= pts_2像素生存者2d[:, 2],最后结果可视化为:
kitti数据集在3D目标检测中的入门(二)可视化详解
最后每个点转换的坐标就完成了。 这里需要注意的几点是:在修正矩阵的时候以及在内参矩阵相乘的时候的有一些小的误差值的相乘,可能主要是由于摄像机的位置变化导致,主要计算细节处https和http的区别,涉及到了内参可视化工具矩阵和外参矩阵以及图像校正的问题,可以着重看看这个,这里对于其中的细节处不是太深的了解,因为主要参数都HTTPS已经提供了,所以按其公式直接用即可,而图片主要是为了显示方便而已,一般只利用到http://192.168.1.1登录点云的话,基本不用考虑可视化大屏这个。

gitlab:将0号照相机3D标注框转换到点https和http的区别云下的坐标系。

0号相机下坐标系的标注:x,y,z,l,w,h,主要提取8个顶点,然后分别转换到可视化图片点云坐标系下,即作为点云的gt可视化管理。 其主要步骤为:

  • 2.1: R = roty(ob像素工厂j.ry),得到标注文件的第15个参数,角度ry

3D物体的空间方向(rotation_y)取值范围为:-pi ~ pi(单位:rad),它表像素工厂示,在照相机坐标系下,物体的全局方向角(物体前进方向与相机坐标系x轴的夹角)

kitti数据集在3D目标检测中的入门(二)可视化详解
R设置为: [ [cost 0 sint] [0 1 0] [sint 0 -cost] ], 其中我看可视化代码写的是 [ [cost 0 sint] [0 1 0] [-sint 0 cost] ], 但是HTTPS推导后感觉其是错误的,但是现实的结果竟然是一样的,所以需要待考证。
kitti数据集在3D目标检测中的入门(二)可视化详解

  • 2.2通过角度得到8个点的坐标:
	R = roty(obj.ry)
	# 3d bounding box dimensions
    l = obj.l
    w = obj.w
    h = obj.h
    # 3d bounding box corners
    x_corners = [l / 2, l / 2, -l / 2, -l / 2, l / 2, l / 2, -l / 2, -l / 2]
    y_corners = [0, 0, 0, 0, -h, -h, -h, -h]
    z_corners = [w / 2, -w / 2, -w / 2, w / 2, w / 2, -w / 2, -w / 2, w / 2]
    # rotate and translate 3d bounding box
    corners_3d = np.dot(R, np.vstack([x_corners, y_corners, z_corners]))
    # print corners_3d.shape
    #得到8个点的坐标(x,y,z) 位置是底部(右前,右后,左前,左后) 顶部----
    corners_3d[0, :] = corners_3d[0, :] + obj.t[0]
    corners_3d[1, :] = corners_3d[1, :] + obj.t[1]
    corners_3d[2, :] = corners_3d[2, :] + obj.t[2]

结果为: #得到8个点的坐标(x,y,z) 位置是底部(右前,右后,左前,左后) 顶部—-

kitti数据集在3D目标检测中的入门(二)可视化详解
其中如何推导来的,主要是利用了相似三角形,可以自己在纸上像素画生成器画一画,不需要考虑此时的y轴,这里假设地面已经是平的了,然后从这里可可视化大屏以看到,(x,y,z)是底部中心点的坐标。

  • 2.3:反矫正,因为(x,y,z)是在像素射击矫正后的坐标,所以需要反矫正:

np.transpose(np.dot(np.linalg.invgit命令(self.R0), np.transpose(pts_3d_rect))) R0见上面,得到:

kitti数据集在3D目标检测中的入门(二)可视化详解

  • 2.4:齐次式填充1

kitti数据集在3D目标检测中的入门(二)可视化详解

  • 2.5:利用C2V矩阵投影到点云坐可视化编程标系http 404,np.dot(pts_3d_ref, np.transpose(self.C2V)),其中C2V是由V2C转换而来git命令

kitti数据集在3D目标检测中的入门(二)可视化详解

  • 2.6:后面就是画图了

注:以上解释是针对github.com/kuixu/kitthttp代理i…代码写的。

发表评论

提供最优质的资源集合

立即查看 了解详情