哈夫曼编码图像压缩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)]);

哈夫曼编码图像压缩Matlab_第1张图片
哈夫曼编码图像压缩Matlab_第2张图片
说明:
huffmandict函数建立哈夫曼字典:需要传入的第一个参数是图像的各个灰度值,第二个参数是图像的各个灰度值的出现概率。
调用格式:
在这里插入图片描述
huffmanenco函数建立哈夫曼编码:需要传入的第一个参数是图像的一维矢量数据,第二个参数是dict哈夫曼字典。
调用格式:
在这里插入图片描述
huffmandeco函数进行哈夫曼译码:需要传入的第一个参数是哈夫曼编码数据,第二个参数是哈夫曼字典。
调用格式:
在这里插入图片描述

你可能感兴趣的:(matlab,开发语言)