本文是Gilbert Strang的线性代数导论课程笔记。课程地址: http://v.163.com/special/opencourse/daishu.html
第三十二课时:基变换和图像压缩
本讲关于基变换,从一组基变换到另外一组基,这在应用中比较常见,还会讲有关应用信号压缩,图像压缩。主题仍是线性变换与矩阵关联。
图像压缩——傅里叶变换
压缩包括无损压缩和有损压缩,这里讲有损压缩。
假设有一张静态黑白图像,像素512×512,每个像素点的颜色是0~255中的一个数表示的灰度值,占8个比特位。那么,实际上就是对R
n中的向量x做操作,n=512×512,一个图像就是一个长度为512×512的向量,如果是彩色图像,得到的向量长度就是这个的三倍,因为彩色需要用三个值来表示。所以这是相当大的信息量,需要将其压缩。
标准压缩方式,即JPEG,表示联合图像专家组。这个压缩技术就是基变换。
如上描述,在标准基(单位矩阵I所表示的基)中,图像向量x为一个长度为512平方的向量,向量中的元素值为0~255的灰度值,当一些像素点的灰度一样或者非常接近的的时候,这就是一副标准基很差的图像。一个基本的事实,给出每个像素值的标准基,没有利用上很多地方灰度值一样的特点,我们得到的大部分像素点其灰度值和相邻像素灰度值是一样的。
因此,我们要将标准基变换为一个好的基
标准基是由所有的维都是1,其他都是0的向量组成,如下图左。
好的基是所有元素都为1的向量(因为如果用这个基向量来表示信号的话,基变换后此维只需要一个系数就能表示,另外,这样的
是平滑的信号,低频,频率为0),如上图右,
一个向量就能完整地给出所有像素一致图像的信息,(当然我们的图像像素不是一致的,混合一些其他信号),在基中有这样一个向量能解决很大问题。其他的基向量是多少?
极端情况下,其中的向量就是(1,-1,1,-1,1,-1...),(表示高频信号,抖动或噪音)这个向量像一个棋盘向量,黑白相间,这个向量能包含所有信息;
更常见的是一半图像暗,一半图像亮,此时的基向量就为(1,1,1,1,-1,-1,-1..)一半1,一半-1(这样做的目的是为了使用一个系数就能表示出一半亮一半暗的向量)。因此,我们要知道这组基可能会是什么,首先,先把所有的基排列好,然后来选择它,不同行业的从业人员选择不会,归根结底这是线性代数基的选择问题。
那么,
JPEG所用的最好的基就是傅里叶基,通常选择8×8的基,是指对于一个大的信号,512×512,一次处理就太大了,分解成8×8的块,每块64个像素,在这小块上做基变换。傅里叶基如下(记得以前讲过傅里叶矩阵,就是那个)
那JPEG是怎么压缩的呢?
每个8×8的小块有64个系数,64个基向量,64个像素,在64维空间中,利用傅里叶向量做基变换。
步骤为:
1)输入信号x,用傅里叶基进行基变换,得到傅里叶基下的系数c(用快速傅里叶变换FFT求得),这一步是无损的。
2)压缩:可以扔掉一些小的系数(叫做阈值量化,设定人肉眼看不出区别的阈值,每个系数,每个基向量,不在其中的,超过阈值的将丢掉),因此压缩步得到压缩后的一套系数c',很多是0。这一步是有损的。
3)用新的系数c'重构信号x'。x'=∑ci'vi,此时求和项因为丢掉原因不再有64项,或许只有2,3项。
因此这样就起到了图像压缩的作用。
一个好的基需要有哪些性质?
1)计算快;
2)良好的压缩性,少量的基向量就能接近信号,能够重现图像。
小波基wavelets——傅里叶基的竞争对手
以R
8 8×8为例。小波基为(这
只是小波基的一个特例,小波基也可能选择别的不一样的向量,比如FBI在做指纹压缩的时候倾向于用更平滑的小波基):(后面三个没写出来的基向量是(0,0,1,-1,0,0,0,0),(0,0,0,0,1,-1,0,0),(0,0,0,0,0,0,1,-1))
对于频率变换大的信号(如上面所述(1,-1,1,-1...))怎么写成小波基组合的形式?它是最后四个小波基的和。
小波变换要做的事即:标准基下的像素值系数向量(也即输入信号)P(p1,p2....p8)表示成小波基的组合形式,这是变换步。组合的8个系数c1,c2...c8即新的基下的系数。
如何求这8个系数,将此等式表示成
小波矩阵形式。
这就是基变换,求解方程P=Wc,c=W-1P,很好的基是能够快速求逆的。(好基:计算快,正交的。小波基不是标准的,变为标准的需要除以长度,这只是个常数因子),快速傅里叶变换FFT能够很快计算,同时,也有
快速小波变换很快求逆(如果矩阵正交,其逆为矩阵的转置)。
基变换
已知一个基上的向量,变换到不同的基中。如小波矩阵W的列向量是新基的向量。已知旧基下的向量x,转换成新基下的向量c
矩阵变换
已知确定的线性变换T:T(x)=Ax,是对于n×n的矩阵来说的。有两组基,第一组以v1,v2...v8为基,有矩阵A,第二组以w1,w2...w8为基,有矩阵B,T(x)=Bx,
A和B来自同一线性变换T(来自同一变换的意思是A,B是同一变换的不同表示形式,因为选择的基不同),在一组基上计算得到一个矩阵A,然后在另一组基上计算另一个矩阵B。A和B有什么联系?
A和B是相似的,即有B=M-1AM,M就是基变换矩阵。
线性变换,如果变成一组不同的基去做变换,发生了两件事:
1)每个向量有了新坐标,新旧坐标的关系为x=Wc;
2)每个矩阵变了,每一个变换有一个新矩阵,新矩阵之间的关系就是B=M-1AM。
具体的,A是什么?(A是变换T的矩阵)
已知有线性变换T,T(v1),T(v2)...T(v8),A中的每一个向量x=c1v1+c2v2+...+c8v8,T(x)=c1T(v1)+c2T(v2)...c8T(v8)
也就是说,如果知道T作用在每个基向量的结果,那么就知道一切了。所以第一个向量变换结果就是这八个基向量的某个组合。假设对v1,v2..v8进行变换呢?线性变换T对基的作用,那么有(
下图中等式有假设:输入和输出都是使用一组基,比如做投影时的变换):
在信号图像应用中,很多情况下用小波基或者傅里叶基,但最好的基是特征向量基,不过找特征向量基代价较大。
假如v1到v8这组基是特征向量,即一组特征向量基,那么 Avi=T(vi)=λivi,T(vi)和vi同向,此时,A是什么?
第一列的输入为v1,输出为λ1v1,第二列的输入为v2,输出为λ2v2....,
那么A是特征值对角阵Λ。