相机单应性

时间:2012-10-16 17:33:24

标签: camera-calibration homography

我正在学习相机矩阵的东西。我已经知道我可以通过在对象空间中的平面中使用四个点来获得相机的单应性(3 * 3矩阵)。我想知道我们是否可以用飞机上的四个点来获得homagraphy?如果是,我怎样才能获得矩阵?我应该看看哪些公式?

我还将单应性与另一个概念混淆:如果我想将点从一个坐标转换到另一个坐标系,我只需要知道三个点。那么为什么我们在计算单应性方面需要四点呢?

4 个答案:

答案 0 :(得分:3)

同形图映射点 1.在飞机上到另一个飞机的点 2.在纯粹的相机旋转或缩放过程中投射3D点(不要强制躺在同一平面上)。

如果您在传感器平面旋转时查看连接点的光线,则可以轻松验证后者:绿色是两个传感器位置,黑色是三维对象camera rays maintain mapping between object and camera sensor

由于Homography是在投影之间而不是在3D中的对象之间,因此您不关心这些投影所代表的内容。但我同意这可能令人困惑。例如,您可以将相机指向3D场景(不是平坦的!),然后旋转相机,场景的两张结果图片将通过单应素相关联。顺便说一下,这是图像全景图的基础。

您提到的三点对应关系可能会转换为名为Affine的变换(当透视效果消失时在大变焦期间发生)或者在3D空间中找到刚性旋转和平移。两者都需要3点对应,但前者只需要2D点,而后者需要3D点。后一种情况有6DOF(旋转3和翻译3),而每个对应提供2DOF,因此6/2 = 3对应。 Homography有8个自由度,因此应该有8/2 = 4个对应关系;

下面是一个简单的图表,解释了当原始正方形向前倾斜时仿射和同形异义转换之间的差异。在仿射情况下,透视效果可以忽略不计,远端与近端具有相同的长度。在Homography的情况下,远端较短。enter image description here

答案 1 :(得分:1)

如果你有4分 - 并且他们不在同一架飞机上 - 那么计算单应性将不起作用。

如果你有一堆点,其中4个确实躺在一架飞机上但有些没有,你可以使用过滤器来试图移除不在飞机上的那些。 OpenCV实现的过滤器称为RANSACLMeDs

正如Hammer在你的问题评论中所说的那样 - 第四点就是要找出观点。

答案 2 :(得分:1)

Homography是一个3X3矩阵,由8个独立的未知数组成,这意味着需要4个方程来求解这些未知数。因此,要计算单应性,我们至少需要4个点。

在单应图中,我们假设世界场景中Z = 0,所以投影的图像假定为2D。在著名的ORB-SLAM杂志上,作者根据场景中的运动视差制定了一种场景选择方法。

答案 3 :(得分:0)

Homography是两个平面之间的关系,单应变换时的自由度是7;因此,您至少需要4个相应的点 4点会给你4对(x,y),因此你可以计算7个变量。 Homography是homogines transfrom因此单应矩阵中的(3,3)值总是1 所以你的第一个问题是,你可以用平面上的3个点计算单应性,而不是平面上的第4个:它是不可能的。您需要在平面上投影该点,然后您可以计算单应性。
关于如何计算单应矩阵的第二个问题,你可以在opencv中看到findHomography()的实现。