哈夫曼编码图像压缩Matlab
时间: 2023-11-24 13:50:07 浏览: 40
用哈夫曼编码实现图像压缩的步骤如下:
1. 读入图像并将其转换为灰度图像。
2. 将灰度图像转换为一维向量,并计算各灰度级符号的概率。
3. 根据灰度级和概率数组生成Huffman字典。
4. 对一维向量进行哈夫曼编码。
5. 对编码后的数据进行哈夫曼解码,并将解码后的向量转换为图像块。
6. 显示原始图像和解码后的图像,并计算压缩率。
下面是Matlab代码实现:
```matlab
clear; clc; close all;
A = imread('as3.jpg');
I = rgb2gray(A); % 将彩色图像转为灰度图像
[M, N] = size(I); % 将图像转为二维矩阵
I1 = I(:); % 转为一维向量
P = zeros(1, 256); % 获取各符号的概率
for i = 0:255
P(i+1) = length(find(I1 == i))/(M*N);
end
k = 0:255;
dict = huffmandict(k, P); % 根据灰度级k和概率数组P生成Huffman字典
enco = huffmanenco(I1, 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('解码图像');
B = length(enco); % 原始图像比特长度
sumcode = length(deco); % 编码后比特长度
CR = sumcode/B; % 计算压缩率
disp(['原始图像 Bit: ', num2str(B), ' bit']);
disp(['压缩图像 Bit: ', num2str(sumcode), ' bit']);
disp(['压缩率: ', num2str(CR)]);
```