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

举报
海神之光 发表于 2022/05/29 02:34:23 2022/05/29
【摘要】 一、简介 1 行程编码概述(RLE) 在图像压缩上,行程编码(RLE)一般用于压缩二值化图像,因为它是基于重复的压缩算法,比如: 二维图像降维后(压缩前):0 0 0 0 0 255 255 255 0...

一、简介

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);

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47

三、运行结果

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

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.

文章来源: qq912100926.blog.csdn.net,作者:海神之光,版权归原作者所有,如需转载,请联系作者。

原文链接:qq912100926.blog.csdn.net/article/details/114127461

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。