Homography --- 图片与图片间的点对应(DLT)

上一部分我们讲了3d与2d坐标系中点与点的对应关系,那对于两张2d图片之间的点,我们又应该怎么建立关系呢?

答案就是Homography了。

Homography

Homography,译成中文叫“单应性“。这里贴上wiki pedia供大家阅读。

以我个人来说,homography指的是一个视平面到另一个视平面上物体的投影,我们暂且理解为变换观察一个物体的角度。

一个在homography coordinate中的点P (x̃ ,ỹ ,ω̃ ),投影到2D平面上坐标为(x,y),于是一个投影过程可以描述为:

x̃ ỹ ω̃ x̃ /ω̃ ỹ /ω̃ 1xy1

对于这样一个投影过程(homography)来说,对应点和它的投影点(homogeneous point)之间的转换是可逆的,所以才可以运用到两张图片之间的点对应。

假定两张图片上对应的一对点pp的坐标分别为(x,y)(x,y),它们之间存在下列的关系:

x~y~ω~=Hx̃ ỹ ω̃ 

H是一个3*3的矩阵。有了它,我们就可以计算出另一视平面上对应的点了。但是这个公式计算出的视平面是有局限性的,也就是说不能算出任意视平面的对应点。这个我们待会儿来讲。

上一篇文章中,我们把相机矩阵(camera matrix)表示为M=[Rt]。这里我们换一种表示方法:

M=[KRKRt]=[HHt]

其中R=CRW,代表以相机三维坐标系为参照的世界三维坐标系的旋转矩阵;t=CtW,同样代表以相机三维坐标系为参照的世界三维坐标系的位移(也就是世界三维坐标系到相机三维坐标系所需要的变换);K为相机的内参矩阵,这个矩阵由相机的内部参数决定。

可能有人要问了,这个公式和上一篇文章里的不一样啊,其实这里进行了代换,代入上一篇文章中A,B坐标系变换矩阵(translformation matrix)公式可以得到这个结果。

如果能够在世界坐标系中建立这个等式是最理想的:

M=[K(WRC)TK(WRC)T(WtC)]

或:
M=[HH(WtC)]

或:
M=[HHOC]

其中OC是相机坐标系中心在世界坐标系下的坐标。

When is homography the same over point matching?

前面讲过,homography是有局限的。那什么情况下两张图片的点可以用homography联系起来呢?

一共有两种情况,一个是视平面仅进行了旋转(rotation only),另一个是只在同一平面内移动(planar object/surface)。
这两种情况下,对应点的关系可用以下公式表示:

x~y~ω~=h1h4h7h2h5h8h3h6h9x̃ ỹ ω̃ 

1. Rotation Only

如果两个图片仅仅只是发生了旋转,那么就可以使用homograph了。原因是,这种情况下变换矩阵的第四列值全为0,所以原本3*4的矩阵可以转化成3*3的了。

Homography --- 图片与图片间的点对应(DLT)

这一部分没看懂,待补充。

2. Planar Object/Surface

如果在世界坐标系,其中z坐标轴与平面的表面法线对齐,所以变换矩阵的第三列值全为0,所以矩阵也变成了3*3的。

Homography --- 图片与图片间的点对应(DLT)
同没看懂,待补充。

如何得到矩阵H

让我们回到之前的等式:

x~y~ω~=h1h4h7h2h5h8h3h6h9xy1

变换得到:
x=x~/ω~=h1x+h2y+h3h7x+h8y+h9

以及
y=y~/ω~=h4x+h5y+h6h7x+h8y+h9

两边相乘得到:
x(h7x+h8y+h9)(h1x+h2y+h3)=0

y(h7x+h8y+h9)(h4x+h5y+h6)=0

假设我们有N个对应的点对,所以可以得到一系列的等式:
Aq=0

q是矩阵H的向量形式(h1...h9);A是一个2N*9大小的矩阵,其中一个对应点对(x,y)(x,y)对应A中的两行,为:
[x0y0100x0y01xxyxyyyyxy]

之后便需要使用SVD分解法来求解了。

这种方法被称为DLT—直接线性转换(Direct Linear Transformation-DLT)算法。

Note that DLT is not really used by itself in practice. Instead a robust estimator such as RANSAC is used to improve accuracy.