您的位置:首页 > 理论基础

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

2017-10-30 09:32 316 查看
上一部分我们讲了3d与2d坐标系中点与点的对应关系,那对于两张2d图片之间的点,我们又应该怎么建立关系呢?

答案就是Homography了。

Homography

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

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

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

⎡⎣⎢⎢x̃ ỹ ω̃ ⎤⎦⎥⎥→⎡⎣⎢⎢x̃ /ω̃ ỹ /ω̃ 1⎤⎦⎥⎥→⎡⎣⎢⎢xy1⎤⎦⎥⎥

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

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

⎡⎣⎢⎢⎢x′~y′~ω′~⎤⎦⎥⎥⎥=H⎡⎣⎢⎢x̃ ỹ ω̃ ⎤⎦⎥⎥

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

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

M=[KR−KRt]=[H−Ht]

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

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

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

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

或:

M=[H−H(WtC)]

或:

M=[H−HOC]

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

When is homography the same over point matching?

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

一共有两种情况,一个是视平面仅进行了旋转(rotation only),另一个是只在同一平面内移动(planar object/surface)。

这两种情况下,对应点的关系可用以下公式表示:

⎡⎣⎢⎢⎢x′~y′~ω′~⎤⎦⎥⎥⎥=⎡⎣⎢⎢h1h4h7h2h5h8h3h6h9⎤⎦⎥⎥⎡⎣⎢⎢x̃ ỹ ω̃ ⎤⎦⎥⎥

1. Rotation Only

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



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

2. Planar Object/Surface

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



同没看懂,待补充。

如何得到矩阵H?

让我们回到之前的等式:

⎡⎣⎢⎢⎢x′~y′~ω′~⎤⎦⎥⎥⎥=⎡⎣⎢⎢h1h4h7h2h5h8h3h6h9⎤⎦⎥⎥⎡⎣⎢⎢xy1⎤⎦⎥⎥

变换得到:

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中的两行,为:

[−x0−y0−100−x0−y0−1x′xy′xy′yy′yx′y′]

之后便需要使用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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐