首页 > 代码库 > 图像处理中的数学原理具体解释21——PCA实例与图像编码

图像处理中的数学原理具体解释21——PCA实例与图像编码

欢迎关注我的博客专栏“图像处理中的数学原理具体解释”

全文文件夹请见 图像处理中的数学原理具体解释(总纲)

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


技术分享

图像处理中的数学原理具体解释21——PCA实例与图像编码