【问题标题】:Homography decomposition of the matrix obtained in findHomography()findHomography() 中得到的矩阵的单应性分解
【发布时间】:2014-03-01 10:01:48
【问题描述】:

我已使用此code 作为基础来检测场景中的矩形目标。我使用 ORB 和 Flann Matcher。我已经能够使用findHomography()perspectiveTransform() 函数成功地在我的场景中绘制检测到的目标的边界框。
参考图像(上述代码中的img_object)是仅矩形目标的直视图。现在我的场景图像中的目标可能会向前或向后倾斜。我想找出它倾斜的角度。我阅读了各种帖子并得出结论,findHomography() 返回的单应性可以分解为旋转矩阵和平移向量。 我使用了this link 推荐的https:/gist.github.com/inspirit/740979 中的代码翻译成C++。这是从OpenCV的相机标定模块得到的张SVD分解代码。我从 O'Reilly 的 Learning OpenCV 书中得到了这个分解代码的完整解释。
我的问题是:

  1. 我是否正确假设我得到的分解旋转矩阵会告诉我目标倾斜的角度?
  2. 其次,我可以使用从findHomography() 获得的 Homography 作为此分解模块的输入并期望得到正确的输出吗?还是我缺少什么?
  3. 还有其他方法可以达到同样的效果吗?

最后,我在移动平台上编码,所以我也关心性能。如果您能指出正确的方向,我会很高兴。

提前感谢您的时间和回复。

【问题讨论】:

  • 为什么不使用已知参数(比例、平移和旋转以及透视参数)创建自己的单应性并尝试在这样的矩阵上进行分解?您将看到是否会提取正确的参数。
  • 问题不在于单应性分解..我很确定它工作正常。我想知道的是在我的情况下,我可以在应用 ORB 后给出 findHomography() 返回的单应性检测到这个模块?旋转矩阵会给我目标旋转的角度吗?

标签: c++ opencv computer-vision homography rotational-matrices


【解决方案1】:

张的校准过程将产生一个旋转矩阵。这可以表示为 3 个(欧拉)角,而不是一个。或者,等效地(通过罗德里格斯公式),作为一个单位向量和围绕该向量的旋转角度 - 即再次三个数字。

除非您的相机和目标相对于彼此非常仔细地定位,否则没有理由期望只有一个非零旋转角度。

【讨论】:

  • 感谢您的回答。我可以理解其他 2 个轴上也会有较小的角度值。您能否详细说明罗德里格斯公式?目标向我移动或远离相机.所以这个旋转矩阵也能够给我旋转?
  • 对于 Rodriguez 的公式,请参见例如维基百科:en.wikipedia.org/wiki/Axis_angle - OpenCV 有代码来做旋转矩阵的转换。我不明白您的第二个问题:与朝向或远离相机的运动相关的旋转?那是平移,不是旋转。
  • 对不起,我不清楚。通过向前/向后倾斜或朝向/远离相机,我的意思是我的目标在link 中给出的 opencv 轴系统中围绕 x 轴旋转所以这意味着我将在该轴上旋转。
  • 是的,在这种情况下,轴角度表示是一个平行于 x 轴的向量,其角度表示围绕它的旋转,当它是逆时针 w.r.t 时为正。轴(如“你的眼睛在箭尖上,你的脚在羽毛上”所见)。然而,在实践中,轴不会完全平行于相机的 x 轴,除非您非常小心地制造了这样的设置。
猜你喜欢
  • 1970-01-01
  • 2020-11-12
  • 1970-01-01
  • 2020-04-02
  • 1970-01-01
  • 1970-01-01
  • 2016-05-11
  • 1970-01-01
  • 2014-05-11
相关资源
最近更新 更多