图像处理压缩Huffman编码方法实现

图像压缩所解决的主要问题是尽量减少表示数字图像时所需要的数据量。减少数据量的基本原理是去除其中多余的数据。本博客将给定的图像进行压缩处理,使Huffman编码方法,并计算压缩比,分析图像压缩后的视觉效果。

一、主要设计思想

首先将彩色图像灰度化,转化为单通道灰度图像。然后对每个像素对应的灰度级进行统计,以及对应的编码记录存放在像素数组中,接着把像素数组中的灰度像素个数从大到小进行排序,建立Huffman解码矩阵计算出灰度级最小两位像素个数的和,对图像灰度统计数据按Huffman算法编码,输出图像前通过解码矩阵对图像进行解码,最后,输出解码后的图像与原图相对比并计算图像压缩比。

二、实现算法及程序流程图

Huffman-process

三、源程序

I=imread('D:/pic/baby.jpg');% 读取测试图像

I =rgb2gray(I);% 转化为灰度图像

[m,n]=size(I);
len=m*n;
S = zeros(1,256);
In = I(:);
% 获取各符号的概率
for p=0:255;
    j=find(i==p);
    S(p+1)=length(j)/(len);
end

t = 0:255;
dict = huffmandict(t,S); %生成字典
enco = huffmanenco(In,dict); %编码
deco = huffmandeco(enco,dict); %解码
Ide = col2im(deco,[m,n],[m,n],'distinct'); %把向量重新转换成图像块;


subplot(1,2,1);
imshow(I);title('原始图像');
subplot(1,2,2);
imshow(uint8(Ide));title('压缩后的图像');

fprintf("图像的压缩比: %f\n", 1-size(enco)/8/size(deco)) %将编码后的数值看作二进制后进行计算

四、主要技术问题的处理方法

对一般尺寸的彩色图像,输入的图像是维数阶数较高的矩阵,按照Huffman编码的计算方法耗时会长,所以先将图像转化为单通道灰度图像,这样就不用对R、G、B三个通道进行处理。在视觉效果上两幅图像基本看不出差别,但是运算速度不够理想。

五、实验结果及分析

Huffman-result
图像的压缩比:0.142416

从RGB三通道转化为单通道灰度图像,速度有提升,但不明显。Huffman算法是无损压缩,解码效果来看,两幅图像基本无差别。但是运算速度不够理想,按照Huffman编码这种统计算法耗时比较长,算法有待进一步改进。

  • 6
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

极客范儿

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

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

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

打赏作者

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

抵扣说明:

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

余额充值