哈夫曼编码图像压缩MATLAB代码
时间: 2023-09-21 19:06:53 浏览: 130
以下是使用哈夫曼编码进行图像压缩的 MATLAB 代码:
```matlab
% 读入图像
I = imread('image.jpg');
% 将图像转换为灰度图像
if (size(I,3)==3)
I = rgb2gray(I);
end
% 将灰度值转换为 8 位二进制数
Ibin = dec2bin(I, 8);
% 统计每个二进制数的出现次数
counts = zeros(1,256);
for i=1:size(Ibin,1)
for j=1:size(Ibin,2)
counts(bin2dec(Ibin(i,j,:))+1) = counts(bin2dec(Ibin(i,j,:))+1) + 1;
end
end
% 构建哈夫曼树
symbols = cell(1,256);
for i=1:256
symbols{i} = dec2bin(i-1, 8);
end
dict = huffmandict(symbols, counts);
% 使用哈夫曼编码压缩图像
Icomp = huffmanenco(Ibin(:), dict);
% 计算压缩比
comp_ratio = length(Icomp)/(size(I,1)*size(I,2)*8);
% 解压缩图像
Idec = huffmandeco(Icomp, dict);
% 将二进制数转换为灰度值
Idec = reshape(Idec, size(Ibin));
Idec = bin2dec(Idec);
% 将灰度图像转换为彩色图像
if (size(I,3)==3)
Icomp = reshape(Idec, size(I,1), size(I,2));
else
Icomp = reshape(Idec, size(I,1), size(I,2), 1);
end
% 显示图像和压缩比
figure;
imshow(Icomp);
title(sprintf('Compression Ratio: %f', comp_ratio));
```
在代码中,首先读入图像并将其转换为灰度图像。然后将每个像素的灰度值转换为 8 位二进制数,并统计每个二进制数的出现次数。接着,使用 `huffmandict` 函数构建哈夫曼树,并使用 `huffmanenco` 函数将图像数据压缩成一串二进制数。计算压缩比后,使用 `huffmandeco` 函数将压缩后的二进制数解码,并将二进制数转换为灰度值。最后,如果原图像是彩色图像,则将解压缩后的灰度图像转换为彩色图像并显示。
阅读全文