欢迎关注我的博客专栏“图像处理中的数学原理具体解释”
全文文件夹请见 图像处理中的数学原理具体解释(总纲)
http://blog.csdn.net/baimafujinji/article/details/48467225
假设你对PCA的推导和概念还不是非常清楚。建议阅读本文的前导文章
http://blog.csdn.net/baimafujinji/article/details/50372906
6.4.3 主成分变换的实现
本小节通过一个算例验证一下之前的推导。
在前面给出的样例中,各点在原始的
由于方程是齐次的,所以不独立。由于系数矩阵有零行列式,所以方程有非无效解。
从两个方程的不论什么一个可见
如今考虑该结论该怎样解释。特征向量g1和g2是在原坐标系中用来定义主成分轴的向量,如图6-20所看到的。当中。e1和e2各自是水平和垂直的方向向量。显而易见。这些数据在新坐标系中是非相关的。该新坐标系是原坐标系的旋转,出于这种原因。能够将主成分变换理解为旋转变换(即使在高维空间上亦是如此)。
6.4.4 基于K-L变换的图像压缩
从图像压缩的角度出发,我们必定希望变换系数协方差矩阵Σx 中除对角线外的所有协方差均为零。成为对角线矩阵,即原来像素间的相关性经变换后所有解除,或者至少大部分协方差要等于或接近于零。为此,须要选择适当的变换矩阵,它作用于Σx 后使其变成对角线型。
通过前面的分析和推导,可知这种变换矩阵是存在的。
假设用协方差矩阵Σx 的特征向量作变换的基向量,即由Σx 的特征向量作为正交变换的变换矩阵。就能够得到对角线型的变换域协方差矩阵Σy 。
K-L变换就是採用这种矩阵进行变换的正交变换,它能够在变换域全然解除相关性,因此是理论上的最佳变换。同一时候。换一个角度也能够证明,K-L变换是均方误差最小准则下的最佳变换,即当压缩比确定的情况下,採用K-L变换后,重建图像的均方误差比採用不论什么其它正交变换的都小。
可是回顾之前进行的K-L变换,哪个步骤能够称为图像压缩的切入点呢?一幅大小为M×N的图像。它的协方差矩阵Σx大小为MN×MN。
由上述K-L变换理论可知,对X进行K-L变换的变换矩阵就是Σx的特征向量矩阵,该矩阵大小亦为MN×MN,其大小远远大于原始图像数据矩阵。并且要在解码时恢复原图像,不但须要变换后的系数矩阵Y。还须要知道逆变换矩阵(也就是变换矩阵的转置)。假设不经过不论什么处理就这样直接将K-L变换用于数字图像的压缩编码。不但达不到不论什么数据压缩的效果,还极大的添加了数据量。
即使仅保留一个最大的特征值,变换矩阵中和该特征值相应的特征向量为M×N维。系数矩阵 Y 保留的元素为一个。要重建图像数据。须要保留的元素个数为仍大于原矩阵,所以达不到压缩的目的。另外。求一个矩阵的协方差矩阵和特征向量矩阵。都是非常复杂的运算过程。须要大量的计算。
当X比較大时,运算时间的耗用可能是非常大的。有时甚至会出现由于过于复杂而导致Σx和变换矩阵无法求解的情况。
要解决上述问题,能够考虑将图像分成若干个小块,然后对每一个小块分别进行K-L变换(这与本章前面的处理方式基本保持一致)。这样使得Σx和变换矩阵都比較小,计算机处理起来比較easy并且速度快。这里仍然将图像划分为多个不重叠的8×8小块(当图像垂直和水平方向的像素数不是8的倍数时补0,使之均为8的倍数)。然后再分别对每一个小块运行K-L变换。变换矩阵的数目为K个,每一个矩阵大小为64×64,仅变换矩阵就要记录K×64×64个数据,还是远远大于原始数据的个数M×N。能否够让变换矩阵的数量变得少些,最好仅仅保留一个变换矩阵。回顾前面做K-L变换的样例,变换矩阵的大小与输入矩阵的维度有关,而与样本数量无关,据此能够将每一个8×8小块变成一个行向量(也就是一个64维的数组),原图中的每一个小方块都是一个64维的样本。所以最后仅仅须要一个64×64的变换矩阵就可以,它对于原图像的随意一个数据块都适用。这种处理方式并非全然意义上的K-L 变换,由于採用分块的处理方式。各个数据块之间的相关性是没有消除的。
但实验亦表明,这种K-L 变换虽然不能全然消除图像各像素点之间的相关性,也能达到非常好的去相关效果。在去相关性性能上优于离散余弦变换。
图像数据经K-L变换后。得到的系数矩阵Y大部分系数都非常小,接近于零。仅仅有非常少的几个系数的数值比較大。这正是K-L变换所起到的去除像素间的相关性,把能量集中分布在较少的变换系数上的作用的结果。
据此,在图像数据压缩时。系数矩阵Y保留M个分量,其余分量则舍去。在实际编程开发中,经K-L变换后的系数矩阵中的数值都是按从大到小的顺序排列的。所以直接舍去后面的64−M个分量就可以。通过这一步的处理,便可动态地调节压缩编码系统的压缩比和重建图像的质量。
解码时,首先做K-L逆变换,然后将上述过程逆转。能够得到重建后的图像数据矩阵。
我们在MATLAB中编写的演示样例程序演示了运用上述方法对图像实施基于K-L变换的压缩处理的过程。
最后能够通过编程实现基于K-L变换的图像压缩算法并測试其压缩效果。所得之測试结果如图6-22所看到的。该程序验证了三种不同的压缩比,即舍去排序后的系数矩阵中的32/64(相应压缩比50%)、48/64(相应压缩比75%)以及56/64(相应压缩比87.5%)。相关測试程序源代码读者能够从本书的在线支持资源中下载得到。
最后须要补充说明的是虽然K-L变换能够将数据之间的相关性全然去除,所以理论上是一种最理想的数据压缩方案,但它在实际应用过程中仍然受到非常大局限。比如。它没有高速算法。不同的图像所相应的变换矩阵也不同。从这个角度来说。单纯将K-L变换直接应用于图像数据压缩的理论价值要大于实际价值。
它的存在意义,一方面是能够作为理论验证的參考模板,还有一方面就是须要对原始算法加以改进后再付诸应用。
我的“图像处理中的数学原理”专栏中之系列文章已经以《图像处理中的数学修炼》为名结集出版(清华大学出版社)。该书具体介绍图像处理中的数学原理,为你打开一道通往图像世界的数学之门。具体内容及文件夹请见 http://blog.csdn.net/baimafujinji/article/details/48467225