首页 关于
树枝想去撕裂天空 / 却只戳了几个微小的窟窿 / 它透出天外的光亮 / 人们把它叫做月亮和星星
目录

2D射影空间中的各种变换

1. 射影变换

对于一个变换\(h\),若空间 \(\mathbb{P}^2\) 中的三个点 \(\boldsymbol{x}_1, \boldsymbol{x}_2, \boldsymbol{x}_3\) 共线,则 \(h(\boldsymbol{x}_1), h(\boldsymbol{x}_2), h(\boldsymbol{x}_3)\)也共线,我们称变换\(h\)为一个射影映射 projective。 这是从 \(\mathbb{P}^2\) 到其自身空间的一种可逆映射。

正如其定义所描述的那样,射影映射也被称为保线映射 collineation,有时也称为单映映射 homography。 当且仅当存在一个非奇异的\(3 \times 3\)矩阵 \(H\),对于域 \(\mathbb{P}^2\) 中任意一点 \(\mathbb{x}\),都有 \(h(\boldsymbol{x}) = H \boldsymbol{x}\)时, 我们说矩阵\(H\)定义了一个从 \(\mathbb{P}^2\) 到 \(\mathbb{P}^2\) 的射影映射,\(H\)则是该映射的变换矩阵。可以写成如下的形式: $$ \begin{bmatrix} x_1' \\ x_2' \\ x_3' \end{bmatrix} = \begin{bmatrix} h_{11} & h_{12} & h_{13} \\ h_{21} & h_{22} & h_{23} \\ h_{31} & h_{32} & h_{33} \end{bmatrix} \begin{bmatrix} x_1 \\ x_2 \\ x_3 \end{bmatrix} $$

由于点的齐次坐标\(\boldsymbol{x}\)乘以任意一个非零常数\(k\)表示的都是同一个点,所以上式中\(H\)矩阵乘以任意非零常数\(k\)都成立。 因此虽然\(H\)矩阵有9个元素,但只有8个变量是独立的,即自由度只有8。 所有的射影映射构成一个群 Group,即射影映射的逆还是射影映射,射影映射的组合还是射影映射。

射影变换作用到点上有:

$$ \begin{equation}\label{projective_point} \boldsymbol{x}' = H \boldsymbol{x} \end{equation} $$

作用到直线上有:

$$ \begin{equation}\label{projective_line} \boldsymbol{l}' = H^{-T} \boldsymbol{l} \end{equation} $$

作用到圆锥曲线上有:

$$ \begin{equation}\label{projective_conic} C' = H^{-T} C H^{-1} \end{equation} $$

作用到 dual conic 上有:

$$ \begin{equation}\label{projective_dual_conic} C^{*'} = H C^* H^{T} \end{equation} $$

在\(n\)维空间中,\(n\times n\)的可逆实矩阵构成一个群,被称为一般线性群,记做\(GL(n)\)。如果把\(GL(n)\)中所有通过乘以一个非零的标量就可以互相转换的矩阵视为等同的, 就得到了一个特殊的群\(PL(n)\),即射影线性群。它是\(GL(n)\)的商群。

2. 等距映射(Isometries)

所谓的等距映射是指,变换前后点之间的欧氏距离保持不变的映射,可以写作:

$$ \begin{bmatrix} x' \\ y' \\ 1 \end{bmatrix} = \begin{bmatrix} \varepsilon \cos \theta & - \sin \theta & t_x \\ \varepsilon \sin \theta & \cos \theta & t_y \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix} $$

其中 \(\varepsilon = ±1\)。若\(\varepsilon = 1\),那么上式的变换完全是由旋转和平移构成的,这类变换也被称为欧氏变换 Euclidean transformation。 若\(\varepsilon = -1\),上式除了旋转平移之外还蕴含了翻转的操作。我们在研究机器人的问题时,经常会遇到刚体的位姿变换,它们都可以通过欧氏变换来描述。在平面上,欧氏变换可以写成矩阵的形式:

$$ \boldsymbol{x}' = H_{E} \boldsymbol{x} = \begin{bmatrix} R & \boldsymbol{t} \\ \boldsymbol{0}^T & 1 \end{bmatrix} \boldsymbol{x} $$

其中\(R\)是一个\(2 \times 2\)的正交矩阵,即\(R^T = R^{-1}\),称为旋转矩阵。\(\boldsymbol{t}\)则是平移向量。

3. 相似变换(Similarity)

相似变换可以看做是一个等距变换组合上一个缩放,具有如下的矩阵形式:

$$ \begin{bmatrix} x' \\ y' \\ 1 \end{bmatrix} = \begin{bmatrix} s \cos \theta & - s \sin \theta & t_x \\ s \sin \theta & s \cos \theta & t_y \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix} $$

式中\(s\)表示缩放尺度。这种变换方式可以保证形状是不变的。

$$ \boldsymbol{x}' = H_{S} \boldsymbol{x} = \begin{bmatrix} sR & \boldsymbol{t} \\ \boldsymbol{0}^T & 1 \end{bmatrix} \boldsymbol{x} $$

4. 仿射变换(Affine)

仿射变换的左上角是一个非奇异的矩阵,具有如下的矩阵形式:

$$ \begin{bmatrix} x' \\ y' \\ 1 \end{bmatrix} = \begin{bmatrix} a_{11} & a_{12} & t_x \\ a_{21} & a_{22} & t_y \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix} $$ 记左上角的矩阵为 \(A\),有 $$ \boldsymbol{x}' = H_{A} \boldsymbol{x} = \begin{bmatrix} A & \boldsymbol{t} \\ \boldsymbol{0}^T & 1 \end{bmatrix} \boldsymbol{x} $$

据说矩阵\(A\)总可以分解为如下的形式:

$$ A = R(\theta) R(-\phi) D R(\phi) $$

其中\(R(\theta)\)和\(R(\phi)\)分别表示旋转了\(\theta\)和\(\phi\)角的旋转矩阵,\(D\)则是一个对角矩阵。可以直接通过SVD分解得出, 令\(U = R(\theta)\),\(V = R(\phi)\),满足\(A = UDV^T = (UV^T)(VDV^T)\)。A矩阵的分解,可以看做是,一次旋转之后在xy轴按照\(D\)的特征值缩放,旋转回来后附加一个旋转。

因为缩放的过程在x和y轴上并不一致,所以仿射变换不能保证形状的不变性。但是平行线关系、平行线段比例、面积的比例这些关系仍然保持不变。

符号 \(H_E\) \(H_S\) \(H_A\) \(H_P\)
变换 等距isometries 相似similarity 仿射affine 射影projective
不变量 欧氏距离 形状 平行关系 共线关系
自由度 3Dof 4Dof 6Dof 8Dof

一般的,我们认为一个射影变换可以分解为三个变换矩阵的串乘: $$ \begin{equation}\label{H_SAP} H = H_S H_A H_P = \begin{bmatrix} sR & \boldsymbol{t} \\ \boldsymbol{0}^T & 1 \end{bmatrix} \begin{bmatrix} K & \boldsymbol{0} \\ \boldsymbol{0}^T & 1 \end{bmatrix} \begin{bmatrix} I & \boldsymbol{0} \\ \boldsymbol{v}^T & w \end{bmatrix} = \begin{bmatrix} A & \boldsymbol{t} \\ \boldsymbol{v}^T & w \end{bmatrix} \end{equation} $$ 其中\(A = sRK + \boldsymbol{t}\boldsymbol{v}^T\)是一个非奇异的矩阵,\(K\)是一个上三角矩阵,并且\(|K| = 1\)。如果\(w \neq 0\)并且\(s > 0\),那么上式分解就是唯一的。 有时为了计算方便,也可以分解成\(H = H_P H_A H_S\)的形式,即: $$ \begin{equation}\label{H_PAS} H = H_P H_A H_S = \begin{bmatrix} I & \boldsymbol{0} \\ \boldsymbol{v}^T & w \end{bmatrix} \begin{bmatrix} K & \boldsymbol{0} \\ \boldsymbol{0}^T & 1 \end{bmatrix} \begin{bmatrix} sR & \boldsymbol{t} \\ \boldsymbol{0}^T & 1 \end{bmatrix} \end{equation} $$

5. 仿射矫正

对于仿射变换而言,存在一个重要的性质,无穷远处的直线\(\boldsymbol{l}_{\infty}\)是固定不变的,总是\(\begin{bmatrix} l_1 & l_2 & l_3\end{bmatrix}^T\)。 但是直线\(\boldsymbol{l}_{\infty}\)上的点并不是固定不动的。而一般的射影变换,有可能将无穷远处的点,映射到一个有限的象上。比如说,车道线通常都是两条平行的直线, 在图像中往往可以找到它们的交点。

在仿射变换中,直线之间的平行关系仍然成立。对于一个射影变换\(H\),我们可以根据仿射变换中\(\boldsymbol{l}_{\infty}\)不变的性质,将\(H\)分解为如下的形式,这个分解过程我们称为仿射矫正。 $$ H = H_A \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ l_1 & l_2 & l_3\end{bmatrix} = H_A H' $$ 其中,\(l_1, l_2, l_3\)是无穷远直线\(\boldsymbol{l}_{\infty}\)经射影变换\(H\)作用后的象的三个元素, 即\(\boldsymbol{l} = H^{-T}\boldsymbol{l}_{\infty} = \begin{bmatrix} l_1 & l_2 & l_3 \end{bmatrix}^T\)。 \(H_A\)则是一个仿射变换矩阵,矫正矩阵记为\(H'\)。那么有 $$ (H')^{-T} = \begin{bmatrix} 1 & 0 & -l_1 / l_3 \\ 0 & 1 & -l_2 / l_3 \\ 0 & 0 & 1 / l_3 \\ \end{bmatrix} $$ 显然,\(H^{-T}\boldsymbol{l} = H_A^{-T}(H')^{-T}\boldsymbol{l} = H_A^{-T}\boldsymbol{l}_{\infty}\)。如右图所示, 只要我们能够找到\(\boldsymbol{l}_{\infty}\)的象,就可以恢复出仿射变换。而\(\boldsymbol{l}_{\infty}\)的象可以通过已知的平行线交点,或者直线上的距离比来推算该直线上无穷远处的点的象。 我们把\(\boldsymbol{l}_{\infty}\)上的点经过射影变换后的象称为灭点(vanishing point)

6. 相似矫正, 度量矫正

在射影平面中有两个特殊的点\(\boldsymbol{I}, \boldsymbol{J}\),被称为虚圆点circular points。在几何意义上,它们是射影平面中任意一个圆与无穷远处的直线\(\boldsymbol{l}_{\infty}\)的交点,具有如下的形式: $$ \boldsymbol{I} = \begin{bmatrix} 1 \\ i \\ 0 \end{bmatrix}, \boldsymbol{J} = \begin{bmatrix} 1 \\ -i \\ 0 \end{bmatrix}, $$ 对于相似变换而言,虚圆点\(\boldsymbol{I}, \boldsymbol{J}\)是不变的,即: $$ \boldsymbol{I}' = H_S \boldsymbol{I} = \begin{bmatrix} s \cos \theta & -s \sin \theta & t_x \\ s \sin \theta & s \cos \theta & t_y \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} 1 \\ i \\ 0 \end{bmatrix} = s e^{-i\theta} \begin{bmatrix} 1 \\ i \\ 0 \end{bmatrix} = \boldsymbol{I} $$ 这两个虚圆点还构成一个关于无穷远直线的对偶圆锥曲线\(C_{\infty}^* = \boldsymbol{I} \boldsymbol{J}^T + \boldsymbol{J}\boldsymbol{I}^T\),展开成矩阵的形式有: $$ C_{\infty}^* = \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 0 \end{bmatrix} $$ 如果一个变换\(H\)是相似变换,那么\(C_{\infty}^*\)经\(H\)变换之后的象仍然是\(C_{\infty}^*\),即: $$ C_{\infty}^* = H_S C_{\infty}^* H_S^T $$ 利用这一性质,我们是有可能从射影变换或者仿射变换中还原出相似变换的, 即进行相似矫正或者说是度量矫正metric rectification。应用式\((\ref{H_PAS})\),有: $$ \begin{array} {rcl} (C_{\infty}^*)' & = & (H_P H_A H_S) C_{\infty}^* (H_P H_A H_S)^T = (H_P H_A) (H_S C_{\infty}^* H_S^T) (H_A^T H_P^T) \\ & = & (H_P H_A) C_{\infty}^* (H_A^T H_P^T) \\ & = & \begin{bmatrix} KK^T & KK^T\boldsymbol{v} \\ \boldsymbol{v}^T K K^T & \boldsymbol{v}^TKK^T\boldsymbol{v} \end{bmatrix} \end{array} $$

对于两条相互垂直的直线\(\boldsymbol{l}\)和\(\boldsymbol{m}\),存在关系\(\boldsymbol{l}^T C_{\infty}^* \boldsymbol{m} = 0\)。如果我们能够从射影平面上找到若干条相互垂直的直线对,就可以写出关于\((C_{\infty}^*)'\)的线性方程组, 通过SVD分解求得\((C_{\infty}^*)'\),进而解出上式中的\(K\)和\(\boldsymbol{v}\)。

7. 完




Copyright @ 高乙超. All Rights Reserved. 京ICP备16033081号-1