哈夫曼编码图像压缩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)]);
说明:
huffmandict函数建立哈夫曼字典:需要传入的第一个参数是图像的各个灰度值,第二个参数是图像的各个灰度值的出现概率。
调用格式:
huffmanenco函数建立哈夫曼编码:需要传入的第一个参数是图像的一维矢量数据,第二个参数是dict哈夫曼字典。
调用格式:
huffmandeco函数进行哈夫曼译码:需要传入的第一个参数是哈夫曼编码数据,第二个参数是哈夫曼字典。
调用格式: