原理跟哈夫曼编码的一样。
huffmandict函数建立哈夫曼字典:需要传入的第一个参数是图像的各个灰度值,第二个参数是图像的各个灰度值的出现概率。
huffmanenco函数建立哈夫曼编码:需要传入的第一个参数是图像的一维矢量数据,第二个参数是dict哈夫曼字典。
huffmandeco函数进行哈夫曼译码:需要传入的第一个参数是哈夫曼编码数据,第二个参数是哈夫曼字典。
哈夫曼编码的实现代码如下:
clc; clear; close all;
%% 图像转灰度
I = imread('111.jpg'); %这里是你要读入的图像
I = imresize(I,0.1); %将图像大小缩小(可以不缩小,但是用matlab进行编译会花很长时间)
I = rgb2gray(I);
[M,N]= size(I); %将读取的图像转为二维矩阵
SIG=I(:); %转为一维向量
T= imhist(I)'; %灰度直方图
TRatio = T/sum(T); %每一个灰度出现比率
TRatioNO = find(TRatio~=-1);%给存在的灰度编号
%% 哈夫曼编码
dict = huffmandict(TRatioNO,TRatio); %哈夫曼取字典函数
hcode = huffmanenco(SIG,dict); %哈夫曼编码
dhsig = huffmandeco(hcode,dict); %哈夫曼译码
isequal(SIG,dhsig) %对比数值 返回1说明压缩解压成功