单应性(homography)变换的推导
Posted flyinsky518
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单应性(homography)变换的推导相关的知识,希望对你有一定的参考价值。
我们的目标是要得到单应性矩阵
$$
H= \begin{bmatrix}
h_{11} & h_{12} & h_{13} \\
h_{21} & h_{22} & h_{23} \\
h_{31} & h_{32} & h_{33}
\end{bmatrix}
$$
矩阵$H$会将一幅图像上的一个点的坐标$a=(x,y,1)$映射成另一幅图像上的点的坐标$b=(x_1,y_1,1)$,也就是说,我们已知$a$和$b$,它们是在同一平面上。 则有下面的公式:
\begin{equation}
b=Ha^T
\end{equation}
即:
\begin{equation}
\left\{
\begin{aligned}
x_1=h_{11}x + h_{12}y + h_{13}\\
y_1=h_{21}x + h_{22}y + h_{23}\\
1=h_{31}x + h_{32}y + h_{33} \\
\end{aligned}
\right.
\end{equation}
由上面这个公式中的$1=h_{31}x + h_{32}y + h_{33}$可得到下面两个等式
\begin{equation}
\left\{
\begin{aligned}
x_1=\frac{x_1}{1}=\frac{h_{11}x + h_{12}y + h_{13}}{h_{31}x + h_{32}y + h_{33}}\\
y_1=\frac{y_1}{1}=\frac{h_{21}x + h_{22}y + h_{23}}{h_{31}x + h_{32}y + h_{33}}\\
\end{aligned}
\right.
\end{equation}
\begin{equation*}
\Rightarrow
\end{equation*}
\begin{equation}
\left\{
\begin{aligned}
h_{11}x+h_{12}y+h_{13}=h31xx_1+h_{32}yx_1+h_{33}x_1\\
h_{21}x + h_{22}y + h_{23}=h31xy_1+h_{32}yy_1+h_{33}y_1\\
\end{aligned}
\right.
\end{equation}
\begin{equation*}
\Rightarrow
\end{equation*}
\begin{equation}
\label{eq1}
\left\{
\begin{aligned}
0=h31xx_1+h_{32}yx_1+h_{33}x_1-(h_{11}x+h_{12}y+h_{13})\\
0=h31xy_1+h_{32}yy_1+h_{33}y_1-( h_{21}x + h_{22}y + h_{23})\\
\end{aligned}
\right.
\end{equation}
对于方程$\eqref{eq1}$ ,可写成一个矩阵与一个向量相乘,即:
\begin{equation}
\label{eq2}
\begin{bmatrix}
-x & -y &-1&0&0&0&xx_1&yx_1&x_1 \\
0&0&0& -x & -y &-1&xy_1&yy_1&y_1 \\
\end{bmatrix} h=0
\end{equation}
其中,$h=[h_{11} , h_{12} , h_{13} , h_{21} , h_{22} , h_{23} , h_{31} , h_{32} , h_{33}]^T$,是一个9维的列向量。若令:
\begin{equation}
A=\begin{bmatrix}
-x & -y &-1&0&0&0&xx_1&yx_1&x_1 \\
0&0&0& -x & -y &-1&xy_1&yy_1&y_1 \\
\end{bmatrix}
\end{equation}
则$\eqref{eq2}$可以记为
\begin{equation}
Ah=0
\end{equation}
这里的$A\in R^{2\times 9}$。这只是1对点所得到的矩阵$A$,若有4对点,则得到的矩阵$A\in R^{8\times 9}$。如何求解向量$h$呢?方法很简单,真接对$A$进行SVD分解,即
\begin{equation}
U*\Sigma*V^T
\end{equation}
然后取$V$的最后一列出来作为求解$h$。因为矩阵$A$是行满秩,即只有一个自由度。
具体实现时,先要得到两幅图,然后在两幅图之间找到4对点的坐标,由此得到矩阵$A$,然后在matlab中可以这样实现:[U,S,V]=svd(A);h=V(:,9);H= reshape(h,3,3)。
以上是关于单应性(homography)变换的推导的主要内容,如果未能解决你的问题,请参考以下文章