【图像压缩】基于行程编码实现图像压缩附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 仿真结果

【图像压缩】基于行程编码实现图像压缩附matlab代码_第1张图片

【图像压缩】基于行程编码实现图像压缩附matlab代码_第2张图片

4 参考文献

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

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

你可能感兴趣的:(图像处理,matlab)