我目前正在一个逆图像投影任务中处理对象、相机和世界坐标之间的转换。我有以下可用信息:
- 以(u,v,1)的形式的对象的图像坐标
- 欧拉角转换为旋转矩阵(R)
- 所述平移向量(t)表示所述相机与所述GNSS接收器之间的距离
- 相机矩阵(K)和GNSS位置。
为了将相机坐标转换为世界坐标,我遵循了文献中概述的步骤。首先,我通过对固有矩阵K求逆来计算相机坐标(Xc,Yc,Zc):
λ * [Xc, Yc, Zc] = K^(-1) * [u, v, 1]
接下来,我想通过反转外部矩阵[R]将相机坐标(Xc,Yc,Zc)变换为世界坐标(X,Y,Z|这个等式正确吗?:
[X, Y, Z] = R^(-1) * ( [Xc, Yc, Zc] * t )
这就是我困惑的地方。在我的特定情况下,所需的世界坐标对应于相机检测到的对象。因此,我认为应该将平移向量(t)添加到相机坐标中,如下所示:
[X, Y, Z] = R^(-1) * ( [Xc, Yc, Zc] + t )
然而,从我对文档的理解来看,似乎t通常被减去:
[X, Y, Z] = R^(-1) * ( [Xc, Yc, Zc] - t )
我希望澄清我的理解是否正确,以及我是否应该增加或减少甚至乘以我的情况下的平移向量。
重要的是要注意,平移向量(t)I has是通过手动测量相机与GNSS接收器之间的距离来获得的。我没有得到通常通过solvePnP获得的t向量。我是否需要使用solvePnP生成的t向量,或者手动测量的t向量是否足以满足我的目的?
1条答案
按热度按时间x6yk4ghg1#
通常的相机方程由下式给出:
s(u v 1) = K(RX+t)
其中s是任意真实的,(u,v)是物体的像素坐标,R,t是相机的外部参数,K是内部矩阵。因此,您通常无法仅从2D位置恢复3D位置(直观),您只能找到击中相应像素的光线的方向。这在这里通过标量
s
的存在来建模。因此,如果你想恢复3D姿势,你必须首先反转X:
现在你必须使用你的“相机和GNSS接收器之间的距离”,我将用字母
d
表示。不要把它与上面使用的t
混淆,它们的意思不一样。相机中心和物体之间的距离因此是
d
,但它也等于相机中心和物体位置X之间的差的范数:因为
- R^(-1)*t
等于相机中心。因此,你可以找到
s
的值(或者更准确地说,是s
的绝对值,因为s
也可能是负的,但对象可能在相机后面,这可能不是你要找的):现在你可以代入上面的等式来求X的值。
请检查我的计算,我写得很快。