资源简介
哈夫曼编码(Huffman Coding),是一种熵编码方式,哈夫曼编码是可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫做Huffman编码(有时也称为霍夫曼编码)。
本实验实现了如下功能:
(1)产生[0 255]范围内均匀分布、正态分布、拉普拉斯分布的三组离散随机整数。每组数据个数为 1920×1080,并对这三组数据分别进行哈夫曼编码和解码。计算熵和码字的平均码长。
(2)将彩色图像的像素 R、G、B 值作为独立符号,进行哈夫曼编码和解码,计算熵和码字平均码长。
(3)将彩色图像的像素 R、G、B 值作为联合符号,进行哈夫曼编码和解码,计算熵和码字的平均码长。
代码片段和文件信息
function [symbcodewordlengcodeent] = Huffman_code(I)
%% -----------------------------------------------
% EXPLAIN: 对图像进行编码的主要程序,编码程序的子函数
%
% INPUT: I为输入图像
%
% OUTPUT: symb为字符表,codeword为编码表lengcode为码字均长ent为熵值;
%
% AUTHOR:Yang Hao
% DATE: 2019/5/2
%% -----------------------------------------------
sta = tabulate(I(:))‘;% 统计概率
sta(:find(sta(2:)==0))=[];%删除概率为0的列
symb = sta(1:);% 出现符号
freq = sta(3:)/100;% 统计得到的概率,统计值扩大了100倍,所以需要除100
[freqsortindex] = sort(freq);%将符号按照出现的概率从小到大排序,并位置索引
f = freq;%保存初始排序后的概率向量,方便后续统计计算
symb = symb(sortindex)‘; %按概率排序的符号
L = length(freq);%字符的个数
% 创建一个元胞数组存放建立Huffman树过程中的排序变化情况,其第i个元素值代表代表当前排在第i位的所有字符的索引
ind_symb = num2cell(1:L);
codeword = cell(L1);% 创建一个L行1列的元胞型变量用于存放码字
% 大于一个字符开始编码
while length(freq) > 1
index0 = ind_symb{1};
index1 = ind_symb{2};
codeword = addcode(codewordindex0‘0‘);%ind_symb第一个元素代表的所有字符的编码再左侧添加码字‘0’
codeword = addcode(codewordindex1‘1‘);%ind_symb第二个元素代表的所有字符的编码再左侧添加码字‘1’
freq = [sum(freq(1:2)) freq(3:end)];%将前两个概率相加得到新的概率向量
ind_symb = {[ind_symb{1}ind_symb{2}]ind_symb{3:end}};%将前两个索引合并新的索引
[freqsortindex] = sort(freq);%将符号按照出现的概率从小到大排序,并记录位置索引
ind_symb = ind_symb(sortindex); %按概率排序的符号索引
end
% 计算平均码长和熵
lengcode = 0;
ent = 0;
for i = 1:length(codeword)
lengcode = lengcode+length(codeword{i})*f(i);
ent = ent-f(i)*log2(f(i));
end
end
function codeword = addcode(codewordindexitem)
%% -----------------------------------------------
% EXPLAIN: 添加码字的函数,Huffman_code的子函数
%
% INPUT: codewoed为当前编码表,index为需要修改码字的索引,item为需要增加的码字
%
% OUTPUT: 新的编码表
%% -----------------------------------------------
l=length(index);
for i=1:l
codeword{index(i)}=[itemcodeword{index(i)}];%在原码字的左侧添加码字item
end
end
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2019-05-23 10:54 哈夫曼编码算法的仿真和比较\
文件 2074678 2019-05-04 19:59 哈夫曼编码算法的仿真和比较\A_均匀分布.bmp
文件 3536 2019-05-04 20:04 哈夫曼编码算法的仿真和比较\A_均匀分布_哈夫曼编码字典.txt
文件 2073600 2019-05-04 20:06 哈夫曼编码算法的仿真和比较\A_均匀分布_哈夫曼编码文件.bin
文件 2074678 2019-05-04 21:24 哈夫曼编码算法的仿真和比较\A_均匀分布_哈夫曼编码文件_解压缩文件.bmp
文件 6220856 2019-05-03 19:06 哈夫曼编码算法的仿真和比较\Flower.bmp
文件 2213 2019-05-05 20:02 哈夫曼编码算法的仿真和比较\Huffman_code.m
文件 2413 2019-05-23 09:46 哈夫曼编码算法的仿真和比较\Huffman_code_main.m
文件 2137 2019-05-23 09:47 哈夫曼编码算法的仿真和比较\Huffman_decode.m
文件 6220856 2019-05-03 18:44 哈夫曼编码算法的仿真和比较\Lena.bmp
文件 529 2019-05-05 20:18 哈夫曼编码算法的仿真和比较\random_data.m
文件 6220856 2019-05-03 18:45 哈夫曼编码算法的仿真和比较\Sky.bmp
相关资源
- 精通matlab最优化计算 第二版
- 冈萨雷斯 《数字图像处理matlab版》
- ORB遥感全景图像拼接.rar
- Matlab在FPGA中的应用书+光盘
- PLDA模型训练matlab代码
- MATLAB图像处理详解.pdf清晰版
- MATLAB 7 界面设计与编译技巧
- 电力电子技术的MATLAB实践
- simulation_and_software_radio_for_mobile_commu
- 数学建模_医院投入产出效率_matlab包络
- export_fig
- hogcascade训练,内有人头训练样本和使
- 《MATLAB图像与视频处理实用案例详解
-
于群《MATLAB/Simuli
nk电力系统建模与 - MATLAB下的 Superpixel Segmentation using Lin
- Matlab实现感知哈希算法
- 基于MATLAB的电力谐波分析,在有频谱
- 基于Q=Dv的多种交通流模型Matlab绘图
- 疲劳驾驶检测matlab图像处理Code.zip
- matlab包络分析程序
- matlab-矩阵的奇异值分解算法
- 数字通信同步技术的MATLAB与FPGA实现—
- FCT(Fast Compress Tracking)目标跟踪程序
- 数字图像处理常用测试图片part3
- matlab数值计算中文版pdf
- dsp开发matlab代码直接生成
- matlab深度学习工具箱254438
- Orbital Mechanics for Engineering Students Thi
- 鲁棒 matlab
- 电机原理与设计的MATLAB分析
评论
共有 条评论