【问题标题】:Homography estimation -> result an affine matrix?单应性估计 - >产生仿射矩阵?
【发布时间】:2013-01-03 23:44:18
【问题描述】:

我正在开发一个基于平面标记的姿势估计系统(使用 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

[编辑:它们都按counter-顺时针顺序排序,所以我确保它们匹配。]

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

 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 也不能,但不幸的是我没有看到或理解我的错误是什么。它必须在像素坐标的使用中,但是由于查看了许多单应性解释并搜索“单应性估计结果仿射”没有产生任何结果,如果有人能指出我正确的方向,我会很高兴。

谢谢。

【问题讨论】:

  • 因为我没有看到,所以这是一个虚拟问题:您是否注意将获得的角与要映射到的角匹配?
  • 我忘记补充了:是的,我愿意(如果我不这样做,我猜重投影对于 z 轴旋转就不能正常工作了)。
  • 以 ccw 顺序排序并不能保证这一点,除非您在旋转时考虑到一个点,您确信该点将映射到正确的点 - 并且始终保持对应关系。跨度>
  • 一旦我有了一个有效的单应性,我将执行正交变换以查看标记的内容并解决歧义,但这只会有助于确定标记是否已倾斜 0° 或90°等,而不是其他角度。如果我误解了你的观点,请纠正我。
  • “正交变换”当然会产生误导,我的意思是我正在使用 H_inv 进行投影变换,以便在标记处获得正交视图。

标签: computer-vision transformation projection homography


【解决方案1】:

从 cmets 中提供的 @mmpg 值可以看出,我的 y 轴和 x 轴仍切换为匹配 Matlab 的图像坐标系(y 第一,x 秒),结果证明是问题所在。 我没有想到这么基本的问题,因为我得到的 Homography 在很多角度都非常接近正确的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-17
    • 2018-09-02
    相关资源
    最近更新 更多