在哪儿给基本矩阵添加比例因子以产生真实世界的平移值

1 投票
2 回答
834 浏览
提问于 2025-04-17 17:34

我正在使用OpenCV和Python,想要获取两台相机之间的真实世界的位移。我现在有一台经过校准的相机,它在移动。我已经完成了特征匹配、通过RANSAC计算F矩阵,以及计算E矩阵。为了得到两台相机之间的位移,我想我可以使用:w, u, vt = cv2.SVDecomp,然后我的位移向量可以是:t = u[:,2]。下面是一个示例输出:

[[ -1.16399893 9.78967574 1.40910252]
[ -7.79802049 -0.26646268 -13.85252956]
[ -2.67690676 13.89538682 0.19209676]]

位移向量:[ 0.81586158 0.0750399 -0.57335756]

我想我明白了,位移并不是以真实世界的比例来表示的,所以如果我想要得到真实世界的位移,我需要以某种方式提供这个比例。如果我知道两台相机之间的距离,我是否可以直接通过乘法将其应用到我的位移向量上?我觉得我在这里可能漏掉了什么……

2 个回答

-1

我也遇到同样的问题。我觉得单目相机可能需要一个已知3D坐标的物体,这样可能会有帮助。

2

看起来答案是“是的”。

如果两个相机之间的距离是2米,那么得到的实际世界中的位移就是这个值和t向量的乘积:

dist = 2
t = [ 0.81586158 0.0750399 -0.57335756]
tworld = 2 * t

print tworld 
[ 1.63172316  0.1500798  -1.14671512]

当然,这里要记住的是,虽然这个位移现在是以实际世界的单位表示,但它仍然是以第一个相机的坐标系统为基础的。所以这意味着我的第二个相机位于第一个相机的右侧1.63172316米,向上0.1500798米,以及在第一个相机的后面-1.14671512米。

撰写回答