1. LBG算法介绍
自从1980年提出矢量量化器码书设计的LBG算法以来,矢量量化技术已经成功地应用到图像压缩和语音编码中。
LBG算法中的最佳矢量量化器设计的关键是最佳划分和最佳码书的设计。 一是给定码书条件下寻找信源空间的最佳划分,使平均失真最小,由码书 和NNR得最佳划分,信源空间中的任一点矢量,如果它和码字的失真小于它和其它码字的失真;二是在给定划分条件下,寻找最佳码书,使平均失真最小。其思想如下所示:
a.随意选取n个图像块作为码字;
b.由这n个码字对所有的图像块进行划分,即分成n个集合,使每个集合中的图像块,都是与各码字距离中与对应的码字的距离最小的;
c.由这n个集合的重心,得到n个新的码字;
d.如果这些个码字与原来的码矢量变化不大(收敛),就完成码书的训练,否则重新进行2、3步。
2.程序部分
该程序分为三个部分:trvqsp_img、vqimg_enc、vqimg_dec。trvqsp_img的作用是根据输入图像得到码书;vqimg_enc的作用是根据码书对图像进行矢量量化;vqimg_dec的作用是根据码书文件和压缩后的文件重构原始图像。
(1)准备工作
a.用matlab生成.img图像
clear variables;
filename='**';
im=imread(filename);
im=rgb2gray(im);
f=fopen([filename(1:end-4) '.img'],'wb');
for i=1:size(im,2)
for j=1:size(im,1)
fwrite(f,im(j,i),'uint8');
end
end
fclose(f);
(2