相机那些事(五)——单应矩阵Homography Matrix

2019-08-01  本文已影响0人  He_Yu
我们先来看一段从某公众号获取的一段资料大致了解一下什么是单应矩阵,他有什么用。

接下来我们就来解释一下关于单应矩阵不太好理解的一些内容,

一、单应与其次坐标

一个单应矩阵是大小为3*3的矩阵H,他满足给定一个点p_1 = [x_1, y_1, w_1]^T, H把点p_1变成一个新的点p_2 = [x_2, y_2, w_2]^T = Hp_1。 注意由于它们都是其次坐标,对映的图像上的两个点分别是\left[\frac{x_{1}}{w_{1}}, \frac{y_{1}}{w_{1}}\right]^{T}\left[\frac{x_{2}}{w_{2}}, \frac{y_{2}}{w_{2}}\right]^{T}

二、单应的自由度

如果给定一个单应H = {h_{ij}},给它的元素乘上同一个数a, 得到的单应aHH作用相同,因为新单元无非把齐次点ap_2,ap_2p_2对应的图像上的点相同。所以一个单应中只有8个自由元素,一般令右下角的那个元素h_{33} = 1来归一化。

三、求解单应

8个未知数,需要8个方程来求解,之所以四对点能求解,是因为一对点能够提供两个方程。我们假设有两个图像上的点[x_1, y_1, 1]^T[x_2, y_2, 1]^T带到上面的推导里可以得到:
\begin{aligned} x_{2} &=\frac{x_{1} h_{11}+y_{1} h_{12}+h_{13}}{x_{1} h_{31}+y_{1} h_{32}+1} \\ y_{2} &=\frac{x_{1} h_{21}+y_{1} h_{22}+h_{23}}{x_{1} h_{31}+y_{1} h_{32}+1} \end{aligned}

把这两个式子重新组织一下,得到等价的矩阵形式:
Au =u
其中:
A=\left[\begin{array}{cccccccc}{x_{1}} & {y_{1}} & {1} & {0} & {0} & {0} & {-x_{1} x_{2}} & {-x_{2} y_{1}} \\ {0} & {0} & {0} & {x_{1}} & {y_{1}} & {1} & {-x_{1} y_{2}} & {-y_{1} y_{2}}\end{array}\right]
u=\left[\begin{array}{lllllllll}{h_{11}} & {h_{12}} & {h_{13}} & {h_{21}} & {h_{22}} & {h_{23}} & {h_{31}} & {h_{32}}\end{array}\right]^{T}
v=\left[\begin{array}{ll}{x_{2}} & {y_{2}}\end{array}\right]^{T}
如果有四对不共线匹配点对,这个方程组就能够垒到8行,存在唯一解。如果有n对点,方程就垒到2n行,通过最小二乘法或者SVD分解就可以求解H

四、程序实现

由于点对中存在不少误匹配,往往需要通过RANSAC提出outliers(错误匹配点对),对整个流程在OpenCV中已经集成为函数findhomography,对输入点对坐标,输出单应和一个标记哪些点是正确匹配哪些点是正确匹配哪些点是错误匹配。

上一篇下一篇

猜你喜欢

热点阅读