computer-vision - 单应性估计-> 导致仿射矩阵?

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

谢谢。

最佳答案

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

关于computer-vision - 单应性估计-> 导致仿射矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14429853/

相关文章:

c++ - 对齐坐标系

java - Spring Data JPA Projection 从数据库中选择的字段

machine-learning - 关于堆叠去噪自动编码器中下一层的查询

3d - 两个 9 自由度边界框的真实 3D 并交 (IoU) 的计算/实现

opencv - 在不同的照明或背景下检测红色

matlab - 如何在 3D 中沿表面法线获得最大强度投影

spring - 为什么接口(interface)投影比 Spring Data JPA with Hibernate 中的构造函数投影和实体投影慢得多?

image-processing - 我可以将任何矩阵转换为图像吗?

Java:二维矩阵旋转不起作用

java - 模型转换为平台特定 (NC) 代码