文档库 最新最全的文档下载
当前位置:文档库 › 图像霍夫曼编码与解码以及熵-平均码长-冗余度的计算

图像霍夫曼编码与解码以及熵-平均码长-冗余度的计算

图像霍夫曼编码与解码以及熵-平均码长-冗余度的计算
图像霍夫曼编码与解码以及熵-平均码长-冗余度的计算

DIP上机报告

题目:数字图像处理上机报告(第4次)学校:中国地质大学(武汉)

指导老师:傅华明

姓名:龙勋

班级序号: 071112-06

目录

1图像霍夫曼编码与解码以及熵,平均码长,冗余度的计算错误!未定义书签。2上机小结 (10)

注:给定的文件夹中只需运行test脚本就可以得到结果,从workspace

中看到相应的数据

4.2图像的霍夫曼编码与解码

题目要求:

对图2实施哈夫曼编码和解码,计算图象熵,平均码长和冗余度;

算法设计:

1.遍历图像,统计各个像素灰度值的概率

2.找出概率最小的两个,在最小概率所代表的灰度值编码中加1,在另一个较小的概率所代表的灰度值编码中加0

3.合并两个概率,成为一个新的元素,如此重复下去,直到最后剩两个元素

4.进行编码的逆过程,即解码过程

5.计算相应的数据

程序代码:

运行代码:

clear

in=[2,2,3,5,0,0,5,5,

5,4,1,1,2,2,1,5,

4,6,5,5,7,2,2,3,

5,2,2,2,3,4,4,4,

6,2,1,4,1,1,2,2,

1,5,7,6,5,5,7,2,

2,4,4,1,2,2,1,5,

2,3,1,2,2,1,5,0];

[p,out] = gailv( in );

[code] = Huffman(0:7,p); %进行霍夫曼编码

[Coded_Img]=Encode(in,code); %对图像进行编码

[H,L,R]=GetInfo(code); %计算熵、平均码长、冗余度[Img]=Decode(Coded_Img,code); %对图像进行解码

图像各像素灰度的概率计算:

function[ p,out ]=gailv( in )

[M,N]=size(in);

out = zeros(4,8);

p = zeros(1,8);

for i=1:8

out(1,i)=i-1;

end

for i=1:M

for j=1:N

for k=1:8

if in(i,j) == out(1,k)

out(2,k)=out(2,k)+1;

end

end

end

end

for i=1:8

out(3,i)=out(2,i)/(M*N);

p(1,i)=out(2,i)/(M*N);

end

end

霍夫曼编码过程:

function [code_out] = Huffman(s,p)

[Ms,Ns]=size(s);

if (Ms==1)

sig=s';

else

sig=s;

end

%s为各元素名称 p为各元素概率

[Ms,Ns]=size(sig);

[Mp,Np]=size(p);

if (Ms~=Np)

return;

end

code=cell(Ms,4);%建立编码cell

code_out=cell(Ms,3);%建立输出cell

coding=cell(Ms,2);%建立编码过程中用到的cell

for i=1:Ms

code{i,1}=sig(i,:);%第一列为元素名称

code{i,2}=[];%第二列为编码

code{i,3}=p(i);%第三列为元素概率

code{i,4}=[];%第四列为元素概率排行

coding{i,1}=p(i);%第一行为元素概率

coding{i,2}=i;%第二行表示此概率由哪些元素组成

end

[m,l]=Cell_min(coding(:,1));%找出最小值

while (m<1)%若最小值小于1(编码尚未完成)

[m1,l1]=Cell_min(coding(:,1));%找出最小值

temp_p=coding{l1,1};%记录下最小概率

coding{l1,1}=2;%将概率改为2,则以后不会再次取到

[m2,l2]=Cell_min(coding(:,1));%找出次小值

coding{l2,1}=coding{l2,1}+temp_p;%最小概率和次小概率相加得到新元素概率

[k,mp]=size(coding{l1,2});%考虑最小概率包含了哪些元素

for i=1:mp

code{coding{l1,2}(i),2}=[1,code{coding{l1,2}(i),2}];%在这些元素的编码前加1

end

[k,mp]=size(coding{l2,2});%考虑次小概率包含了哪些元素

for i=1:mp

code{coding{l2,2}(i),2}=[0,code{coding{l2,2}(i),2}];%在这些元素的编码前加0

end

coding{l2,2}=[coding{l2,2},coding{l1,2}];%新元素包含了次小和最小元素包含的所有元素

[m,l]=Cell_min(coding(:,1));%找出当前最小值,继续循环

end

for i=1:Ms

code_out(i,1:3)=code(i,1:3);%输出cell前3列等于编码cell前3列end

求概率的最小值函数:

function [mind,loc]=Cell_min(data)

%找出cell中的某列元素的最小值和位置

[M,N]=size(data);

loc=-1;

for i=1:M

d(i)=data{i}(1,1);

end

turemin=min(d);%找出最小值

for i=1:M %遍历矩阵,找出最小值所在位置

if (d(i)==turemin)

mind=d(i);

loc=i;

return;

end

end

end

图像编码代码:

function [Coded_Img]=Encode(img,code)

%遍历图像,查表确定码字

[M,N]=size(img);

[Mc,Nc]=size(code);

Coded_Img=cell(M,N);

for i=1:M

for j=1:N

data=img(i,j);

for k=1:Mc

if (code{k,1}==data)

Coded_Img{i,j}=code{k,2};

end

end

end

end

end

图像解码代码:

function [img]=Decode(Coded_Img,code)

%遍历编码图像,查表确定数值

[M,N]=size(Coded_Img);

[Mc,Nc]=size(code);

for i=1:M

for j=1:N

data=Coded_Img{i,j};

for k=1:Mc

if(size(data)==size(code{k,2}))

if (code{k,2}==data)

img(i,j)=code{k,1};

end

end

end

end

end

end

相关数据的计算:

function [H,L,R]=GetInfo(code)

[M,N]=size(code);

H=0;

for i=1:M

H=H+code{i,3}*log2(1/code{i,3});

end

%计算熵

L=0;

for i=1:M

[m,n]=size(code{i,2});

L=L+code{i,3}*n;

end

%计算平均码长

R=L/H-1;%计算冗余度

end

运行结果:

编码前图像:

编码后图像:

解码后图像:

熵(H)、平均码长(L)、冗余度(R)

至此,成功实现了图像矩阵的编码和解码以及相关参数的计算。

上机小结:

此次试验是对图像的矩阵进行霍夫曼编码和解码,编程的过程并不像平时做题一样很顺利。有很多平时认为很简单的编码过程用程序实现起来比较麻烦,但是也进一步了解到了霍夫曼编码的原理。在这次编程的过程中我还有一个比较棘手的问题没有解决,就是在霍夫曼编码的过程中,由于各个元素的概率是以double型的数据出现的,进行了四舍五入的处理。如果在编码过程中有几个概率都进行了四舍五入的处理,那么在计算它们的和的过程中数据有可能会与真实值有所差异,而这个结果有可能与较大的概率相差很小,那么在编码时系统会自动根据此时概率的大小进行排列,有可能出现错误。所以在计算机处理问题与我们平时做题时还是会有一点区别,这要求我在以后的学习中还要更加深入地感受这一方面。

预测图像编码和解码

题目: 7, 对图象p04-01实施预测编码和解码,并将原图象与解码图象进行方差计算,考察解码后图象的视觉效果。预测模型为: 原理: 预测就是根据过去时刻的样本序列,运用一种模型,预测当前的样本值。预测编码是易于实现的,如差分脉冲编码调制(DPCM )方法。这种方法中,对每一个像素灰度值,都用先前扫描过的像素灰度值去减,求出它们的差值,此差值称为预测误差,预测误差被量化和编码与传送。接收端再将此差值与预测值相加,重建原始图像像素信号。由于量化和传送的仅是误差信号,根据一般扫描图像信号在空间及时间邻域内各像素的相关性,预测误差分布更加集中,即熵值比原来图像小,可用较少的单位像素比特率进行编码,使得图像数据得以压缩。DPCM 系统的基本系统框图如下图所示。 在该系统中,N x 为N t 时刻的亮度取样值。预测器根据N t 时刻之前的样本1x , 2x ,……,1-N x 对N x 作预测,得到预测值'N x 。N x 与'N x 之间的误差为: 'N N N x x e -= 量化器对N e 进行量化得到'N e 。编码器对'N e 进行编码发送。接收端解码时的预测过程与发送端相同,所用预测器亦相同。接收端恢复的输出信号''N x 是N x 的近似值,两者的误差是 ' '''')(N N N N N N N N e e x x e x x x -=-=+-=? 当输入图像信号是模拟信号时,“量化”过程中的信息损失是不可避免的。当N x ?足够小时,输入信号N x 和DPCM 系统的输出信号几乎一致。 其它预测方法还有以下几种: (1)前值预测:用),(y x f 同一行中临近的前一像素预测,即)1,(),(^-=y x f y x f (2)一维预测:用同一行中前面若干像素预测。 (3)二维预测:用几行内像素预测。 (4)三维预测:利用相邻两帧图像信号的相关性预测。 ) ,1(5.0)1,(5.0),(y x f y x f y x f -+- =

霍夫曼编码表

附录二 表1. 传真用的修正霍夫曼编码表 构造码 64 11011 0000001111 960 011010100 0000001110011 128 10010 000011001000 1024 011010101 0000001110100 192 010111 000011001001 1088 011010110 0000001110101 256 0110111 000001011011 1152 011010111 0000001110110 320 00110110 000000110011 1216 011011000 0000001110111 384 00110111 000000110100 1280 011011001 0000001010010 448 01100100 000000110101 1344 011011010 0000001010011 512 01100101 0000001101100 1448 011011011 0000001010100 576 01101000 0000001101101 1472 010011000 0000001010101 640 01100111 0000001001010 1536 010011001 0000001011010 704 011001100 0000001001011 1600 010011010 0000001011011 768 011001101 0000001001100 1664 011000 0000001100100 832 011010010 0000001001101 1728 010011011 0000001100101 896 011010011 0000001110010 EOL 000000000001 000000000001 结尾码 游程长度 白游程编码 黑游程编码 游程长度白游程编码 黑游程编码 0 00110101 0000110111 32 000111011 000001101010 1 000111 010 33 00010010 000001101011 2 0111 11 34 00010011 000011010010 3 1000 10 35 00010100 000011010011 4 1011 011 36 00010101 000011010100 5 1100 0011 37 00010110 000011010101 6 1110 0010 38 00010111 000011010110 7 1111 00011 39 00101000 000011010111 8 10011 000101 40 00101001 000001101100 9 10100 000100 41 00101010 000001101101 10 00111 0000100 42 00101011 000011011010 11 01000 0000101 43 00101100 000011011011 12 001000 0000111 44 00101101 000001010100 13 000011 00000100 45 00000100 000001010101 14 110100 00000111 46 00000101 000001010110 15 110101 000011000 47 00001010 000001010111 16 101010 0000010111 48 00001011 000001100100 17 101011 0000011000 49 01010010 000001100101 18 0100111 0000001000 50 01010011 000001010010 19 0001100 00001100111 51 01010100 000001010011 20 0001000 00001101000 52 01010101 000000100100 21 0010111 00001101100 53 00100100 000000110111 22 0000011 00000110111 54 00100101 000000111000 23 0000100 00000101000 55 01011000 000000100111 24 0101000 00000010111 56 01011001 000000101000 25 0101011 00000011000 57 01011010 000001011000 26 0010011 000011001010 58 01011011 000001011001 27 0100100 000011001011 59 01001010 000000101011 28 0011000 000011001100 60 01001011 000000101100 29 00000010 000011001101 61 00110010 000001011010 30 00000011 000001101000 62 00110011 000001100110 31 00011010 000001101001 63 00110100 000001100111 205

实验一 灰度图像信息熵的相关计算与分析

实验一 灰度图像信息熵的相关计算与分析

一、实验目的 1、复习信息熵,条件熵,联合熵,互信息,相对熵的基本定义, 掌握其计算方法,学习互信息与相对熵的区别之处并比较两者的有效性,加深对所学理论理论知识的理解。 2、掌握图像的的基本处理方法,了解图像的编码原理。 3、学习使用matlab ,掌握matlab 的编程。 4、通过对比分析,。在解决问题的过程中,锻炼自身对问题的研究能力。 二、实验内容与要求 1、计算灰度图像的信息熵,条件熵,联合熵,互信息,相对熵,并比较互信息和相对熵在判别两幅图像的联系与区别。 2、利用matlab 编程计算,并书写完整实验报告。 三、实验原理 1、信息熵 离散随机变量X 的熵H(X)为: ()()log () x H X p x p x χ ∈=-∑ 图像熵是一种特征的统计形式,它反映了图像中平均信息量的多少。图像的一 维熵表示图像中灰度分布的聚集特征所包含的信息量,将图像的灰度值进行数学统计,便可得到每个灰度值出现的次数及概率,则定义灰度图像的一元灰度熵为: 255 log i i i H p p ==-∑ 利用信息熵的计算公式便可计算图像的信息熵,求出任意一个离散信源的熵(平均自信息量)。自信息是一个随机变量,它是指某一信源发出某一消息所含有的信息量。所发出的消息不同,它们所含有的信息量也就不同。任何一个消息的自信息量都代表不了信源所包含的平均自信息量。 信息熵的意义:信源的信息熵H 是从整个信源的统计特性来考虑的。它是从平均意义上来表征信源的总体特性的。对于某特定的信源,其信息熵只有一个。不同的信源因统计特性不同,其熵也不同。 图像的一维熵可以表示图像灰度分布的聚集特征,却不能反映图像灰度分布的空间特征,为了表征这种空间特征,可以在一维熵的基础上引入能够反映灰度分布空间特征的特征量来组成图像的二维熵。选择图像的邻域灰度均值作为灰度分布的空间特征量,与图像的像素灰度组成特征二元组,记为( i, j ),其中i 表示像素的灰度值(0255)i ≤≤,j 表示邻域灰度(0255)j ≤≤, 2 (,)/ij P f i j N =

基于MATLAB的图像Huffman编码研究.docx

中国矿业大学2015-2016学年第二学期 《数字视频技术》课程小设计考核 图像的Huffman编码研究 专业班级:信息13-04班 学生姓名:王振宇、龙航、王一鸣 学生学号:04131407、04131403、04131406 本人郑重声明:本人认真、独立完成了查找资料、完成作业、编写程序等考核任务,无抄袭行为。 签字: 日期:2016.05.17

1.引言 1.1图像数据压缩的目的 数字图像通常要求很大的比特数,这给图像的传输和存储带来相当大的困难。要占用很多的资源,花很高的费用。一般原始图像存在很大的冗余度。所以,对图像数据压缩显得非常重要。 1.2图像数据压缩的原理 对数字图像压缩主要运用两个基本原理:一是图像的相关性。在图像同一相邻像素之间,活动图像的相邻帧的对应像素之间往往存在很强的相关性,去除或减少这些相关性,也就除去或减少图像信息中的冗余度,继而实现对数字图像的压缩。二是人的视觉心理特征,人的视觉对于边缘急剧变化不敏感,对颜色分辨力弱,利用这些特征在相应部分降低编码精度而使人从视觉上感觉不到图像质量的下降,从而达到对数字图像压缩的目的。 1.3Huffman编码 Huffman编码是一种编码方式,是一种用于无损数据压缩的熵编码算法。它是Huffman 在1952年根据Shannon在1948年和Fano在1949年阐述的这种编码思想下提出的一种不定长编码的方法,有时也称之为最佳编码。依据信源数据中各信号出现的频率分配不同长度的编码。其基本思想是在编码过程中,对出现频率越高的值,分配越短的编码长度,相应地对出现频率越低的值则分配较长的编码长度,完全依据字符出现概率来构造异字头的平均长度最短的码字。哈夫曼编码方法的实质是针对统计结果对字符本身重新编码,而不是对重复字符或重复子串编码,得到的单位像素的比特数最接近图像的实际熵值。 2.设计任务 2.1设计任务 研究实现灰度图像的Huffman编码和解码恢复。 2.2设计目的 (1)了解Huffman编码的基本原理及其特点; (2)理解并熟练对图像进行哈夫曼编码的算法; (3)学习和熟悉MA TLAB图像处理工具箱; (4)熟悉和掌握MA TLAB程序设计方法; 2.3设计要求 现灰度图像的Huffman编码和解码恢复图像;处理结果要求最终图像显示,且计算图像的信息熵,平均码字长度,编码效率,压缩比。 3.总体设计方案 3.1系统运行环境 Windows 8.1/10系统 3.2编程软件平台 MATLAB R2013a/R2014a 3.3Huffman编码算法原理 哈夫曼编码的基本方法是先对图像数据扫描一遍,计算出各种像素出现的概率,按概率的大小指定不同长度的唯一码字,由此得到一张该图像的哈夫曼码表。编码后的图像数据记录的是每个像素的码字,而码字与实际像素值的对应关系记录在码表中。 (1)计算信源符号出现的概率; (2)将信源符号按其出现的概率,由小到大顺序排列,并从左至右排列为叶节点[1];

三进制霍夫曼编码

三进制霍夫曼编码 Prepared on 22 November 2020

题目:将霍夫曼编码推广至三进制编码,并证明它能产生最优编码。 ※将霍夫曼编码推广至三进制编码 设一个数据文件包含Q个字符:A1,A2,……,Aq,每个字符出现的频度对应为P:P1,P2,……,Pq。 1.将字符按频度从大到小顺序排列,记此时的排列为排列1。 2.用一个新的符号(设为S1)代替排列1中频度值最小的Q-2k(k为(Q-1)/2取整)个字符,并记其频度值为排列1中最小的Q-2k个频度值相加,再重新按频度从大到小顺序排列字符,记为排列2。(注:若Q-2k=0,则取其值为2,若Q-2k=1,则取其值为 3.) 3.对排列2重复上述步骤2,直至最后剩下3个概率值。 4.从最后一个排列开始编码,根据3个概率大小,分别赋予与3个字符对应的值:0、1、2,如此得到最后一个排列3个频度的一位编码。 5.此时的3个频度中有一个频度是由前一个排列的3个相加而来,这3个频度就取它的一位编码后面再延长一位编码,得到二位编码,其它不变。 6.如此一直往前,直到排列1所有的频度值都被编码为止。 举例说明如下(假设Q=9):

频度中的黑体为前一频度列表中斜体频度相加而得。编码后字符A1~A9的码字依次为:2,00,02,10,11,12,010,011,012。 构造三进制霍夫曼编码伪码程序如下: HUFFMAN(C) 1 n ←∣C ∣ 2 Q ← C 3 for i ← 1 to n-1 4 do allocate a new node s 5 left[s] ← x ← EXTRACT-MIN(Q) 6 middle[s] ← y ← EXTRACT-MIN(Q) 7 right[s] ← z ← EXTRACT-MIN(Q) 8 f[s] ← f[x]+f[y]+f[z] 9 INSERT(Q,z) 10 return EXTRACT-MIN(Q) ※霍夫曼编码(三进制)最优性证明 在二进制霍夫曼编码中,文件的最优编码由一棵满二叉树表示,树中每个非叶子结点都有两个子结点。在此与之相对应,构造一棵满三叉树来表示三进制的霍夫曼编码,树中每个非叶子结点都有三个子结点。对文件中A中的每个字符a,设f(a)表示a在文件中出现的频度,d T(a)表示字符a的编码长度,亦即a 的叶子在树中的深度。这样,编码一个文件所需的位数就是 B(T)=∑f(a)d T(a) 设A为一给定文件,其中每个字符都定义有频度f[a]。设x,y和z是A中具有最低频度的两个字符。并设A'为文件A中移去x,y和z,再加上新的字符s后的文件,亦即A'=A-{x,y,z}∪{s};如A一样为A'定义f,其中f[s]=f[x]+f[y]+f[z]。设T'为文件A'上最优

(完整版)信息熵在图像处理特别是图像分割和图像配准中的应用——信息与计算科学毕业设计

摘要 信息论是人们在长期通信实践活动中,由通信技术与概率论、随机过程、数理统计等学科相结合而逐步发展起来的一门新兴交叉学科。而熵是信息论中事件出现概率的不确定性的量度,能有效反映事件包含的信息。随着科学技术,特别是信息技术的迅猛发展,信息理论在通信领域中发挥了越来越重要的作用,由于信息理论解决问题的思路和方法独特、新颖和有效,信息论已渗透到其他科学领域。随着计算机技术和数学理论的不断发展,人工智能、神经网络、遗传算法、模糊理论的不断完善,信息理论的应用越来越广泛。在图像处理研究中,信息熵也越来越受到关注。为了寻找快速有效的图像处理方法,信息理论越来越多地渗透到图像处理技术中。本文通过进一步探讨概论率中熵的概念,分析其在图像处理中的应用,通过概念的分析理解,详细讨论其在图像处理的各个方面:如图像分割、图像配准、人脸识别,特征检测等的应用。 本文介绍了信息熵在图像处理中的应用,总结了一些基于熵的基本概念,互信息的定义。并给出了信息熵在图像处理特别是图像分割和图像配准中的应用,最后实现了信息熵在图像配准中的方法。 关键词:信息熵,互信息,图像分割,图像配准

Abstract Information theory is a new interdisciplinary subject developed in people long-term communication practice, combining with communication technology, theory of probability, stochastic processes, and mathematical statistics. Entropy is a measure of the uncertainty the probability of the occurrence of the event in the information theory, it can effectively reflect the information event contains. With the development of science and technology, especially the rapid development of information technology, information theory has played a more and more important role in the communication field, because the ideas and methods to solve the problem of information theory is unique, novel and effective, information theory has penetrated into other areas of science. With the development of computer technology and mathematical theory, continuous improvement of artificial intelligence, neural network, genetic algorithm, fuzzy theory, there are more and more extensive applications of information theory. In the research of image processing, the information entropy has attracted more and more attention. In

图像压缩编码实验报告

图像压缩编码实验报告 一、实验目的 1.了解有关数字图像压缩的基本概念,了解几种常用的图像压缩编码方式; 2.进一步熟悉JPEG编码与离散余弦变换(DCT)变换的原理及含义; 3.掌握编程实现离散余弦变换(DCT)变换及JPEG编码的方法; 4.对重建图像的质量进行评价。 二、实验原理 1、图像压缩基本概念及原理 图像压缩主要目的是为了节省存储空间,增加传输速度。图像压缩的理想标准是信息丢失最少,压缩比例最大。不损失图像质量的压缩称为无损压缩,无损压缩不可能达到很高的压缩比;损失图像质量的压缩称为有损压缩,高的压缩比是以牺牲图像质量为代价的。压缩的实现方法是对图像重新进行编码,希望用更少的数据表示图像。应用在多媒体中的图像压缩编码方法,从压缩编码算法原理上可以分为以下3类: (1)无损压缩编码种类 哈夫曼(Huffman)编码,算术编码,行程(RLE)编码,Lempel zev编码。(2)有损压缩编码种类 预测编码,DPCM,运动补偿; 频率域方法:正交变换编码(如DCT),子带编码; 空间域方法:统计分块编码; 模型方法:分形编码,模型基编码; 基于重要性:滤波,子采样,比特分配,向量量化; (3)混合编码 JBIG,H.261,JPEG,MPEG等技术标准。 2、JPEG 压缩编码原理 JPEG是一个应用广泛的静态图像数据压缩标准,其中包含两种压缩算法(DCT和DPCM),并考虑了人眼的视觉特性,在量化和无损压缩编码方面综合权衡,达到较大的压缩比(25:1以上)。JPEG既适用于灰度图像也适用于彩色图像。其中最常用的是基于DCT变换的顺序式模式,又称为基本系统。JPEG 的压缩编码大致分

霍夫曼编码

霍夫曼编码 霍夫曼编码(Huffman Coding)是一种编码方法,霍夫曼编码是可变字长编码(VLC)的一种。1952年,David A. Huffman在麻省理工攻读博士时所提出一种编码方法,并发表于《一种构建极小多余编码的方法》(A Method for the Construction of Minimum-Redundancy Codes)一文。 该方法完全依据字符出现概率来构造异字头的平均长度最短的 码字,有时称之为最佳编码,一般就叫作Huffman编码。 在计算机数据处理中,霍夫曼编码使用变长编码表对源符号(如文件中的一个字母)进行编码,其中变长编码表是通过一种评估来源符号出现机率的方法得到的,出现机率高的字母使用较短的编码,反之出现机率低的则使用较长的编码,这便使编码之后的字符串的平均长度、期望值降低,从而达到无损压缩数据的目的。1951年,霍夫曼和他 在MIT信息论的同学需要选择是完成学期报告还是期末考试。 导师Robert M. Fano给他们的学期报告的题目是,查找最有效的二进制编码。由于无法证明哪个已有编码是最有效的,霍夫曼放弃对已有编码的研究,转向新的探索,最终发现了基于有序频率二叉树编码的想法,并很快证明了这个方法是最有效的。由于这个算法,学生终于青出于蓝,超过了他那曾经和信息论创立者克劳德·香农共同研究过类似编码的导师。霍夫曼使用自底向上的方法构建二叉树,避免了次优算法Shannon-Fano编码的最大弊端──自顶向下构建树。 霍夫曼(Huffman)编码是一种统计编码。属于无损(lossless)压缩编码。

以霍夫曼树─即最优二叉树,带权路径长度最小的二叉树,经常应用于数据压缩。 ←根据给定数据集中各元素所出现的频率来压缩数据的 一种统计压缩编码方法。这些元素(如字母)出现的次数越 多,其编码的位数就越少。 ←广泛用在JPEG, MPEG, H.2X等各种信息编码标准中。霍夫曼编码的步骤 霍夫曼编码的具体步骤如下: 1)将信源符号的概率按减小的顺序排队。 2)把两个最小的概率相加,并继续这一步骤,始终将较高的概率分支放在上部,直到最后变成概率1。 3)将每对组合的上边一个指定为1,下边一个指定为0(或相反)。4)画出由概率1处到每个信源符号的路径,顺序记下沿路径的0和1,所得就是该符号的霍夫曼码字。 信源熵的定义: 概率空间中每个事件所含有的自信息量的数学期望称信源熵或简称熵(entropy),记为: 例:现有一个由5个不同符号组成的30个符号的字 符串:BABACACADADABBCBABEBEDDABEEEBB 计算 (1) 该字符串的霍夫曼码 (2) 该字符串的熵 (3) 该字符串的平均码长

语音编码和图像编码的分类及特点

语音编码和图像编码的分类及特点 一、语音编码 一般而言,语音编码分三大类:波形编码、参数编码及混合编码。 <1>、波形编码 波形编码将时域模拟话音的波形信号进过采样、量化和编码形成数字语音信号,是将语音信号作为一般的波形信号来处理,力图使重建的波形保持原语音信号的波形形状。具有适应能力强、合成质量高的优点。但所需编码速率较高,通常在16KB/S以上,并且编码质量随着编码速率的降低显著下降,且占用的较高的带宽。 波形编码又可以分为时域上和频域上的波形编码,频域上有子带编码和自适应变换域编码,时域上PCM、DPCM、ADPCM、APC和?M增量调制等。 ①、子带编码 它首先用一组带通滤波器将输入信号按频谱分开,然后让每路子信号通过各自的自适应PCM编码器(ADPCM)编码,经过分接和解码再复合成原始信号。 特点:1、每个子带独立自适应,可按每个子带的能量调节量化阶;2、可根据各个子带对听觉的作用大小共设计最佳的比特数;3、量化噪声都限制在子带内某一频带的量化噪声串到另一频带中去。 ②、自适应变换域编码 利用正交变换将信号有时域变换到另外的一个域,使变换域系数密集化,从而使信号相邻样本间冗余度得到降低。 特点:对变换域系数进行量化编码,可以降低数码率。 ③、PCM(Pulse-code modulation),脉冲编码调制 对连续变化的模拟信号进行进行抽样、量化和编码产生。 特点是保真度高,解码速度快,缺点是编码后的数据量大。 ④、DPCM(Differential Pulse Code Modulation)差分脉冲编码调制 是对模拟信号幅度抽样的差值进行量化编码的调制方式,是用已经过去的抽样值来预测当前的抽样值,对它们的差值进行编码。 特点:对于有些信号瞬时斜率比较大,很容易引起过载;而且瞬时斜率较大的信号也没有像话音信号那种音节特性,因而也不能采用像音节压扩那样的方法,只能采用瞬时压扩的方法;传输的比特率要比PCM低;一个典型的缺点就是易受到传输线路上噪声的干扰。 ⑤、ADPCM(adaptive differential pulse code modulation),自适应差分脉冲编码调制 是DPCM的扩展,区别在于较DPCM在实现上预测器和量化器会随着相关的参数自适应的变化,达到较好的编码效果。 特点:优点在算法复杂度低,压缩比小,编解码延时最短,压缩/解压缩算法非常的简单,低空间消耗。缺点是声音的质量一般。 ⑥、?M增量调制 只保留每一信号样值与其预测值之差的符号,并用一位二进制数编码的差分脉冲编码调制。 特点:1、电路简单,而脉码调制编码器需要较多逻辑电路;2、数据率低于

霍夫曼图像压缩编码源程序

clear X=imread('lena512.bmp'); data=uint8(X); [zipped,info]=huffencode(data); %调用Huffman编码程序进行压缩 unzipped=huffdecode(zipped,info,data); %调用Huffman编码程序进行解码 %显示原始图像和经编码后的图像,显示压缩比,并计算均方根误差得erms=0,表示是Huffman是无失真编码 subplot(121);imshow(data); subplot(122);imshow(unzipped); %erms=compare(data(:),unzipped(:)) cr=info.ratio whos data unzipped zipped function [zipped, info] = huffencode(vector) % 输入和输出都是uint8 格式 % info 返回解码需要的结构信息 % info.pad 是添加的比特数 % info.huffcodes 是Huffman 码字 % info.rows 是原始图像行数 % info.cols 是原始图像列数 % info.length 是原始图像数据长度 % info.maxcodelen 是最大码长 if ~isa(vector, 'uint8') error('input argument must be a uint8 vector'); end [m, n] = size(vector); vector = vector(:)'; f = frequency(vector); %计算各符号出现的概率 symbols = find(f~=0); f = f(symbols); [f, sortindex] = sort(f); %将符号按照出现的概率大小排列 symbols = symbols(sortindex); len = length(symbols); symbols_index = num2cell(1:len); codeword_tmp = cell(len, 1); % 生成Huffman 树,得到码字编码表 while length(f)>1 index1 = symbols_index{1}; index2 = symbols_index{2}; codeword_tmp(index1) = addnode(codeword_tmp(index1), uint8(0)); codeword_tmp(index2) = addnode(codeword_tmp(index2), uint8(1));

实验一-信息熵与图像熵计算-正确

实验一信息熵与图像熵计算(2 学时) 一、实验目的 1.复习MATLAB的基本命令,熟悉MATLAB下的基本函数; 2.复习信息熵基本定义,能够自学图像熵定义和基本概念。 二、实验内容 1.能够写出MATLAB源代码,求信源的信息熵; 2.根据图像熵基本知识,综合设计出MATLAB程序,求出给定图像的图像熵。 三、实验仪器、设备 1.计算机-系统最低配置256M内存、P4 CPU; 2.MATLAB编程软件。 四实验流程图 五实验数据及结果分析

四、实验原理 1.MATLAB中数据类型、矩阵运算、图像文件输入与输出知识复习。 2.利用信息论中信息熵概念,求出任意一个离散信源的熵(平均自信息量)。自信息是一个随机变量,它是指某一信源发出某一消息所含有的信息量。所发出的消息不同,它们所含有的信息量也就不同。任何一个消息的自信息量都代表不了信源所包含的平均自信息量。不能作为整个信源的信息测度,因此定义自信息量的数学期望为信源的平均自信息量: 1( ) 1 ( ) [log ] ( ) log ( ) i n i i p a i H E p a p a X 信息熵的意义:信源的信息熵H是从整个信源的统计特性来考虑的。它是从平均意

义上来表征信源的总体特性的。对于某特定的信源,其信息熵只有一个。不同的信源因统计特性不同,其熵也不同。 3.学习图像熵基本概念,能够求出图像一维熵和二维熵。 图像熵是一种特征的统计形式,它反映了图像中平均信息量的多少。图像的一维熵表示图像中灰度分布的聚集特征所包含的信息量,令Pi表示图像中灰度值为i的像素所占的比例,则定义灰度图像的一元灰度熵为: 2550 log i i i p p H 图像的一维熵可以表示图像灰度分布的聚集特征,却不能反映图像灰度分布的空间特征,为了表征这种空间特征,可以在一维熵的基础上引入能够反映灰度分布空间特征的特征量来组成图像的二维熵。选择图像的邻域灰度均值作为灰度2

两个matlab实现最大熵法图像分割程序

%两个程序,亲测可用 clear all a=imread('moon.tif'); figure,imshow(a) count=imhist(a); [m,n]=size(a); N=m*n; L=256; count=count/N;%%每一个像素的分布概率 count for i=1:L if count(i)~=0 st=i-1; break; end end st for i=L:-1:1 if count(i)~=0 nd=i-1; break; end end nd f=count(st+1:nd+1); %f是每个灰度出现的概率 size(f) E=[]; for Th=st:nd-1 %%%设定初始分割阈值为Th av1=0; av2=0; Pth=sum(count(1:Th+1)); %%%第一类的平均相对熵为 for i=0:Th av1=av1-count(i+1)/Pth*log(count(i+1)/Pth+0.00001); end %%%第二类的平均相对熵为 for i=Th+1:L-1 av2=av2-count(i+1)/(1-Pth)*log(count(i+1)/(1-Pth)+0.00001); end E(Th-st+1)=av1+av2; end position=find(E==(max(E))); th=st+position-1

for i=1:m for j=1:n if a(i,j)>th a(i,j)=255; else a(i,j)=0; end end end figure,imshow(a); %%%%%%%%%%%%%%%%%%%%%2-d 最大熵法(递推方法) %%%%%%%%%%% clear all; clc; tic a=imread('trial2_2.tiff'); figure,imshow(a); a0=double(a); [m,n]=size(a); h=1; a1=zeros(m,n); % 计算平均领域灰度的一维灰度直方图 for i=1:m for j=1:n for k=-h:h for w=-h:h; p=i+k; q=j+w; if (p<=0)|( p>m) p=i; end if (q<=0)|(q>n) q=j; end a1(i,j)=a0(p,q)+a1(i,j); end end a2(i,j)=uint8(1/9*a1(i,j)); end

实验四dct变换huffman编码图像压缩

实验四图像压缩 姓名:学号:邮箱: 一、实验目的 1.掌握DCT变换的原理 2.了解DCT变化在图像压缩中的应用 3.掌握图像压缩的基本原理及方法 4.了解霍夫曼编码原理 5.熟悉图像压缩的MATLAB编程 二、实验原理 DCT是目前比较好的图像变换,它有很多优点。DCT是正交变换,它可以将8x8图像空间表达式转换为频率域,只需要用少量的数据点表示图像;DCT产生的系数很容易被量化,因此能获得好的块压缩;DCT算法的性能很好,它有快速算法,如采用快速傅立叶变换可以进行高效的运算,因此它在硬件和软件中都容易实现;而且DCT算法是对称的,所以利用逆DCT算法可以用来解压缩图像。 由于DCT主要应用在数据和图像的压缩,因此希望原信号的能量在变换后能尽量集中在少数系数上,且这些大能量的系数能处在相对集中的位置,这将有利于进一步的量化和编码。但是如果对整段的数据或整幅图像来做DCT,那就很难保证大能量的系数能处在相对集中的位置。因此,在实际应用中,一般都是将数据分成一段一段来做,一般分成8x8或16x16的方块来做。 二维DCT正交变换的公式为: 二维DCT逆变换公式: 其中

三、实验要求 利用DCT变换对图像进行压缩,对比不同压缩比下的结果,对比不同压缩比下图像大小的变化。压缩过程如下图所示: 四、实验过程与结果 实验程序如下:(先给出主程序,然后给出各功能子函数的程序) 主程序: clear load('')%调入170*170大小的一幅彩色lena图像 l=imresize(lena,[256 256]);%将图像变换为8的整数倍大小 X=rgb2gray(l); Y1=double(X);%读入图像数据lianghua=[16 11 10 16 24 40 51 61;%量化矩阵,量化的程度序决定压缩比 12 12 14 19 26 58 60 55; 14 13 16 24 40 57 69 56; 14 17 22 29 51 87 80 62; 18 22 37 56 68 109 103 77; DCT变换 量化huffman编码

哈夫曼树的编码和译码

#include"stdafx.h" #include"stdio.h" #include"conio.h" #include #include #include using namespace std; #define maxbit 100 #define Maxvalue 2000//最大权值整数常量#define Maxleaf 100//最大叶子结点数 #define size 300//0、串数组的长度 static int n;//实际的叶子结点数 struct HNodeType { int weight; int parent; int lchild; int rchild; int ceng;//结点相应的层数 char ch;//各结点对应的字符 }; struct HCodeType { int bit[maxbit];//存放编码的数组 int start;//编码在数组中的开始位置}; static HNodeType *HuffNode;//定义静态指针HNodeType *init()//初始化静态链表 { HuffNode=new HNodeType[2*n-1]; for(int i=0;i<2*n-1;i++) { HuffNode[i].weight=0; HuffNode[i].parent=-1; HuffNode[i].lchild=-1; HuffNode[i].rchild=-1; HuffNode[i].ceng=-1; HuffNode[i].ch='0'; } return HuffNode; }

图像熵计算

图像熵计算 信息熵: 利用信息论中信息熵概念,求出任意一个离散信源的熵(平均自信息量)。自信息是一个随机变量,它是指某一信源发出某一消息所含有的信息量。一条信息的信息量和它的不确定性有着直接的关系。所发出的消息不同,它们所含有的信息量也就不同。任何一个消息的自信息量都代表不了信源所包含的平均自信息量。不能作为整个信源的信息测度,因此定义自信息量的数学期望为信源的平均自信息量: 信息熵的意义 信源的信息熵H 是从整个信源的统计特性来考虑的。它是从平均意义上来表征信源的总体特性的。对于某特定的信源,其信息熵只有一个。不同的信源因统计特性不同,其熵也不同。信息熵一般用符号H 表示,单位是比特。变量的不确定性越大,熵也就越大。 图像熵: 1.一元灰度熵 图像熵是一种特征的统计形式,它反映了图像中平均信息量的多少。图像的一维熵表示图像中灰度分布的聚集特征所包含的信息量,令P i 表示图像中灰度值为i 的像素所占的比例,则定义灰度图像的一元灰度熵为: 255 log =i i i H p p =∑ 其中P i 是某个灰度在该图像中出现的概率,可由灰度直方图获得。 %% 图像灰度直方图 clear; clc;

close all; ImageData=imread('lena.jpg'); if ndims(ImageData) == 3 figure; imshow(ImageData); title('您选择的是RGB图,将转换为灰度图!'); ImageData = rgb2gray(ImageData); %如果是真彩色图,就将其装换为灰度图 end figure imshow(ImageData) title('您所选择的图像'); figure; h=imhist(ImageData); %一个MATLAB图像处理模块中的函数,用以提取图像中的直方图信息 h1=h(1:2:256); h2=1:2:256; stem(h2,h1,'r--'); %绘出柱状图,红色 title('图像灰度直方图-柱状图'); figure; imhist(ImageData); %一个MATLAB图像处理模块中的函数,用以提取图像中的直方图信息 title('灰度直方图');

图像编码基本方法(可编辑修改word版)

p p o ? 一、霍夫曼编码(Huffman Codes) 最佳编码定理:在变长编码中,对于出现概率大的信息符号编以短字长的码,对于出现概率小的信息符号编以长字长的码,如果码字长度严格按照符号出现概率大小的相反的顺序排列,则平均码字长度一定小于按任何其他符号顺序排列方式的平均码字长度。 霍夫曼编码已被证明具有最优变长码性质,平均码长最短,接近熵值。 X = ? x 1 x 2 x m ? ? p p p ? 霍夫曼编码步骤:设信源 X 有m 个符号(消息) ? 1 2 m ? , 1. 1. 把信源 X 中的消息按概率从大到小顺序排列, 2. 2. 把最后两个出现概率最小的消息合并成一个消息,从而使信源的消息数减少,并同时再按信源符号(消息)出现的概率从大到小排列; ? x o x o ? 3. 3. 重复上述 2 步骤,直到信源最后为 X o = ? 1 1 2 ? 2 ? 为止; 4. 4. 将被合并的消息分别赋予 1 和 0,并对最后的两个消息也相应的赋予 1 和 0; 通过上述步骤就可构成最优变长码(Huffman Codes)。 例: X P i 码字编码过程 x 1 0.25 10 x 2 0.25 01 x 3 0.20 11 x 4 0.15 000 x 5 0.10 0100 x 6 0.05 1100 则平均码长、平均信息量、编码效率、冗余度为分别为: N = 2 ? 2 ? 0.25 + 2 ? 0.20 + 3? 0.15 + 4 ? 0.1+ 4 ? 0.05 = 2.45 H = -(2 ? 0.25?log 0.25 + 0.2 ?log 0.2 + 0.15?log 0.15 + 0.1?log 0.1+ 0.05?log 0.05) = 2.42 = 98% Rd = 2% o

霍夫曼编码

霍夫曼编码的matlab实现 一、实验内容: 用Matlab语言编程实现霍夫曼(Huffman)编码。 二、实验原理及编码步骤: 霍夫曼(Huffman)编码算法是满足前缀条件的平均二进制码长最短的编-源输出符号,而将较短的编码码字分配给较大概率的信源输出。算法是:在信源符号集合中,首先将两个最小概率的信源输出合并为新的输出,其概率是两个相应输出符号概率之和。这一过程重复下去,直到只剩下一个合并输出为止,这个最后的合并输出符号的概率为1。这样就得到了一张树图,从树根开始,将编码符号1 和0 分配在同一节点的任意两分支上,这一分配过程重复直到树叶。从树根到树叶途经支路上的编码最后就构成了一组异前置码,就是霍夫曼编码输出。以本教材P74例题3-18信源为例: 信源: X x1 x2 x3 x4 x5 q(X) = 0.4 0.2 0.2 0.1 0.1 解:

通过上表的对信源缩减合并过程,从而完成了对信源的霍夫曼编码。 特点:霍夫曼编码在三种编码方法中编码效率最高 基本步骤:p72 三、实验程序及运行结果 (见附录6) 程序流程图:XXXXXXXXXXXX 四 分析结果 由程序运行结果可知: 方法一(概率之和往上排): 码字:11 01 00 101 100 编码效率: %4.962 .212 .21log 2 .22.038.0212 .2)(log ) (log )(log n 5 11≈= ==?+?==-= = ∑ηη所以:) (D n X H D n xm q xm q D X H

码长均值:2.22.038.02n 1=?+?= 码长均方差:{}16.02.0)2.23(8.0)2.22()2221=?-+?-=-n n E ( 方法二(概率之和往下排): 码字:0 10 111 1101 1100 编码效率: %4.962 .212 .21log 2.22.042.032.024.0112.2)(log ) (log )(log n 5 12≈= ==?+?+?+?==-= =∑ηη所以:) (D n X H D n xm q xm q D X H 码长均值:2.22.042.032.024.01n 2=?+?+?+?= 码长均方差: { }36 .12.02.2-42.02.2-32.0)2.22(4.0)2.21()2 2222 22=?+?+?-+?-=-)()((n n E 比较方法一和方法二可知:两张编码方法平均码长相等,但方法二均方差较大,一般取均方 差小的编码方法,这样译码会更简单。

相关文档
相关文档 最新文档