【图像压缩】基于行程编码实现图像压缩附matlab代码

1 简介

 编码是方法建立在图像统计特性的基础上的。例如,在传真通信中的文件大多是二值图像,即每个像素的灰度值只有0和1两种取值。将一行中颜色值相同的相邻象素用一个计数值和该颜色值来代替。例如aaabccccccddeee可以表示为3a1b6c2d3e,,即有3个a,1个b,6个c,2个d,3个e。如果一幅图象是由很多块颜色相同的大面积区域组成,那么采用行程编码的压缩效率是惊人的。然而,该算法也导致了一个致命弱点,如果图象中每两个相邻点的颜色都不同,用这种算法不但不能压缩,反而数据量增加一倍。因此对有大面积色块的图像用行程编码效果比较好。

行程编码的可行性讨论:行程编码的压缩方法对于自然图片来说是不太可行的,因为自然图片像素点错综复杂,同色像素连续性差,如果硬要用行程编码方法来编码就适得其反,图像体积不但没减少,反而加倍。鉴于计算机桌面图,图像的色块大,同色像素点连续较多,所以行程编码对于计算机桌面图像来说是一种较好的编码方法。

​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的相应行中    endend%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%输出相关数据[m1,n1,l1]=size(Y);disp('原图像大小:')whos('I');disp('压缩图像大小:')whos('Y');disp('图像的压缩比:');disp(m*n*l/sum);%将编码写入yc.txt中for k=1:l1     for i=1:m1        for j=1:col(i,k)    fprintf(fid,'%d',Y(i,j,k));     fwrite(fid,' ');        end      end    fwrite(fid,' ');end     subplot(1,2,1),imshow(I), title('原图像')       subplot(1,2,2),imshow(Y),title('行程编码解码后的图像')save('Y')%存储,以便解码用save('col')fclose(fid)

3 仿真结果

4 参考文献

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

matlab科研助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值