信源编码---矢量量化算法

1.矢量量化的基本思想:

将若干个标量数据组构成一个矢量,然后在矢量空间给以整体量化,从而压缩了数据而不损失多少信息。矢量量化引入的优点:高维空间处理可增加灵活性。

2.矢量量化最重要的点——码本的生成。这里介绍一种算法---LBG算法

LBG算法的思想:

1.随意选取n个图像块作为码矢量;
2.由这n个码矢量对所有的 图像 块进行划分,即分成n个集合,使每个集合中的图像块,都是与各码 矢量距离 中,与对应的码矢量的距离最小的;
3.由这n个集合的重心,得到n个新的码矢量;
4.如果这些个码矢量与原来的码矢量变化不大(收敛),就完成码书的训练,否则重新进行2、3步。
程序调试:
运行环境:win7+VS2012
一、  trvqsp_img:获得图像矢量量化码书。

这个程序可以用来训练矢量量化器使用LBG算法获得图像压缩码书,初始化使用Linde,  Buzo, and Gray提出的分割方法

1. 调用参数格式:

trvqsp_img ts_img codefile [-b cb_size] [ -t block_height] [-w block_width] [-x row_size][-y col_size] [-h]

ts_img:训练图像,也即待量化压缩的图像,假定为8位灰度级使用光栅扫描顺序存储。

Codefile:以二进制格式存放码书的文件,有一个包含12个字节的文件记录:向量的维度,以及码的大小。

-b cb_size:码书的大小

-t block_height:块的高度(以像素为单位)

-w block_width:块的宽度(以像素为单位)

实际上由block_width 、block_height决定着码书向量的大小,也即每个输出块的大小。因此向量的维数是block_height *block_width

-x row_size:输入图像的宽

-y col_size:输入图像的高

-h 帮助


信源编码---矢量量化算法_第1张图片
二、 vqimg_enc:根据码书对图像进行矢量量化。

这个程序可以使用矢量量化来压缩图像。需使用trvqsp_img获得的码书文件,码书的大小以及码块的大小包含在指定的码书文件中。这个程序使用的是定长编码,所以可以使用变长编码来优化程序。如果没有指定一个输出文件则从命令框中输出。

1. 调用格式:

vqimg_enc [-i imagein] [-o cmpfile] [-c codebook] [-x row_size] [-y col_size] [-h]

-i imagein:输入的待编码的图像文件名

-o cmpfile:输出的量化压缩后的文件名

-c cmpfile:码书文件

-x row_size:输入图像的宽

-y col_size:输入图像的高

-h 帮助

信源编码---矢量量化算法_第2张图片
三、 vqimg_dec:根据码书文件和压缩后的文件重构原始图像

重建压缩图像使用vqimg_enc。解码需要提供码书文件,而码书文件则通过压缩文件的文件头提供其名称,不需要人为输入。图像是8位灰度级图像,使用光栅扫描顺序存储

1. 调用格式:

vqimg_dec [-i cmpfile] [-o imageout] [-h]

-i cmpfile:压缩文件名

-o imageout:重建图像文件名

-h 帮助

信源编码---矢量量化算法_第3张图片

 对项目进行单步调试,通过设置断点的方式对程序进行单步调试,了解到:

该解决方案的中包含三个主程序且他们各自的运行过程如下:
(1)、trvqsp_img:用于获得图像矢量量化的码书;
程序中运行过程:
(1、打开图像文件与码书文件
(2、读取相应参数
(3、图像存到缓冲区trimg
(4、codebook_size变为之前2倍。对codebook赋值,奇数行不变,偶数行加上一个eps扰动。
(5、measure>门限值且迭代次数小于100次时,迭代codebook行,如果有匹配训练集行,该行赋值为匹配训练集行的均值;如果没有,则该行赋值为上次码书匹配最多行并加扰动;对训练集每一行找到码书中平方差最小的行,累加起来。
(6、重复步骤(5直到不满足条件
(7、(4-(6直到codebook_size不再





你可能感兴趣的:(信源编码,矢量量化,LBG算法)