1

我正在使用 OpenCV 和 python,并希望获得两个相机之间的真实世界转换。我正在使用一个正在移动的校准相机。我已经完成了特征匹配、通过 RANSAC 计算 F 和计算 E。为了获得相机之间的平移,我想我可以使用:w, u, vt = cv2.SVDecomp然后我的 t 向量可以是: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]

我想我理解翻译是如何不在现实世界中的,所以如果我想要一个真实世界的翻译,我需要以某种方式提供这种比例。如果我确实知道相机之间的距离,我可以通过乘法将它直接应用于我的 t 向量吗?我想我在这里遗漏了一些东西......

4

2 回答 2

2

看起来答案是“是”。

如果相机之间的距离是 2m,那么得到的真实世界平移将是这个值和 t 向量的乘积:

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

print tworld 
[ 1.63172316  0.1500798  -1.14671512]

当然,这里要记住的是,虽然现在平移是在现实世界的单位中,但它仍然在摄像机 1 的摄像机坐标系中。所以这意味着我的第二个摄像头位于右侧 1.63172316m,向上 0.1500798m,位于摄像头一后面 -1.14671512。

于 2013-03-08T20:13:59.577 回答
-1

我有同样的问题。我认为单目相机可能需要一个已知 3D 坐标的对象。这可能会有所帮助。

于 2015-04-14T14:08:36.850 回答