【转】矢量量化
原文地址:http://wenku.baidu.com/view/fbdb7dfa770bf78a64295405.html
1 定义
标量量化:把每个像素的颜色用一个0到255之间的整数值表示。
矢量量化:把几个像素组成的像素块,用一个特定码书中的像素块来表示,码书中像素块的数目,一般远小于这些像素块所有可能颜色的组合。
在图像压缩中的矢量量化:
2 矢量量化的使用
如果一个2x2像素的小块,每像素有8位表示,则所有的像素块的可能取值有:232=4G种,可以选择一个远远小于这个数的数n,作为码书中码的个数,然后对图像中的每个块(矢量),用一个码书中的码来近似,这样只需用这个码的编号来编码这个图像矢量即可,因此每一个小块,最后都只需用log2n个位来表示,由此达到压缩的目的。
3 图像块与码书中码的匹配
图像块与码书中码的匹配
设图像块B=(b1, b2, …, bn)
码矢量:C=(c1, c2, …, cn)
图像块与码矢量的匹配程度,由它们之间的“距离”来度量,一般d(B, C)可取如下之一:
Σ|bi - ci|
Σ(bi – ci)2
Max|bi - ci|
d(B, C) 可以看成失真程度的一种度量(B用C表示时)
4.1 LBG算法
LBG算法是由Linde, Buzo 和 Gray三位学者提出的方法。其主要的思想是:从一组码矢量出发,将所有的图像矢量进行划分,然后再重新计算码矢量,直到码矢量的变化收敛时,即完成了码书的选择。
主要步骤:
1、随意选取n个图像块作为码矢量
2、由这n个码矢量对所有的图像块进行划分,即分成n个集合,使每个集合中的图像块,都是与各码矢量距离中,与对应的码矢量的距离最小的
3、由这n个集合的重心,得到n个新的码矢量
4、如果这些个码矢量与原来的码矢量变化不大(收敛),就完成码书的训练,否则重新进行2、3步。
4.2 例子
假设每像素8位,分成两个像素的小块。
图像共有24个像素,12个小块:
B1=(32,32), B2=(60,32), B3=(32,50), B4=(60,50), B5=(60,150), B6=(70,140), B7=(200,210), B8=(200,32), B9=(200,40), B10=(200,50), B11=(215,50), B12=(215,35)
初始码书:C1=(70,40), C2=(60,120), C3=(210,200), C4=(225, 50)
根据上图,很容易确定初始划分:
P1 = (B1, B2, B3, B4), P2=(B5, B6), P3=(B7), P4=(B8, B9, B10, B11, B12)
平均失真为D(可用ΔD/D<ζ作为收敛判断准则):
mean({1508, 164, 1544, 200, 900, 500, 200, 949, 725, 625, 100, 325}) = 645
计算4个新的码矢量为:
{(B1+B2+B3+B4)/4, (B5+B6)/2, B7, (B8+B9,B10,B11,B12)/5},所以新的码矢量为:
C1=(46,41), C2=(65, 145), C3=(200,210), C4=(206,41)