当我们处理图像的时候,实际上是在和矩阵打交道,因此自然少不了线性代数。详细的内容可以直接看飞飞的课件,如果不追求证明的话可以拿来就用。课件讲到了SVD,看了课件提到的if you're interested的资料,里面有SVD的几何解释,对于理解SVD大有裨益,在此处做点笔记。
=======================================================================================
先来看一些线性变换矩阵的几何解释:
先从一个简单的矩阵M开始,,
把M乘以一个平面上的任意一点(x,y)可以得到,
对应的几何解释如下图:
经过M的作用,左边的红色正方形的水平宽度变为原来的3倍,竖直方向上没有发生变化。像这种只在主对角线上元素不为0的矩阵可以用于缩放,我暂且称之为缩放矩阵。
=======================================================================================
现在把M变复杂一点点,加入次对角线上的元素,,注意到这是一个对称矩阵。
它干的事情是这样的:
好像根本看不出来在干什么,莫急,我们把所有组成格子的直线都逆时针选择45度,变成了这样:
现在可以看出来,矩阵做的事情是:先把网格旋转45度,再沿其中一个方向拉长至原来的3倍。
如果把左图的平行于网格线方向的向量用Vi表示,则左图到右图的关系可以用公式表示,看到这个矩阵乘向量等于实数乘向量的形式,就应该醒目了,就是的特征向量,3是特征值。更一般地,对于一个对称矩阵,我们总可以通过这样旋转45度的方式找到它的特征向量。或者换一种联系上下文的讲法,对于对称矩阵M,将要变换的向量先旋转45度再相乘时,对称矩阵M的作用和对角矩阵一样。
=======================================================================================
假如M不是对称矩阵,而是更一般的矩阵,用同样的方式能不能找到M的特征向量呢?
举个栗子,,当然其实这个矩阵也没那么一般,它作用于向量时产生的操作叫做shear,效果是这样的:
好那我们先旋转一下看能不能找到特征向量,先转个30度吧。
嗯,还不够,再转30度。
好像差不多,但细看是多转了一点的,这里不给出证明,其实真正需要旋转的角度是58.28度。
===================================下面开始导出SVD的公式==================================
对于一个2x2的矩阵M,我们总可以找到一对正交的向量v1和v2,使得Mv1和Mv2也是正交的向量。
分别用u1和u2表示Mv1和Mv2的单位向量,用1和2表示对应的长度比例,则Mv1和Mv2分别可以这样表示:
Mv1 = σ1u1
Mv2 = σ2u2
对于在v1和v2张成的向量空间中一个任意向量x,可以用v1和v2这样表示:
x = (v1x) v1 + (v2x) v2
经过M的变换后变成:
Mx = (v1x) Mv1 + (v2x) Mv2
也就是:
Mx = (v1x) σ1u1 + (v2x) σ2u2
把v1x和v2x用矩阵相乘的形式表示,可以得到:
Mx = u1σ1 v1Tx + u2σ2 v2Tx
把两边的x去掉得到:
M = u1σ1 v1T + u2σ2 v2T
把向量u1和u2合并成矩阵U,v1和v2合并成矩阵V, σ1和 σ2用由它们组成的对角矩阵Σ表示,得到SVD的公式:
M = UΣVT