我正在学习相机矩阵的东西。我已经知道我可以通过在对象空间的平面上使用四个点来获得相机的单应性(3*3 矩阵)。我想知道我们是否可以得到四个点不在平面上的单应性?如果是,我怎样才能得到矩阵?我应该看哪些公式?
我还将单应性与另一个概念混淆了:如果我想将点从一个坐标转换到另一个坐标系,我只需要知道三个点。那么为什么我们在计算单应性时需要四个点呢?
我正在学习相机矩阵的东西。我已经知道我可以通过在对象空间的平面上使用四个点来获得相机的单应性(3*3 矩阵)。我想知道我们是否可以得到四个点不在平面上的单应性?如果是,我怎样才能得到矩阵?我应该看哪些公式?
我还将单应性与另一个概念混淆了:如果我想将点从一个坐标转换到另一个坐标系,我只需要知道三个点。那么为什么我们在计算单应性时需要四个点呢?
Homography 将点 1. 平面上的点映射到另一个平面上的点 2. 在纯相机旋转或缩放期间点的 3D 投影(不必位于同一平面上)。
如果您在传感器平面旋转时查看连接点的光线,则可以轻松验证后者:绿色是两个传感器位置,黑色是 3d 对象
由于 Homography 位于投影之间,而不是 3D 中的对象之间,因此您不必关心这些投影代表什么。但这可能会令人困惑,我同意。例如,您可以将相机对准 3D 场景(这不是平面的!),然后旋转您的相机,场景的两张结果图片将通过单应性关联。顺便说一下,这是图像全景的基础。
您提到的三点对应关系可能与称为仿射的转换(在大缩放期间透视效果消失时发生)或在 3D 空间中找到刚性旋转和平移有关。两者都需要 3 点对应,但前者只需要 2D 点,而后者需要 3D 点。后一种情况有 6DOF(3 个用于旋转,3 个用于平移),而每个对应提供 2DOF,因此 6/2=3 个对应。Homography 有 8 个 DOF,所以应该有 8/2=4 个对应;
下面是一个小图,解释了原始正方形向前倾斜时仿射变换和单应变换之间的区别。在仿射情况下,远侧与近侧具有相同长度的透视效果可以忽略不计。在 Homography 的情况下,远端较短。
Homography 是一个 3X3 矩阵,由 8 个独立的未知数组成,这意味着它需要 4 个方程来求解这些未知数。因此,为了计算单应性,我们至少需要 4 个点。
在单应性中,我们假设世界场景中的 Z=0,因此投影的图像假设为 2D。在非常有名的期刊ORB-SLAM中,作者提出了一种根据场景中的运动视差进行场景选择的方法。
单应性是两个平面之间的关系,单应性变换的自由度为7;因此,您至少需要 4 个对应点。
4 分会给你 4 对 (x,y) 因此你可以计算 7 个变量。单应性是homogenes transfrom,因此单应性矩阵中的(3,3)值始终为1。
所以你的第一个问题是你可以计算平面上的3个点而不是平面上的第4个点:这是不可能的。您需要将该点投影在平面上,然后您可以计算单应性。
关于如何计算单应矩阵的第二个问题,您可以在 opencv中看到findHomography()的实现。