1
基于MATLAB的数字图像处理研究
1.6.4 4.4 无损压缩

4.4 无损压缩

无损压缩方法的优点是能够比较好地保存图像的质量,但是相对有损压缩来说这种方法的压缩率是比较低的。无损图像压缩的方法有:

(1)行程长度编码。RLE(Run-Length Encoding,行程长度编码)压缩算法是Windows系统中使用的一种图像文件压缩方法。其基本思想是:将一扫描行中颜色值相同的相邻像素用两个字节来表示,第一个字节是一个计数值,用于指定像素重复的次数,第二个字节是具体像素的值。主要通过压缩除掉数据中的冗余字节或字节中的冗余位,从而达到减少文件所占空间的目的。例如,有一表示颜色像素值的字符串RRRRRGGBBBBBB,用RLE压缩方法压缩后可用5R2G6B来代替,显然后者的串长度比前者的串长度小得多。译码时按照与编码时采用的相同规则进行,还原后得到的数据与压缩前的数据完全相同。因此,RLE是无损压缩技术。

如下程序是把一幅图像(图4-1)不同行程的起始坐标和灰度值都记录下来,保存在数组e中,程序代码如下:

f=imread('saturn.jpg');

imshow(f);

[m,n]=size(f);

c=f(1,1);

e(1,1)=1;

e(1,2)=1;

e(1,3)=c;

t=2;

for k=1:m;

for j=1:n;

if(not(and(k==1,j==1)));

if(not(f(k,j)==c));

e(t,1)=k;e(t,2)=j;e(t,3)=f(k,j);

c=f(k,j);

t=t+1;

end。

img94

图4-1

(2)熵编码法。EE(Entropy Encoding,熵编码法)是一种进行无损失数据压缩的技术,在这个技术中一段文字中的每个字母被一段不同长度的比特(Bit)所代替。与此相对的是LZ77或者LZ78等数据压缩方法,在这些方法中原文的一段字母列被其他字母取代。要使得所有的字母可以在压缩后互相区别需要一定数量的比特,因此每个字母被取代的比特数不能无限小。每个字母按照其出现的可能性所获得的最佳比特数取决于熵。一般熵编码器与其他编码器联合使用。常见的Zip和Bzip格式文件的最后一级编码也是熵编码。

哈夫曼编码是一种典型的熵编码法。为了实现构建在哈夫曼编码中的压缩,对于产生代码的符号,不管它们是灰度级、游程长度或其他灰度映射操作的输出,都必须依照生成的代码对其进行变换或映射。MATLAB图像处理工具箱中提供了哈夫曼编码函数mat2huff(),在work目录下,调用mat2huff.p、imratio.p和huffman.p函数,对图4-2进行压缩,并存储到磁盘中,程序代码如下:

f=imread('a.jpg');

imshow(f);

g1=mat2huff(f);

h=imratio(f,g);

save SqueezeTracy g;

g2=imratio('a.jpg','SqueezeTracy.mat')。

img95

图4-2