0

我正在尝试使用 opencv 中的基本矩阵方法来获得一个相机姿势相对于另一个相机姿势的 R 和 t。我遵循的程序是:

  1. 使用 SIFT 标记特征
  2. 使用 FLANN 匹配来匹配特征
  3. 计算基本矩阵。
  4. 计算基本矩阵
  5. 执行 SVD 以获得 U、W、Vt
  6. 根据归一化/均质化点是否在相机前面,检查 R 和 t 的哪个组合是正确的。

为了进行简单的检查,我用一个图像对测试了这个,但相同的图像两次(这样相机和图像点都没有移动),因此平移向量应该是空的,旋转应该是恒等的。但是程序的输出最终是错误的。

The fundamental matrix is
[[  3.59955121e-17  -5.77350269e-01   2.88675135e-01]
 [  5.77350269e-01   5.55111512e-17   2.88675135e-01]
 [ -2.88675135e-01  -2.88675135e-01   0.00000000e+00]]

Fundamental matrix error check: 0.000000

The essential matrix is
[[  4.51463713e-10  -7.25229650e+06  -2.37367600e+06]
 [  7.25229650e+06   6.98357978e-10   4.27847619e+06]
 [  2.37367600e+06  -4.27847619e+06  -1.33013600e-10]]

Translation matrix is
[-0.48905495 -0.2713251   0.82898007]

Rotation matrix is
[[ 0.52165052 -0.26538577  0.8108336 ]
 [-0.26538577  0.85276538  0.4498462 ]
 [ 0.8108336   0.4498462  -0.3744159 ]]
Roll: -26.965168, Pitch: 129.775110, Yaw: -54.179055

我还将此代码与一对相机一起使用,在 X 中位移了一定距离:但是我使用这种技术获得的欧拉角和平移(在那里,我认为是两个相机矩阵而不是一个)仍然是错误的。平移向量告诉我,我在 X 和 Z 中都移动了,并且旋转矩阵不准确。我对这里可能出了什么问题感到困惑。任何建议都会非常有帮助。谢谢!

编辑:我的代码可以在这里查看

4

1 回答 1

0

我认为在继续匹配特征之前,您需要使用相机矩阵和失真系数对图像进行非失真处理。我知道这为时已晚,但我希望这对其他人有所帮助。

于 2017-02-07T02:57:28.723 回答