基于LBG的矢量量化图像压缩编码实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于LBG 的矢量量化图像压缩编码实验
一、实验原理
矢量量化:
要想得到好的性能编码,仅采用标量量化是不可能的。
当把多个信源符号
联合起来形成多维矢量,再对矢量进行标量量化时自由度将更大,同样的失真下,量化基数可进一步减少,码率可进一步压缩。
这种量化叫矢量量化。
应用:
在航天、军事、气象、医学、多媒体等领域中经常需要大量存储和传输各种静态图像和视频图像。
为了提高传输效率和减少存储空间,必须采取有效的压缩编码算法消除图像中所包含的各种冗余信息并在给定的失真条件下使用尽量少的比特数来描述图像。
矢量量化(VQ)作为一种有效的有损压缩技术,其突出优点是压缩比大以及解码算法简单,因此它已经成为图像压缩编码的重要技术之一。
矢量量化压缩技术的应用领域非常广阔,如军事部门和气象部门的卫星(或航天飞机)遥感照片的压缩编码和实时传输、雷达图像和军用地图的存储与传输、数字电视和DVD 的视频压缩、医学图像的压缩与存储、网络化测试数据的压缩和传输、语音编码、图像识别和语音识别等等。
LGB 算法:
一种有效和直观的矢量量化码书设计算法——LBG 算法(也叫GLA 算法)是由Linde 、Buzo 和Gray 于1980年首先提出来的。
该算法基于最佳矢量量化器设计的最佳划分和最佳码书这两个必要条件,且是Lloyd 算法在矢量空间的推广,其特点为物理概念清晰、算法理论严密及算法实现容易。
设训练矢量集为{}110,,,-=M x x x X ,待产生的码书为{}110,,,-=N y y y C ,其中{})1(10,,,-=k i i i i x x x x ,{})1(10,,,-=k j j j j y y y y ,10,10-≤≤-≤≤N j M i ,则码书设计过程就是需求把训练矢量集X 分成N 个子集)1,,1,0(-=N j S j 的一种最佳聚类方案,而子集j S 的质心矢量j y 作为码字。
假设平方误差测度用来表征训练矢量i x 和码字j y 之间的失真,即:
∑-=-=1
2)(),(k l jl il j i y x y x d
则码书设计的准则可用下列数学形式表达: 最小化 ∑∑-=-==101
0),(),,(N j M i j i ij y x d w C X W f
约束条件
∑-==1
1N j ij
w
,10-≤≤M i
其中W 为N M ⨯矩阵,其元素满足:
⎩
⎨⎧=01
ij w j i j i S x S x ∉∈
矩阵W 可看作训练矢量的聚类结果。
根据W ,可计算码字:
∑-==
10
1
M i i ij
j
j x w
S y
其中 j S 代表子集j S 中训练矢量的数目,或者说是矩阵W 第1+j 行
)1,,1,0,(-=M i w ij 中非零元素的数目。
针对训练矢量集为{}110,,,-=M x x x X ,其LBG 算法的具体步骤如下:
步骤1:给定初始码书{})
0(1)0(1)0(0)0(,,,-=N y y y C ,令迭代次数0=n ,平均失真
∞→-)1(D ,给定相对误差门限)10(<<εε。
步骤2:用码书)(n C 中的各码字作为质心,根据最佳划分原则把训练矢量集
X 划分为N 个胞腔{})(1)(1)(0)(,,,n N n n n S S S S -= ,)
(n i
S 满足 {}
X v y v d y v d v S n j N j n i n i ∈==-≤≤),,(min ),(|)(1
0)()(
步骤3:计算平均失真 ∑
-=-≤≤=1
)(1
0)
(),(min 1
M i n j i N j n y x d M
D
判断相对误差是否满足
ε≤--)()()1(/)(n n n D D D
若满足,则停止算法,码书)(n C 就是所求的码书。
否则,转步骤4。
步骤4:根据最佳码书条件,计算各胞腔的质心,即
∑
∈+=
)
()()1(1n i S v n i
n i v S
y
由这N 个新质心1,,1,0,)1(-=+N i y n i 形成新码书)(n C ,置1+=n n ,转步骤2。
二、实验目的
采用矢量量化算法(LBG )获得图像压缩所需要的码书,通过码书实现图像压缩编码。
三、实验内容 对给定的一幅图片
四、实验步骤
(1) 对训练图片,采用LBG 算法获取最佳码书设计; (2) 采用熵编码实现图像索引编号的压缩。
五、程序代码
clear all;
data=imread('cameraman.tif'); %调入原始图像 data=double(data)/255; %归一化
[m,n]=size(data); %求出图像的行数和列数 figure(1) subplot(1,2,1);
imshow(data); %显示原始图像 title('原始图像') subplot(1,2,2);
imhist(data);
title('直方图')
siz_word=4; %设置码字的大小siz_book=512; %设置码书的大小data1=zeros(m*n,1);
for i=1:m
for j=1:n
data1((i-1)*n+j)=data(i,j);
end
end
M1=floor(m*n/siz_word);
r=mod(m*n,siz_word);
if r>0
M1=M1+1;
end
data2=zeros(M1,siz_word);
l=1;
A=zeros(siz_word,1);
r=1;
for i=1:m*n
A(r)=data1(i);
if r==siz_word
data2(l,:)=A;
l=l+1;
r=1;
else
r=r+1;
end
end
code_book=zeros(siz_book,siz_word); %LBG算法开始
%初始化码书
l=1;
r=1;
A=zeros(siz_word,1);
for i=1:siz_book*siz_word
A(r)=data1(i);
if r==siz_word
code_book(l,:)=A;
l=l+1;
r=1;
else
r=r+1;
end
end
MIU=zeros(M1,siz_book);
t=1;
while t==1
for i=1:M1
B=zeros(siz_word,1);
B=data2(i,:);
A=zeros(siz_word,1);
A=code_book(1,:);
tep=0.0;
for l=1:siz_word
tep=tep+(A(l)-B(l))^2;
end
r=1;
for j=2:siz_book
A=code_book(j,:);
temp=sum((A-B).^2);
if temp<tep
r=j;
tep=temp;
end
end
MIU(i,r)=1.0;
end
t=0;
code_book1=zeros(siz_book,siz_word);
for j=1:siz_book
for l=1:siz_word
tep=0.0;
for i=1:M1
code_book1(j,l)=code_book1(j,l)+MIU(i,j)*data2(i,l);
tep=tep+MIU(i,j);
end
if tep>0
code_book1(j,l)=code_book1(j,l)/tep;
else
code_book1(j,l)=0.0;
end
end
end
tep=0.0;
for j=1:siz_book
for l=1:siz_word
tep=tep+(code_book1(j,l)-code_book(j,l))^2;
end
end
if tep/siz_book<0.000001
t=0;
end
code_book=code_book1;
end
%编码后图像恢复过程
data3=zeros(M1,siz_word);
for i=1:M1
for j=1:siz_book
if MIU(i,j)==1
t=j;
end
end
data3(i,:)=code_book(t,:);
end
data5=zeros(m,n);
for i=1:m
for j=1:n
tep=(i-1)*n+j;
i1=floor(tep/siz_word);
if i1==0
i1=1;
end
j1=mod(tep,siz_word);
if j1==0
j1=siz_word;
end
data5(i,j)=floor(data3(i1,j1)*255);
end
end
figure(2)
imshow(uint8(data5)); %显示恢复图像title('矢量量化编码后恢复的图像')
六、运行结果
siz_book=512
当把码书的大小改为siz_book=256时,图片明显比码书为512时模糊,因为此时所分的区间更大,导致图片解码时不精确度加大
siz_book=256
然而当siz_book=1024时,与siz_book=512时的矢量量化后的图片变换很小,很难用眼睛区分开来,这说明影响图片质量的主要因素不是码书的大小了,而是码字的大小,或者其他的因素,导致图片解码后的不够清晰。
同时码字的大小也对矢量量化编码的影响较大,当码字比小时,图片的轮廓更加清晰,而码字变大时,图片编码后更加模糊。