【图像压缩】基于matlab行程编码之图像压缩【含Matlab源码 404期】

68 阅读4分钟

一、简介

1、行程编码概述(RLE)
在图像压缩上,行程编码(RLE)一般用于压缩二值化图像,因为它是基于重复的压缩算法,比如:

二维图像降维后(压缩前):0 0 0 0 0 255 255 255 0 0 255
行程编码压缩后:5 0 3 255 2 0 1 255
(压缩格式为:数量+像素+数量+像素…)

如果有大量的像素连续重复,那么压缩率会更高。
编码是方法建立在图像统计特性的基础上的。例如,在传真通信中的文件大多是二值图像,即每个像素的灰度值只有0和1两种取值。将一行中颜色值相同的相邻象素用一个计数值和该颜色值来代替。例如aaabccccccddeee可以表示为3a1b6c2d3e,,即有3个a,1个b,6个c,2个d,3个e。如果一幅图象是由很多块颜色相同的大面积区域组成,那么采用行程编码的压缩效率是惊人的。然而,该算法也导致了一个致命弱点,如果图象中每两个相邻点的颜色都不同,用这种算法不但不能压缩,反而数据量增加一倍。因此对有大面积色块的图像用行程编码效果比较好。
行程编码的可行性讨论:行程编码的压缩方法对于自然图片来说是不太可行的,因为自然图片像素点错综复杂,同色像素连续性差,如果硬要用行程编码方法来编码就适得其反,图像体积不但没减少,反而加倍。鉴于计算机桌面图,图像的色块大,同色像素点连续较多,所以行程编码对于计算机桌面图像来说是一种较好的编码方法。
2 图像压缩
2.1 图像压缩:图像压缩就是对图像数据按照一定的规则进行变换和组合,用尽可能少的数据量来表示影像,形象的说,就是对影像数据的瘦身。

2.2 图像压缩的必要性:多媒体数据的显著特点就是数据量非常大。例如,一张彩色相片的数据量可达10MB;视频影像和声音由于连续播放,数据量更加庞大。这对计算机的存储以及网络传输都造成了极大的负担。

2.3 图像压缩的可行性:
1)原始图像数据是高度相关的,存在很大的冗余。数据冗余造成比特数浪费,消除这些冗余可以节约码字,也就是达到了数据压缩的目的。大多数图像内相邻像素之间有较大的相关性,这称为空间冗余。序列图像前后帧内相邻之间有较大的相关性,这称为时间冗余。

2)若用相同码长来表示不同出现概率的符号也会造成比特数的浪费,这种浪费称为符号编码冗余。如果采用可变长编码技术,对出现概率高的符号用短码字表示,对出现概率低的符号用长码字表示,这样就可大大消除符号编码冗余。再次,有些图像信息(如色度信息、高频信息)在通常的视感觉过程中与另外一些信息相比来说不那么重要,这些信息可以认为是心里视觉冗余,去除这些信息并不会明显地降低人眼所感受到的图像质量,因此在压缩的过程中可以去除这些人眼不敏感的信息,从而实现数据压缩。

二、源代码

function yc
%%行程编码算法
%例如aaabccccccddeee才可以表示为3a1b6c2d3e
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%读图
I=imread('Lena.jpg');
[m n l]=size(I);
fid=fopen('yc.txt','w');
%yc.txt是行程编码算法的灰度级及其相应的编码表
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%行程编码算法

sum=0;
for k=1:l 
    for i=1:m
        num=0;
         J=[];
         value=I(i,1,k);
        for j=2:n
            if I(i,j,k)==value
                num=num+1;
%统计相邻像素灰度级相等的个数
                if j==n
                     J=[J,num,value];
                end
            else J=[J,num,value];
%J的形式是先是灰度的个数及该灰度的值
                value=I(i,j,k);
            num=1;
            end
        end
        col(i,k)=size(J,2);
%记录Y中每行行程行程编码数
        sum=sum+col(i,k);
        Y(i,1:col(i,k),k)=J;
%将I中每一行的行程编码J存入Y的相应行中
    end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%输出相关数据
[m1,n1,l1]=size(Y);
disp('原图像大小:')
whos('I');
disp('压缩图像大小:')
whos('Y');
disp('图像的压缩比:');
disp(m*n*l/sum);

三、运行结果

在这里插入图片描述
在这里插入图片描述

四、备注

版本:2014a