嗯…现在是 2017 年 5 月 4 号晚 9 点半,明天早上就是信源编码课了… 所以… 来不及了!赶紧随便粘点东西!
想直接从维基百科粘的…结果竟然没有这个词条! 英文维基内容也超!级!少! 最后找到了 这篇论文,是 LBG 算法最原始的原文了… 作为英文苦手呢,还是引用 上 别人的博客 吧:
LBG算法: 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至到码矢的数目达到要求的个数。
是不是很丑!因为来不及改格式了! 再说明一遍——这一段来自原文:http://blog.csdn.net/zouxy09/article/details/9153255 要看漂亮的原文的可以点上面的链接!!
老师给的代码中一共有三个项目:trvqsp_img、vqimg_enc、vqimg_enc,分别作用如下:
trvqsp_img: 根据输入图像得到码书;vqimg_enc: 根据码书对图像进行矢量量化;vqimg_dec: 根据码书文件和压缩后的文件重构原始图像。下面分别解释这三个代码:
为什么后两个代码没有详细流程图呢——因为我没时间整理啊!不过也比较简单,不需要这么详细了(呸! 最后放一张结果图(也是老师给的!):
总之就是编码大成功!码书越大、块越小,效果越好!