2012-08-16 147 views
1

我现在试图分析捕获同一对象(例如,矩形)但在不同视角/拍摄角度的两幅图像之间的透视变换/单应性矩阵。可以使用OpenCV 2.3.1中的函数getPerspectiveTransform来导出透视变换。我想找到相应的旋转和平移矩阵。如何在OpenCV中使用getPerspectiveTransform中的输出3x3矩阵?

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

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

非常感谢。

+0

检查这个帖子: http://stackoverflow.com/a/10750648/744859 – 2012-08-23 12:21:39

+0

@Jav_Rock:非常感谢您的回复。我读过上面的链接,问题是从pose **找到**单应性。但是,我怎样才能做到这一点呢(即,**从homogrpahy **构成)?我仍然不清楚如何找出尺寸为3x4的姿态矩阵中的三个参数。如果你可以提供更多的见解,这将是非常感谢。非常感谢 – mintaka 2012-08-27 05:06:26

+0

嗯,我有这篇文章,我分享一些关于从单应性的姿势代码:http://stackoverflow.com/a/10781165/744859 也许你不明白它,但想法是,姿态矩阵有冗余该列是前两列的叉积。我会寻找一个调查,所有这些都可以更好地解释我可以做的事情。 – 2012-08-27 10:23:57

回答

0

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

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

此外,这个问题是关于你所要求的同样的事情。它应该帮助

Analyze camera movement with OpenCV

+0

感谢您的回复,vasile。我不明白你提到的链接中的三维姿态估计答案。根据[POSIT](http://opencv.willowgarage.com/wiki/Posit),至少应该给出非共面点。但是,我不认为这和我的情况是一样的。 – mintaka 2012-08-16 08:44:57

+0

假设源图像是由原点(0,0,0)处的相机拍摄的,我完全知道源图像(以及其上的矩形)的3D位置。考虑到单应性矩阵,是否有机会计算目标图像中矩形的3D位置?谢谢。 – mintaka 2012-08-16 08:48:28

+0

不,POSIT算法就是这样。 – Sam 2012-08-16 08:57:00