【信源编码 作业四】基于LBG的矢量量化算法

1. LBG算法的概述
自从1980年提出矢量量化器码书设计的LBG算法以来,矢量量化技术已经成功地应用到图像压缩和语音编码中。
LBG算法中的最佳矢量量化器设计的关键是最佳划分和最佳码书的设计。 一是给定码书条件下寻找信源空间的最佳划分,使平均失真最小,由码书 和NNR得最佳划分,信源空间中的任一点矢量,如果它和码字的失真小于它和其它码字的失真;二是在给定划分条件下,寻找最佳码书,使平均失真最小。其思想如下所示:
(1)随意选取n个图像块作为码字;
(2)由这n个码字对所有的图像块进行划分,即分成n个集合,使每个集合中的图像块,都是与各码字距离中与对应的码字的距离最小的;
(3)由这n个集合的重心,得到n个新的码字;
(4)如果这些个码字与原来的码矢量变化不大(收敛),就完成码书的训练,否则重新进行2、3步。
算法步骤如下所示:
(1)给定训练集T。固定ɛ(失真阈值)为一个很小的正数;
(2)让N=1(码矢数量),将这一个码矢设置为所有训练样本的平均值:
这里写图片描述
计算总失真度(这时候的总失真很明显是最大的):
这里写图片描述
(3)分裂:对i=1,2,…,N,他们的码矢分别为:
这里写图片描述
让N=2N,就是每个码矢分裂(乘以扰乱系数1+ɛ和1-ɛ)为两个,这种每一次分裂后的码矢数量就是前一次的两倍。
(4)迭代:让初始失真度为:这里写图片描述 。将迭代索引或者迭代计数器置零i=0.
1)对于训练集T中的每一个训练样本m=1,2,…,M。在所有码矢中寻找的这里写图片描述最小值,也就是看这个训练样本和哪个码矢距离最近。我们用n*记录这个最小值的索引。然后用这个码矢来近似这个训练样本:
这里写图片描述
2)对于n=1,2,…,N,通过以下方式更新所有码矢:
这里写图片描述
也就是将所有属于cn所在的编码区域Sn的训练样本取平均作为这个编码区域的新的码矢。
3)迭代计数器加1:i=i+1.
4)计算在现阶段的C和P基础上的总失真度:
这里写图片描述
5)如果失真度相比上一次的失真度(相对失真改进量)还大于可以接受的失真阈值ɛ(如果是小于就表明再进行迭代运算失真得减小是有限的以停止迭代运算了),那么继续迭代,返回步骤1)。
这里写图片描述
6)否则最终失真度为这里写图片描述 。对n=1,2,…,N,最终码矢为:这里写图片描述
(5)重复步骤3和4至到码矢的数目达到要求的个数。
LBG算法有3个主要缺点:
(1)在每次迭代的最佳划分阶段从码书中搜索训练矢量的最近码字需要大量的存储空间和繁琐的计算;
(2)初始码书的选择影响码书训练的收敛速度和最终码书的性能;
(3)码书的自适应能力不强。
2. 程序说明
该程序分为三个部分:trvqsp_img、vqimg_enc、vqimg_enc。trvqsp_img的作用是根据输入图像得到码书;vqimg_enc的作用是根据码书对图像进行矢量量化;vqimg_dec的作用是根据码书文件和压缩后的文件重构原始图像。码书构造的流程图如下所示:
【信源编码 作业四】基于LBG的矢量量化算法_第1张图片
量化流程图如下所示:
【信源编码 作业四】基于LBG的矢量量化算法_第2张图片
重构流程图如下所示:
【信源编码 作业四】基于LBG的矢量量化算法_第3张图片

你可能感兴趣的:(信源编码,作业)