【KITTI】Kitti数据集 Tr(旋转平移)矩阵求逆

        本节详细介绍KITTI从图像坐标系到激光雷达坐标系的变换原理、过程和代码。

        Kitti数据集的Tr_velo_to_cam矩阵是将激光雷达点云坐标变换到图像坐标系。Tr是一个3x4的矩阵,直接左乘激光雷达坐标即可得到图像坐标系中的坐标。

        Tr可以认为是由旋转矩阵R平移矩阵T组成,即表示为增广矩阵R|T。旋转矩阵R的维度是3x3,T的维度为1x3。将图像坐标系中的坐标变回激光雷达坐标系中需要用到Tr的逆矩阵。Tr逆矩阵求解方法主要有分步求解和直接求解两种。

1 分步求解

        Tr矩阵的变换过程相当于:(1)用R对坐标系进行变换,将原坐标变换到新的坐标系下,R的列向量就是新的坐标系的坐标轴向量;(2)用T对变换后的坐标进行平移,平移尺度由变换后的坐标系决定。

        Tr的逆矩阵相当于反向操作:(1)用R的逆矩阵进行反向变换;(2)对反向变换的坐标进行平移,平移尺度由变换后的坐标系决定,此时变换后的坐标系相当于最原始的坐标系。

        因此,Tr的逆矩阵可以表示为:

Tr==[R|T]

Tr^{-1} = [R^{-1}|-R^{-1}T]

        根据上述分析可知,Tr的逆矩阵先通过R的逆矩阵求得反变换坐标系,然后用R^{-1}T来求得平移尺度,加上一个负号进行反向平移即可。

        注意到:用于变换前后坐标系是正交的,那么R一定也是一个正交矩阵。正交矩阵的逆矩阵为其转置矩阵。因此第一种求逆方法如下:

def inverse_rigid_trans(Tr):

    ''' Inverse a rigid body transform matrix (3x4 as [R|t])

        [R'|-R't; 0|1]

    '''

    inv_Tr = np.zeros_like(Tr)  # 3x4

    inv_Tr[0:3, 0:3] = np.transpose(Tr[0:3, 0:3])

    inv_Tr[0:3, 3] = np.dot(-np.transpose(Tr[0:3, 0:3]), Tr[0:3, 3])

    return inv_Tr

2 直接求解

        直接求解是指直接对矩阵进行求逆运算,但是这种运算一般对应方阵。因此,在进行求逆运算时,需要把Tr矩阵增加一行[0, 0, 0, 1],进而变成4x4方阵。方法如下所示:

Tr = np.concatenate((Tr, np.array([0, 0, 0, 1]).reshape(1, 4)))
inv_Tr = np.linalg.inv()

3 结果对比

        假设输入为:

array([[ 7.533745e-03, -9.999714e-01, -6.166020e-04, -4.069766e-03],

       [ 1.480249e-02,  7.280733e-04, -9.998902e-01, -7.631618e-02],

       [ 9.998621e-01,  7.523790e-03,  1.480755e-02, -2.717806e-01]],

      dtype=float32)

        分步求解的结果为:

array([[ 7.5337449e-03,  1.4802490e-02,  9.9986207e-01,  2.7290344e-01],

       [-9.9997139e-01,  7.2807330e-04,  7.5237900e-03, -1.9692658e-03],

       [-6.1660202e-04, -9.9989021e-01,  1.4807550e-02, -7.2285905e-02]],

      dtype=float32)

        直接求解的结果为:

array([[ 7.53374482e-03,  1.48024872e-02,  9.99862035e-01,

         2.72903444e-01],

       [-9.99971472e-01,  7.28073268e-04,  7.52379041e-03,

        -1.96926581e-03],

       [-6.16602039e-04, -9.99890136e-01,  1.48075518e-02,

        -7.22858974e-02],

       [ 0.00000000e+00,  0.00000000e+00,  0.00000000e+00,

         1.00000000e+00]])

        通过对比可以看到,直接求解的结果的前三行与分步求解的结果一致。

python三维点云从基础到深度学习_Coding的叶子的博客-CSDN博客_python三维点云重建从三维基础知识到深度学习,将按照以下目录持续进行更新。更新完成的部分可以在三维点云专栏中查看。https://blog.csdn.net/suiyingy/category_11740467.htmlhttps://blog.csdn.net/suiyingy/category_11740467.html1、点云格式介绍(已完成)常见点云存储方式有pcd、ply、bin、txt文件。open3d读写pcd和plhttps://blog.csdn.net/suiyingy/article/details/124017716

更多三维、二维感知算法和金融量化分析算法请关注“乐乐感知学堂”微信公众号,并将持续进行更新。

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
Kitti激光雷达数据集是一个广泛应用于计算机视觉与机器学习领域的公开数据集。该数据集主要用于研究和开发自动驾驶、目标检测和跟踪、三维视觉重建等相关应用。 Kitti激光雷达数据集包含了一系列采集自汽车上的激光雷达数据,其中包括点云数据、图像数据、标签数据等。点云数据是激光雷达扫描周围环境后得到的一组离散点的三维坐标信息,可以用于进行三维重建、环境感知等任务。图像数据是由车辆上的摄像头拍摄的图像,可用于进行图像识别、目标检测和跟踪等任务。标签数据是对每个物体的类别、位置和尺寸等信息的标注,可用于进行目标检测和跟踪任务的训练和评估。 Kitti激光雷达数据集提供了不同场景下的数据采集,包括城市街道、乡村道路和高速公路等,以满足不同应用的需求。此外,数据集还提供了不同的传感器融合数据,如激光雷达与相机数据的融合,可用于进行多传感器融合的研究和应用。 通过使用Kitti激光雷达数据集,研究者和开发者可以进行自动驾驶和机器学习算法的研究和开发。数据集的公开性使得不同机构和个人都能够使用相同的数据进行研究和评估,从而促进了该领域的研究进展。同时,Kitti数据集还提供了评估指标和方法,方便了算法的评价和比较。 总而言之,Kitti激光雷达数据集是一个为自动驾驶和计算机视觉研究提供的公开数据集,通过提供点云数据、图像数据和标签数据等,能够帮助研究者和开发者进行不同应用领域的研究和开发工作。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Coding的叶子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值