1

我目前正在试验 Kitti 立体数据集(http://www.cvlibs.net/datasets/kitti/eval_odometry.php),目标是找到一个正确的矩阵,将像素投影到世界坐标系中的点。问题是我不确定 Kitti 数据集中使用的是哪个坐标系。自述文件说:

每个文件 xx.txt 包含一个 N x 12 表,其中 N 是该序列的帧数。第 i 行通过 3x4 变换矩阵表示左相机坐标系的第 i 个姿势(即,z 指向前方)。矩阵以行对齐的顺序存储(第一个条目对应于第一行),并在第 i 个坐标系中取一个点并将其投影到第一个 (=0th) 坐标系中。因此,平移部分(第 4 列的 3x1 向量)对应于第 i 帧中左侧相机坐标系相对于第一(=第 0)帧的位姿。

所以据我所知,这个矩阵代表一个世界到相机的映射,因此我应该把它的逆从相机 cs 投影到世界 cs?

另一个问题是我需要以不同的方式定位世界坐标系:-z 指向前方,y 向上。

我的代码的当前版本如下所示:

            M = np.reshape(M, (3, 4))
            #convert local to global c.s. (?)
            Rc = M[..., :-1]
            tc = M[..., -1]
            R, t = Rc.T, -Rc.T.dot(tc.reshape(-1   ))
            M[..., :-1] = Rc
            M[..., -1] = tc
            #convert to CG c.s.
            
            M[0, 1] *= -1.0
            M[1, 0] *= -1.0
            M[0, 2] *= -1.0
            M[2, 0] *= -1.0

            M[1, 3]  *= -1
            M[2, 3] *= -1```


However, when I reproject pixels between consecutive left frames, the resulting pixels end up far beyond image boundaries.

The functions I use for reprojection work correctly, if the coordinates are given in world coordinate system.
4

0 回答 0