【转】矢量量化

原文地址:http://wenku.baidu.com/view/fbdb7dfa770bf78a64295405.html

1 定义

标量量化:把每个像素的颜色用一个0255之间的整数值表示。

矢量量化:把几个像素组成的像素块,用一个特定码书中的像素块来表示,码书中像素块的数目,一般远小于这些像素块所有可能颜色的组合。

在图像压缩中的矢量量化:

  

矢量量化的使用

如果一个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) 可以看成失真程度的一种度量(BC表示时)

 

4.1 LBG算法

LBG算法是由Linde, Buzo 和 Gray三位学者提出的方法。其主要的思想是:从一组码矢量出发,将所有的图像矢量进行划分,然后再重新计算码矢量,直到码矢量的变化收敛时,即完成了码书的选择。

主要步骤:

1随意选取n个图像块作为码矢量

2由这n个码矢量对所有的图像块进行划分,即分成n个集合,使每个集合中的图像块,都是与各码矢量距离中,与对应的码矢量的距离最小的

3由这n个集合的重心,得到n个新的码矢量

4如果这些个码矢量与原来的码矢量变化不大(收敛),就完成码书的训练,否则重新进行23

 

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)

posted on 2013-06-21 11:09  寻梅踏雪  阅读(1086)  评论(0编辑  收藏  举报

导航