矩阵与图像


图像在Matlab中的存储形式为一个维度为3的矩阵 ($m\times n\times 3$)。

以下图像操作都是基齐次坐标(Homogeneous Coordinates)。 In homogeneous coordinates, the multiplication works out so the rightmost column of the matrix is a vector that gets added.


图像位移(Translation)
原位置:$P=(x,y)$, 新位置:$P’=(x+t_x,y+t_y)$,位移量:$t=(t_x,t_y)$,那么位移矩阵为:$T$,即, \[ \begin{bmatrix} x+t_x\\y+t_y\\1 \end{bmatrix}=P’==TP=\begin{bmatrix} 1&0&t_x\
0&1&t_y\
0&0&1 \end{bmatrix}\cdot \begin{bmatrix} x\\y\\1 \end{bmatrix} \]


图像缩放(Scaling)
原位置:$P=(x,y)$, 新位置:$P’=(s_x x,s_y y)$,缩放量:$s=(s_x,s_y)$,那么缩放矩阵为:$S$,即, \[ \begin{bmatrix} s_xx\\s_yy\\1 \end{bmatrix}=P’==SP=\begin{bmatrix} s_x&0&0\
0&s_y&0\
0&0&1 \end{bmatrix}\cdot \begin{bmatrix} x\\y\\1 \end{bmatrix} \]


由于矩阵乘法的不可交换性,导致 Translation & Scaling != Scaling & Translation


图像旋转(Rotation)
原位置:$P=(x,y)$, 新位置:$P’=(x’,y’)$,旋转角度:$\theta=(\theta)$,那么旋转矩阵为:$R$,即 \[ \begin{bmatrix} r_x\\r_y\\1 \end{bmatrix}=P’==RP=\begin{bmatrix} \text{cos}(\theta)&-\text{sin}(\theta)&0\
\text{sin}(\theta)&\text{cos}(\theta)&0\
0&0&1 \end{bmatrix}\cdot \begin{bmatrix} x\\y\\1 \end{bmatrix} \] 旋转公式: \[ \begin{split} r_x &= \text{cos}(\theta)x-\text{sin}(\theta)y\
r_y &= \text{sin}(\theta)x+\text{cos}(\theta)y \end{split} \] 旋转矩阵性质:旋转矩阵的转置产生一个相反方向的旋转
\[ \begin{split} RR^T &=R^TR=I \
det(R)&=1 \end{split} \] 旋转矩阵的行都是相互垂直的(正交)


奇异值分解Singular Value Decomposition (SVD)
SVD represents any matrix $A$ as a product of three matrices: $U\Sigma V^T$. In MATLAB, the function is $[U,S,V]=svd(A)$. \[ \begin{bmatrix} -0.39&-0.92\
-0.92&0.39 \end{bmatrix}_{m\times m}\times\begin{bmatrix} 9.51&0&0\\0&0.77&0 \end{bmatrix}_{m\times n}\times\begin{bmatrix} -0.42&-0.57&-0.70\\0.81&0.11&-0.58\\0.41&-0.82&0.41 \end{bmatrix}_{n\times n}=\begin{bmatrix} 1&2&3\\4&5&6 \end{bmatrix}_{n\times n} \]

SVD的意义。先将缩放因子吸收进$U$,得到$[U\Sigma]_{m\times n}$, \[ \begin{bmatrix} -3.67 & -0.71 & 0 \\ -8.8 & 0.30 & 0 \end{bmatrix}\times \begin{bmatrix} -0.42 & -0.57 & -0.70 \\ 0.81 & 0.11 & -0.58 \\ 0.41 & -0.82 & 0.41 \end{bmatrix} \]

矩阵$U\Sigma$第一列影响的部分为$V^T$的第一行。即,$U\Sigma$的第一列$[U\Sigma]_1=\begin{bmatrix} -3.67 \\ -8.8\end{bmatrix}$只缩放了$V^T$的第一行$(V_1)^T=\begin{bmatrix} -0.42&-0.57&-0.70 \end{bmatrix}$,同理,第二列影响第二行,影响的结果分别为, \[ \begin{split} A_1&=\begin{bmatrix} 1.6&2.1&2.6\
3.8&5.0&6.2 \end{bmatrix}=[U\Sigma]_1 \otimes (V_1)^T\\ A_2&=\begin{bmatrix} -0.6&-0.1&0.4 \
0.2&0&-0.2 \end{bmatrix}=[U\Sigma]_2 \otimes (V_2)^T \end{split} \] 其中,”$\otimes$”为Kronecker Product,显然,$A=A_1+A_2$. 更具意义的是这个由$U,V$的第一列和$\Sigma_1$张成的矩阵$A_1$与$A$已经相差不是太大了。一般,我们称$U$中的这些少量的列向量为主成分