Homography估计 - >结果是一个仿射矩阵?

时间:2013-01-20 22:02:29

标签: computer-vision transformation projection homography

我正在从平面标记开发一个姿势估计系统(使用Matlab)。 为了做到这一点,我在用网络摄像头拍摄的图像中检测到一个矩形,得到4个角点的坐标,并计算均匀坐标中这些角点之间的单应性,例如。

     58     46     75     90
 M = 67    108    133     89
      1      1      1      1

其中第一行是垂直坐标,第二行是水平坐标。

我使用DLT计算单应性(使用我在网上找到的几种不同的单应性计算函数,以及Matlab的cp2tform,这些都得到相同的结果)这些点和参考点之间我知道标记是一个正方形,

     1     1   100   100
 m = 1   100   100     1
     1     1     1     1

[编辑:它们都以计数器 - 顺时针顺序排序,因此我确保它们匹配。]

然后我绘制了这些参考点的重投影

 m* = H*m

返回网络摄像头图像,以查看单应性是否合适。

结果很好,因为我只围绕z轴旋转(即将其保持在网络摄像头前并手动倾斜)标记(=标记的标准矢量);重新投影的点几乎精确地投射到先前检测到的标记角点上,并且分解的z轴角度计算得很好。

但是,如果我围绕x轴和/或y轴旋转标记,则重新投射的点会逐渐偏离。然后我意识到计算出的单应矩阵H几乎是仿射矩阵,例如H =

    0.2339   -0.0967   57.8362
H = 0.1339    0.4714   66.3639
   -0.0010    0.0005    1.0000

(无论我多少倾斜标记,元素h31和h32几乎为零),这可以通过查看总是看起来像仿射变换的结果的重投影点来确认,而不是投射变换点。不出所料,x轴和y轴的分解角度几乎为零/等于零。

显然,我在网上找到的功能并不能让单应计算错误,Matlab的cp2tform也不行,但不幸的是我没有看到或理解我的错误是什么。它必须在像素坐标的使用中,但是看着许多单应性解释并且搜索“单应性估计结果仿射”并没有产生任何结果,如果有人能指出我正确的方向,我会很高兴。

感谢。

1 个答案:

答案 0 :(得分:0)

正如我从评论中提供的值@mmpg所看到的那样,我的y轴和x轴仍然被切换为匹配Matlab的图像坐标系(y first,x second),结果证明是问题所在。 我没有想到这样一个根本问题,因为我得到的Homography在很大的角度范围内非常接近正确的。