【问题标题】:How can I use the output 3x3 matrix from getPerspectiveTransform in OpenCV?如何在 OpenCV 中使用 getPerspectiveTransform 的输出 3x3 矩阵?
【发布时间】:2012-08-16 06:44:45
【问题描述】:

我现在正在尝试分析两个图像之间的透视变换/单应矩阵,它们以不同的视角/拍摄角度捕获相同的对象(例如,矩形)。可以使用 OpenCV 2.3.1 中的函数getPerspectiveTransform 导出透视变换。我想找到对应的旋转和平移矩阵。

getPerspectiveTransform 的输出是一个 3x3 矩阵,我可以直接使用它来将源图像变形为目标图像。但我的问题是,如何根据获得的 3x3 矩阵找到旋转和平移矩阵?

我正在研究函数decomposeProjectionMatrix 以获取相应的旋转和平移矩阵。但输入必须是 3x4 投影矩阵。如何将透视变换(即 3x3 矩阵)与 3x4 投影矩阵联系起来?我在正确的轨道上吗?

非常感谢。

【问题讨论】:

  • @Jav_Rock:非常感谢您的回复。我阅读了上面的链接,问题是从姿势中找到单应性。但我怎样才能反过来做(即,pose from homogrpahy)?我仍然不清楚如何在大小为 3x4 的姿势矩阵中找出另外三个参数。如果您可以提供更多见解,那将是非常受欢迎的。非常感谢
  • 嗯,我有这篇文章,我分享了一些关于单应性姿势的代码:stackoverflow.com/a/10781165/744859 也许你不明白,但想法是姿势矩阵有一个冗余列,它是叉积的前两列。我会寻找一个调查,所有这些都可以更好地解释我可以做的。
  • 这是调查。 “3D 平面估计”的单应性和姿态之间的关系在第 2.3.4 节中解释:cvlab.epfl.ch/~lepetit/papers/lepetit_ftcgv05.pdf
  • 非常感谢@Jav_Rock!我会研究的。

标签: opencv perspective


【解决方案1】:

单应矩阵中包含的信息(从 getPerspectiveTransform 返回)不足以提取旋转/平移。缺少的列是正确找到角度的关键。

好消息是,在某些场景下,您可以使用solvePnP() 函数从两组点中提取所需的参数。

此外,这个问题与您所要求的相同。应该有帮助

Analyze camera movement with OpenCV

【讨论】:

  • 感谢您的回复,vasile。我不明白您提到的链接中的 3D 姿势估计答案。根据POSIT,至少应该给出非共面点。但是,我认为这与我的情况不同。
  • 假设源图像是由相机在原点 (0, 0, 0) 拍摄的,并且我确切地知道源图像的 3D 位置(以及它上面的矩形)。给定单应矩阵,我有机会计算目标图像中矩形的 3D 位置吗?谢谢。
  • 不,POSIT 算法就是为此而设计的。
  • 对不起。我仍然不太明白 POSIT 对我的情况有何帮助。你能给一些提示吗?对于 3D 姿态估计(如paper),有一个固定的相机,将使用几个非共面点来估计姿态。是吗?非常感谢您的宝贵时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多