当前位置:文档之家› 实验三 图像压缩编码技术

实验三 图像压缩编码技术

实验三 图像压缩编码技术
实验三 图像压缩编码技术

实验报告

课程名称: 数字图像处理

实验名称: 图像压缩编码技术

实验地点: 明向校区D001机房

专业班级: 测控1401班

学号:

学生姓名: 郭佳鑫

指导教师: 刘 帆

2017年 4月 21日

2014001796

一、实验目的

1.理解有损压缩和无损压缩的概念。

2.理解图像压缩的主要原则和目的。

3.了解几种常用的图像压缩编码方式。

4.利用MATLAB程序进行图像压缩编码。

二、实验原理

1、图像压缩原理

图像压缩主要目的是为了节省存储空间,增加传输速度。图像压缩的理想标准是信息丢失最少,压缩比例最大。不损失图像质量的压缩称为无损压缩,无损压缩不可能达到很高的压缩比;损失图像质量的压缩称为有损压缩,高的压缩比是以牺牲图像质量为代价的。压缩的实现方法是对图像重新进行编码,希望用更少的数据表示图像。

信息的冗余量有许多种,如空间冗余,时间冗余,结构冗余,知识冗余,视觉冗余等,数据压缩实质上是减少这些冗余量。高效编码的主要方法是尽可能去除图像中的冗余成分,从而以最小的码元包含最大的图像信息。

2、编码压缩方法有许多种,从不同的角度出发有不同的分类方法,从信息论角度出发可分为两大类。

(1)冗余度压缩方法,也称无损压缩、信息保持编码或熵编码。具体说就是解码图像和压缩编码前的图像严格相同,没有失真,从数学上讲是一种可逆运算。

(2)信息量压缩方法,也称有损压缩、失真度编码或烟压缩编码。也就是说解码图像和原始图像是有差别的,允许有一定的失真。

3、应用在多媒体中的图像压缩编码方法,从压缩编码算法原理上可以分为以下3类:

(1)无损压缩编码种类

哈夫曼(Huffman)编码,算术编码,行程(RLE)编码,Lempel zev编码。

(2)有损压缩编码种类

预测编码,DPCM,运动补偿;

频率域方法:正交变换编码(如DCT),子带编码;

空间域方法:统计分块编码;

模型方法:分形编码,模型基编码;

基于重要性:滤波,子采样,比特分配,向量量化;

(3)混合编码。

有JBIG,H.261,JPEG,MPEG等技术标准。

本实验主要利用MA TLAB程序进行赫夫曼(Huffman)编码和行程编码(Run Length Encoding,RLE)。

三、实验仪器

1.计算机。

2.MATLAB、Photoshop等程序。

3.移动式存储器(软盘、U盘等)。

4.记录用的笔、纸。

四、实验步骤与内容

1、实现基本JPEG的压缩和编码分三个步骤:

(1)首先通过DCT变换去除数据冗余;

(2)使用量化表对DCT系数进行量化;

(3)对量化后的系数进行Huffman编码。

我逐步进行了该项内容的实验:

实验中我们使用的是一张512*512像素的RGB彩图lena.bmp,在程序中我们需要现将其转化为单通道256级灰度图。

程序代码如下:

>> x=imread('lena.bmp');

>> x=rgb2gray(i);

>> figure(1);

>> subplot(121);

>> imshow(x);

运行结果如下:

接下来进行近似基本JPEG编码。

代码及结果如下:

出现错误,提示未找到JPEG编码函数。

查阅课本,发现完成该内容需要自行定义若干函数,具体名称如下:

具体代码如下:

%函数addnod添加节点

function codeword_new=addnode(codeword_old,item)

codeword_new=cell(size(codeword_old));

for index=1:length(codeword_old)

codeword_new{index}=[item codeword_old{index}];

end

%函数bytes返回输入f占用的比特数

function b=bytes(f)

if ischar(f)

info=dir(f);

b=info.bytes;

elseif isstruct(f)

b=0;

fields=fieldnames(f);

for k=1:length(fields)

b=b+bytes(f.(fields{k}));

end

else

info=whos('f');

b=info.bytes;

end

%函数imageratio计算两个图像压缩比

function cr=imageratio(f1,f2)

error(nargchk(2,2,nargin));

cr=bytes(f1)/bytes(f2);

%函数decode返回码字对应的符号

function byte=decode(code,info)

byte=info.huffcodes(code);

%函数frequency计算各个符号出现的概率

function f=frequency(vector)

if ~isa(vector,'uint8')

error('input argument must be a uint8 vector');

end

f=repmat(0,1,256);

len=length(vector);

for index=0:255

f(index+1)=sum(vector==uint8(index));

end

f=f./len;

%huffencode函数对输入矩阵vector进行Huffman编码,返回编码后的向量(压缩后数据)及相关信息

function [zipped,info]=huffencode (vector)

if ~isa(vector,'uint8')

eror('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);

while length(f)>1 %生成huffman树,得到码字编码表

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));

f=[sum(f(1:2)) f(3:end)];

symbols_index=[{[index1,index2]} symbols_index(3:end)];

[f,sortindex]=sort(f);

symbols_index=symbols_index(sortindex);

end

codeword=cell(256,1);

codeword(symbols)=codeword_tmp;

len=0;

for index=1:length(vector) %得到整个图像所有比特数

len=len+length(codeword{double(vector(index))+1});

end

string=repmat(uint8(0),1,len);

pointer=1;

for index=1:length(vector) %对输入图像进行编码

code=codeword{double(vector(index))+1};

len=length(code);

string(pointer+(0:len-1))=code;

pointer=pointer+len;

end

len=length(string);

pad=8-mod(len,8); %非8整数倍时,最后补pad 个0

if pad>0

string=[string uint8(zeros(1,pad))];

end

codeword=codeword(symbols);

codelen=zeros(size(codeword));

weights=2.^(0:23);

maxcodelen=0;

for index=1:length(codeword)

len=length(codeword{index});

if len>maxcodelen

maxcodelen=len;

end

if len>0

code=sum(weights(codeword{index}==1));

code=bitset(code,len+1);

codeword{index}=code;

codelen(index)=len;

end

end

codeword=[codeword{:}];

%计算压缩后的向量

cols=length(string)/8;

string=reshape(string,8,cols);

weights=2.^(0:7);

zipped=uint8(weights*double(string));

%码表存储到一个稀疏矩阵

huffcodes=sparse(1,1);

for index=1:nnz(codeword) %length(codeword) %numel(codeword) huffcodes(codeword(index),1)=symbols(index);

end

info.pad=pad;

info.huffcodes=huffcodes;

info.ratio=cols./length(vector);

info.length=length(vector);

info.maxcodelen=maxcodelen;

info.rows=m;

info.cols=n;

% huffdecode函数对输入矩阵vector进行Huffman解码,返回解压后的图像数据function vector=huffdecode(zipped,info,image)

if ~isa(zipped,'uint8')

error('input argument must be a uint8 vector');

end

%产生0,1序列,每位占一个字节

len=length(zipped);

string=repmat(uint8(0),1,len.*8);

bitindex=1:8;

for index=1:len

string(bitindex+8.*(index-1))=uint8(bitget(zipped(index),bitindex));

end

string=logical(string(:)');

len=length(string);

string((len-info.pad+1):end)=[];

len=length(string);

%开始解码

weights=2.^(0:51);

vector=repmat(uint8(0),1,info.length);

vectorindex=1;

codeindex=1;

code=0;

for index=1:len

code=bitset(code,codeindex,string(index));

codeindex=codeindex+1;

byte=decode(bitset(code,codeindex),info);

if byte>0

vector(vectorindex)=byte-1;

codeindex=1;

code=0;

vectorindex=vectorindex+1;

end

end

vector=reshape(vector,info.rows,info.cols);

%jpegencode函数用来压缩图像

function y=jpegencode(x,quality)

error(nargchk(1,2,nargin));

if nargin<2

quality=1;

end

x=double(x)-128;

[xm,xn]=size(x);

t=dctmtx(8);

y=blkproc(x,[8,8],'P1*x*P2',t,t');

m= [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;

24 35 55 64 81 104 113 92;

49 64 78 87 103 121 120 101;

72 92 95 98 112 100 103 99]*quality;

yy=blkproc(y,[8,8],'round(x./P1)',m);

y=im2col(yy,[8,8],'distinct');

xb=size(y,2);

order=[1 9 2 3 10 17 25 18 11 4 5 12 19 26 33 41 34 27 20 13 6 7 14 21 28 35 42 49 57 50 43 36 29 22 15 8 16 23 30 37 44 51 58 59 52 45 38 31 24 32 39 46 53 60 61 54 47 40 48 55 62 63 56 64];

y=y(order,:);

eob=max(x(:))+1;

num=numel(y)+size(y,2);

r=zeros(num,1);

count=0;

for j=1:xb

i=max(find(y(:,j)));

if isempty(i)

i=0;

end

p=count+1;

q=p+i;

r(p:q)=[y(1:i,j);eob];

count=count+i+1;

end

r((count+1):end)=[];

r=r+128;

y.size=uint16([xm,xn]);

y.numblocks=uint16(xb);

y.quality=uint16(quality*100);

[y.huffman https://www.doczj.com/doc/2b5983043.html,]=huffencode(uint8(r));

%jpegdecode函数是JPEG解码程序

function x=jpegdecode(y)

error(nargchk(1,1,nargin));

m= [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;

24 35 55 64 81 104 113 92;

49 64 78 87 103 121 120 101;

72 92 95 98 112 100 103 99];

order=[1 9 2 3 10 17 25 18 11 4 5 12 19 26 33 41 34 27 20 13 6 7 14 21 28 35 42 49 57 50 43 36 29 22 15 8 16 23 30 37 44 51 58 59 52 45 38 31 24 32 39 46 53 60 61 54 47 40 48 55 62 63 56 64];

rev=order;

for k=1:length(order)

rev(k)=find(order==k);

end

%ff=max(rev(:))+1;

m=double(y.quality)/100*m;

xb=double(y.numblocks);

sz=double(y.size);

xn=sz(1);

xm=sz(2);

x=huffdecode(y.huffman,https://www.doczj.com/doc/2b5983043.html,);

x=double(x)-128;

eob=max(x(:));

z=zeros(64,xb);k=1;

for j=1:xb

for i=1:64

if x(k)==eob

k=k+1;break;

else

z(i,j)=x(k);

k=k+1;

end

end

end

z=z(rev,:);

x=col2im(z,[8,8],[xm,xn],'distinct');

x=blkproc(x,[8,8],'x.*P1',m);

t=dctmtx(8);

x=blkproc(x,[8,8],'P1*x*P2',t',t);

x=uint8(x+128);

全部函数创建完毕后,可以在Current Folder窗口中看到所创建函数的.m文件。

回到主程序,键入完整的主程序代码,代码如下:

>> x=imread('lena.bmp');

>> x=rgb2gray(x); %彩图转化为灰度图

>> figure(1);

>> subplot(121);

>> imshow(x); %显示原图

>> y=jpegencode(x,5);%进行近似jpeg编码

>> X=jpegdecode(y);%进行解码

>> X=jpegdecode(y); %进行解码

>> subplot(122);

>> imshow(X);

结果图像如下:

然后计算均方根误差和压缩比,代码如下:

>> e=double(x)-double(X);

>> [m,n]=size(e);

>> erms=sqrt(sum(e(:).^2)/(m*n)) %计算均方根误差>> cr=imageratio(x,y) %计算压缩比

整体结果如下:

2、行程编码压缩

该部分实验同样需要创建两个函数,RLEncode与RLEdecode,代码如下:%RLEncode函数进行编码

function [zipped,info]=RLEncode(vector)

[m,n]=size(vector);

vector=vector(:)';

vector=uint8(vector(:));

L=length(vector);

c=vector(1);e(1,1)=c;e(1,2)=0;

t1=1;

for j=1:L

if((vector(j)==c))

e(t1,2)=double(e(t1,2))+1;

else

c=vector(j);

t1=t1+1;

e(t1,1)=c;

e(t1,2)=1;

end

end

zipped=e;

info.rows=m;

info.cols=n;

[m,n]=size(e);

info.ratio=m*n/(info.rows*info.cols);

%RLEdecode函数用于解码

function unzipped=RLEdecode(zip,info)

zip=uint8(zip);

[m,n]=size(zip);

unzipped=[];

for i=1:m

section=repmat(zip(i,1),1,double(zip(i,2)));

unzipped=[unzipped,section];

end

unzipped=reshape(unzipped,info.rows,info.cols);

两个函数定义完毕后便可直接调用。

使用行程编码分别对彩图和灰度图进行处理,然后将结果进行比较。

代码如下:

>> I=imread('lena.bmp');

[zipped,info]=RLEncode(I);

unzipped=RLEdecode(zipped,info);

subplot(121);imshow(I);

subplot(122);imshow(unzipped);

结果如下:

由于是三通道RGB彩图,因此解码后三个颜色通道灰度分开显示了。并且放大后仔细观察可以看出图片的大小和清晰度均无变化,证明行程编码为无损压缩。

输入whos I unzipped zipped 查看各变量详情,结果如下:

可以看到,压缩前大小为786432字节,压缩后的“zipped”变量有1434286字节,可见行程编码对色彩丰富的三通道彩图压缩效果不理想甚至起到反效果。

将原图片转化为单通道灰度图,重复实验,代码如下:

>> I=rgb2gray(I); %转化为灰度图

>> [zipped,info]=RLEncode(I);

unzipped=RLEdecode(zipped,info);

subplot(121);imshow(I);

subplot(122);imshow(unzipped);

结果图像如下:

图像仍为无损还原,键入whos I unzipped zipped 查看各变量详情,结果如下:

可以看到压缩效果仍然很差,“负压缩”仍然多出来近一倍的容量(刚才彩图从786K到1.4M也是多了近一倍)。这说明:无论是三通道彩图还是灰度图,只要灰度级变化非常丰富,行程编码的压缩效果均不理想。

那么结合行程编码的原理,以及上述两项实验结果,容易理解仅有“黑与白”两种颜色的“二值图像”,使用行程编码将会得到优秀的压缩率。

接下来我尝试了二值图像的行程编码。

代码如下:

>> I=imread('cameraman.tif');

>> I=im2bw(I,0.4);

>> [zipped,info]=RLEncode(I);

>> unzipped=RLEdecode(zipped,info);

>> I2=logical(unzipped);

>> subplot(121);imshow(I);subplot(122);imshow(I2);

>> whos I zipped I2

结果如下:

从结果上可以看出,首先I2将原图I无损还原了出来。其次,原图像的大小为65536字节,而压缩后的“zipped”变量仅有7086字节,可见行程编码对灰度级不丰富或灰度级较单一的图像具有良好的压缩效果。

五、思考题

1.图像中哪些信息是主要的,哪些信息是次要的?

答:我认为图像想表达的信息就是主要的,比如一张人像图片,人的细节和色彩信息就是主要的,而背景则是次要的;而如果拍摄一棵植物,那么植物的细节和色彩信息就是主要的,如果恰巧植物边上有一个人,那这个“人的信息”在这里是次要的。

2.简述赫夫曼编码和行程编码的原理。

答:赫夫曼编码是一种基于统计的信息无损熵编码。编码时,从最小概率的两个符号开始,可选其中一个支路为0,另一支路为1。再将已编码的两支路的概率合并,并重新排队。多次重复使用此方法直至合并概率归一时为止。

行程编码则是一种利用空间冗余度压缩图像的方法。它将图像的每一行像素都用长度为灰度为g,长度为l的片段表示,这样一来,图像的每一行都可以用数个(g,l)偶对表示。对于灰度色彩不丰富的图像,行程编码具有良好的压缩效果。

六、实验总结

实验三又将数字图像处理的知识深入探讨了一番。可以说,图像的压缩编码是最接近我们生活的了。平时我们操作电脑传输图像文件时,会对其进行压缩。我们所看到的每一段视频,都是图像压缩编码的技术应用。通过本次实验的深入研究,我对图像压缩编码技术有了更加清晰的认识和更加深刻的理解。宏观上讲,我感觉到了本次试验也是我在数字图像处理整体学习过程中的关键一步,通过实际操作与课本内容相结合,非常有利于我对理论知识进行学习和吸收。

图像压缩编码方法

图像压缩编码方法综述 概述: 近年来, 随着数字化信息时代的到来和多媒体计算机技术的发展, 使得人 们所面对的各种数据量剧增, 数据压缩技术的研究受到人们越来越多的重视。 图像压缩编码就是在满足一定保真度和图像质量的前提下,对图像数据进行变换、编码和压缩,去除多余的数据以减少表示数字图像时需要的数据量,便于 图像的存储和传输。即以较少的数据量有损或无损地表示原来的像素矩阵的技术,也称图像编码。 图像压缩编码原理: 图像数据的压缩机理来自两个方面:一是利用图像中存在大量冗余度可供压缩;二是利用人眼的视觉特性。 图像数据的冗余度又可以分为空间冗余、时间冗余、结构冗余、知识冗余 和视觉冗余几个方面。 空间冗余:在一幅图像中规则的物体和规则的背景具有很强的相关性。 时间冗余:电视图像序列中相邻两幅图像之间有较大的相关性。 结构冗余和知识冗余:图像从大面积上看常存在有纹理结构,称之为结构 冗余。 视觉冗余:人眼的视觉系统对于图像的感知是非均匀和非线性的,对图像 的变化并不都能察觉出来。 人眼的视觉特性: 亮度辨别阈值:当景物的亮度在背景亮度基础上增加很少时,人眼是辨别 不出的,只有当亮度增加到某一数值时,人眼才能感觉其亮度有变化。人眼刚 刚能察觉的亮度变化值称为亮度辨别阈值。 视觉阈值:视觉阈值是指干扰或失真刚好可以被察觉的门限值,低于它就 察觉不出来,高于它才看得出来,这是一个统计值。 空间分辨力:空间分辨力是指对一幅图像相邻像素的灰度和细节的分辨力,视觉对于不同图像内容的分辨力不同。 掩盖效应:“掩盖效应”是指人眼对图像中量化误差的敏感程度,与图像 信号变化的剧烈程度有关。 图像压缩编码的分类: 根据编码过程中是否存在信息损耗可将图像编码分为: 无损压缩:又称为可逆编码(Reversible Coding),解压缩时可完全回复原始数据而不引起任何失真; 有损压缩:又称不可逆压缩(Non-Reversible Coding),不能完全恢复原始数据,一定的失真换来可观的压缩比。 根据编码原理可以将图像编码分为: 熵编码:熵编码是编码过程中按熵原理不丢失任何信息的编码。熵编码基

图像压缩实验报告

竭诚为您提供优质文档/双击可除 图像压缩实验报告 篇一:实验三图像压缩 实验三图像压缩 一、实验目的 1.理解有损压缩和无损压缩的概念; 2.理解图像压缩的主要原则和目的; 3.了解几种常用的图像压缩编码方式。 4.利用mATLAb程序进行图像压缩。 二、实验仪器 1计算机; 2mATLAb等程序; 3移动式存储器(软盘、u盘等)。 4记录用的笔、纸。 三、实验原理 1.图像压缩原理 图像压缩主要目的是为了节省存储空间,增加传输速度。图像压缩的理想标准是信息丢失最少,压缩比例最大。不损

失图像质量的压缩称为无损压缩,无损压缩不可能达到很高的压缩比;损失图像质量的压缩称为有损压缩,高的压缩比是以牺牲图像质量为代价的。压缩的实现方法是对图像重新进行编码,希望用更少的数据表示图像。 信息的冗余量有许多种,如空间冗余,时间冗余,结构冗余,知识冗余,视觉冗余等,数据压缩实质上是减少这些冗余量。高效编码的主要方法是尽可能去除图像中的冗余成分,从而以最小的码元包含最大的图像信息。 编码压缩方法有许多种,从不同的角度出发有不同的分类方法,从信息论角度出发可分为两大类。 (1).冗余度压缩方法,也称无损压缩、信息保持编码或嫡编码。具体说就是解码图像和压缩编码前的图像严格相同,没有失真,从数学上讲是一种可逆运算。 (2)信息量压缩方法,也称有损压缩、失真度编码或烟压缩编码。也就是说解码图像和原始图像是有差别的,允许有一定的失真。 应用在多媒体中的图像压缩编码方法,从压缩编码算法原理上可以分为以下3类: (1)无损压缩编码种类 哈夫曼(huffman)编码,算术编码,行程(RLe)编码,Lempelzev编码。 (2)有损压缩编码种类

数据结构 哈夫曼编码实验报告

实验报告 实验课名称:数据结构实验 实验名称:文件压缩问题 班级:20132012 学号:姓名:时间:2015-6-9 一、问题描述 哈夫曼编码是一种常用的数据压缩技术,对数据文件进行哈夫曼编码可大大缩短文件的传输长度,提高信道利用率及传输效率。要求采用哈夫曼编码原理,统计文本文件中字符出现的词频,以词频作为权值,对文件进行哈夫曼编码以达到压缩文件的目的,再用哈夫曼编码进行译码解压缩。 二、数据结构设计 首先定义一个结构体: struct head { unsigned char b; //记录字符 long count; //权重 int parent,lch,rch; //定义双亲,左孩子,右孩子 char bits[256]; //存放哈夫曼编码的数组 } header[512],tmp; //头部一要定设置至少512个,因为结 点最多可达256,所有结点数最多可 达511 三、算法设计 输入要压缩的文件读文件并计算字符频率根据字符的频率,利用Huffman 编码思想创建Huffman树由创建的Huffman树来决定字符对应的编码,进行文件的压缩解码压缩即根据Huffman树进行译码 设计流程图如图1.1所示。

图1.1 设计流程图 (1)压缩文件 输入一个待压缩的文本文件名称(可带路径)如:D:\lu\lu.txt 统计文本文件中各字符的个数作为权值,生成哈夫曼树;将文本文件利用哈夫曼树进行编码,生成压缩文件。压缩文件名称=文本文件名.COD 如:D:\lu\lu.COD 压缩文件内容=哈夫曼树的核心内容+编码序列 for(int i=0;i<256;i++) { header[i].count=0; //初始化权重 header[i].b=(unsigned char)i; //初始化字符 } ifstream infile(infilename,ios::in|ios::binary); while(infile.peek()!=EOF) { infile.read((char *)&temp,sizeof(unsigned char)); //读入一个字符 header[temp].count++; //统计对应结点字符权重 flength++; //统计文件长度 } infile.close(); //关闭文件 for(i=0;i<256-1;i++) //对结点进行冒泡排序,权重大的放在上面,编码时效率高 for(int j=0;j<256-1-i;j++) if(header[j].count

图像压缩编码实验报告

图像压缩编码实验报告 一、实验目的 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 的压缩编码大致分

压缩技术实验编码

压缩技术实验编码 实验一统计编码 实验目的 1.熟悉统计编码的原理 2.掌握r元Huffman编码的方法; 3.了解Huffman编码效率及冗余度的计算; 二、实验原理 霍夫曼编码,又称最佳编码,根据字符出现概率来构造平均长度最短的变长编码。 Huffman编码步骤: (1)把信源符号x i(i=1,2,…按出现概率的值由大到小的顺序排列; (2)对两个概率最 小的符号分别分配以“ 0和“ 1,'然

后把这两个概率相加作为一个新的辅助符号的概率; (3)将这个新的辅助符号与其他符号一起重新按概率大小顺序排列; ⑷跳到第2步,直到出现概率相加为1为止; (5)用线将符号连接起来,从而得到一个码树,树的N个端点对应N个信源符号; (6)从最后一个概率为1的节点开始,沿着到达信源的每个符号,将一路遇到的二进制码“ 0或“ 1顺序排列起来,就是端点所对应的信源符号的码字。 以上是二元霍夫曼编码。如果是r元霍夫曼编码,则应该如何做呢? 在HUFFMAN 编码方案中,为出现概率较小的信源输出分配较长的码字,而对那些出现可能性较大的信源输出分配较短的码字。为此,首先将r 个最小可能的信源输出合并成为一个新的输出,该输出的概率就是上述的r 个输出的概率之和。重复进行该过程直到只剩下一个输出为止。信源符号的个数q 与r 必须满足如下的关系式: q = (r-1) n + r n 为整数如果不满足上述关系式,可通过添加概率为零的信源符号来满足。这样就生成了一个树,从该树的根节点出发并将0、1 分别分配给任何r 个来自于相同节点的 分支,生成编码。可以证明用这种方法产生的编码在前向树类

图像压缩实验指导书

数字图像处理上机实验指导书 童立靖

北方工业大学计算机学院

实验四图像压缩 一、实验目的、要求与环境 目的: 通过实验,了解数字图象压缩的一般方法,掌握图像压缩的编程方法,了解图象压缩效果的评价方法。 1.2要求: 对自选的图象进行离散余弦变换,将其进行图象压缩处理,自行设计量化矩阵,与编码方法,并计算压缩比,提交实验报告。 进度较快的同学,可以设计三种不同的量化矩阵或编码方法,完成三种不同程度的压缩,对比解压缩后的图像质量,并进行分析。(给分较高) 环境: Windows XP操作系统 Microsoft Visual C++ (SP6) 自带8位灰度图像文件: : 3

二、实验步骤 1.准备相关图像文件。 2.在XP操作系统上,打开Microsoft Visual C++ (SP6),编写相关程序,完成对离散余弦变换系数的量化矩阵设计与编码方法。 4.对程序进行相关调试,修改程序,去除其中的BUG。 5. 利用自己准备的图像的文件,和编写的程序,将给定的图象进行压缩处理。 6.截屏,保留实验结果。 7. 计算压缩比, 进行实验结果分析。 8. 撰写并提交实验报告。 三、注意事项 1.实验任务: Windows下完成图像压缩的程序编写。 2.去多模式教学网上下载程序框架: 。 3.图像高度、宽度须是8的倍数。BMP 格式,8位灰度图像。 4.对于一幅彩色图像,可以在photoshop中,图像=》模式=》灰度=》扔掉 文件=》存储为=》保存=》选择8位深度=》确定。 5.实验完成时间: 先在课下完成程序编写,然后课上完成验机。 第15周的周一、第15周的周五,二次实验课。 6.请记录实验报告中相应的贴图: 可以用屏幕拷贝,然后再用Photoshop中的工具中修剪一下。 7.请每位同学用自己的图像文件进行实验: 若2位同学使用的图像文件一样,两位均依抄袭计0分。 8.请每位同学自己编写程序:

数据结构哈夫曼编码实验报告

数据结构实验报告 ――实验五简单哈夫曼编/译码的设计与实现本实验的目的是通过对简单哈夫曼编/译码系统的设计与实现来熟练掌握树型结 构在实际问题中的应用。此实验可以作为综合实验,阶段性实验时可以选择其中的几 个功能来设计和实现。 一、【问题描述】 利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码,此实验即设计这样的一个简单编/码系统。系统应该具有如下的几个功能: 1、接收原始数据。 从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树,并将它存于文件nodedata.dat中。 2、编码。 利用已建好的哈夫曼树(如不在存,则从文件nodedata.dat中读入),对文件中的正文进行编码,然后将结果存入文件code.dat中。 3、译码。利用已建好的哈夫曼树将文件code.dat中的代码进行译码,结果存入文件textfile.dat中。 4、打印编码规则。 即字符与编码的一一对应关系。 二、【数据结构设计】 1、构造哈夫曼树时使用静态链表作为哈夫曼树的存储。 在构造哈夫曼树时,设计一个结构体数组HuffNode保存哈夫曼树中各结点的信息,根据二叉树的性质可知,具有n个叶子结点的哈夫曼树共有2n-1个结点,所以数组HuffNode的大小设置为2n-1,描述结点的数据类型为: typedef struct { int weight;//结点权值 int parent; int lchild; int rchild; char inf; }HNodeType; 2、求哈夫曼编码时使用一维结构数组HuffCode作为哈夫曼编码信息的存储。 求哈夫曼编码,实质上就是在已建立的哈夫曼树中,从叶子结点开始,沿结点的双亲链域回退到根结点,没回退一步,就走过了哈夫曼树的一个分支,从而得到一位哈夫曼码值,由于一个字符的哈夫曼编码是从根结点到相应叶子结点所经过的路径上各分支所组成的0、1序列,因此先得到的分支代码为所求编码的低位码,后得到的分支代码位所求编码的高位码,所以设计如下数据类型: #define MAXBIT 10 typedef struct

游程编码实验报告

重庆交通大学信息科学与工程学院综合性设计性实验报告 专业:通信工程专业11级 学号:631106040222 姓名:徐国健 实验所属课程:移动通信原理与应用 实验室(中心):信息技术软件实验室 指导教师:李益才 2014年5月

一、题目 二值图像的游程编码及解码 二、仿真要求 对一幅图像进行编码压缩,然后解码恢复图像。 三、仿真方案详细设计 实验过程分为四步:分别是读入一副图象,将它转换成为二进制灰度图像,然后对其进行游程编码和压缩,最后恢复图象(只能恢复为二值图像)。 1、二值转换 所谓二值图像,就是指图像上的所有像素点的灰度值只用两种可能,不为“0”就为“1”,也就是整个图像呈现出明显的黑白效果。 2、游程编码原理 游程编码是一种无损压缩编码,对于二值图有效。游程编码的基本原理是:用一个符号值或串长代替具有相同值的连续符号,使符号长度少于原始数据的长度。据进行编码时,沿一定方向排列的具有相同灰度值的像素可看成是连续符号,用字串代替这些连续符号,可大幅度减少数据量。游程编码分为定长行程编码和不定长行程编码两种类型。游程编码是连续精确的编码,在传输过程中,如果其中一位符号发生错误,即可影响整个编码序列,使行程编码无法还原回原始数据。 3、游程编码算法 一般游程编码有两种算法,一种是使用1的起始位置和1的游程长度,另一种是只使用游程长度,如果第一个编码值为0,则表示游程长度编码是从0像素的长度开始。这次实验采

用的是前一种算法。两种方法各有优缺点:前一种存储比第二种困难,因此编程也比较复杂。而后一种需要知道第一个像素值,故压缩编码算法中需给出所读出的图的第一个像素值。 压缩流程图: 解压流程图:

哈夫曼编码实验报告

中南大学数据结构课程 姓名:刘阳 班级:信息0703 学号:0903070312 实验时间: 08.11.14 指导老师:赵颖

一、实验内容 根据输入的n 个带权结点,构造出哈夫曼树,并且把构造结果输出到屏幕。 二、实验说明 哈夫曼数,也称最优二叉树,是指对于一组带有确定权值的叶结点,构造的具有最小带权路径长度的二叉树。 设二叉树具有n 个带权值的叶结点,那么从根结点到各个叶结点的路径长度与相应结点权值的乘积之和叫做二叉树的带权路径长度WPL ,记作: WPL=k n k k L W *∑=1。在给定一组具有确定权值的叶结点,可以构造出不同的带权二 叉树。根据哈夫曼树的定义,一棵二叉树要使其WPL 值最小,必须使权值越大的叶结点越靠近根结点,而权值越小的叶结点越远离根结点。 在数据通讯中,经常需要将传送的文字转换成由二进制字符0,1组成的二进制串,我们称之为编码。例如,假设要传送的电文为ABACCDA ,电文中只含有A ,B ,C ,D 四种字符,若这四种字符采用下表所示的编码,则电文的代码为000010000100100111 000,长度为21。 在传送电文时,我们总是希望传送时间尽可能短,这就要求电文代码尽可能短。如果在编码时考虑字符出现的频率,让出现频率高的字符采用尽可能短的编码,出现频率低的字符采用稍长的编码,构造一种不等长编码,则电文的代码就可能更短。并且在建立不等长编码时,必须使任何一个字符的编码都不是另一个字符编码的前缀,以避免反译成原文时,编码出现多义性。 在哈夫曼编码树中,树的带权路径长度的含义是各个字符的码长与其出现次数的乘积之和,也就是电文的代码总长,所以采用哈夫曼树构造的编码是一种能使电文代码总长最短的不等长编码。 采用哈夫曼树进行编码,也不会产生上述二义性问题。因为,在哈夫曼树中,每个字符结点都是叶结点,它们不可能在根结点到其它字符结点的路径上,所以一个字符的哈夫曼编码不可能是另一个字符的哈夫曼编码的前缀,从而保证了译码的非二义性。

图像压缩编码

小波变换在图像压缩中的应用 学院精密仪器与光电子工程学院 专业光学工程 年级2014级 学号1014202009 姓名孙学斌

一、图像压缩编码 数字图像 图像是自然界景物的客观反映。自然界的图像无论在亮度、色彩,还是空间分布上都是以模拟函数的形式出现的,无法采用数字计算机进行处理、传输和存储。 在数字图像领域,将图像看成是由许多大小相同、形状一致的像素(Picture Element简称Pixel组成)用二维矩阵表示。图像的数字化包括取样和量化两个主要步骤。在空间将连续坐标离散化的过程为取样,而进一步将图像的幅度值整数化的过程称为量化。 图像编码技术 数据压缩就是以较少的数据量表示信源以原始形式所代表的信息,其目的在于节省存储空间、传输时间、信号频带或发送能量等。其组成系统如图所示。 过程应尽量保证去除冗余量而不会减少或较少减少信息量,即压缩后的数据要能够完全或在一定的容差内近似恢复。完全恢复被压缩信源信息的方法称为无损压缩或无失真压缩,近似恢复的方法称为有损压缩或有失真压缩。 图像压缩编码的必要性与可行性 1.图像压缩编码的必要性 采用数字技术会使信号处理技术性能大为提高,但其数据量的增加也是十分惊人的。图像数据更是多媒体、网络通信等技术重点研究的压缩对象。不加压缩的图像数据是计算机的处理速度、通信信道的容量等所无法承受的。 如果将上述的图像信号压缩几倍、十几倍、甚至上百倍,将十分有利于图像的存储和传输。可见,在现有硬件设施条件下,对图像信号本身进行压缩是解决上述矛盾的主要出路。 2.图像压缩编码的可能性 图像数据量大,同时冗余数据也是客观存在的。在有些图像中可压缩的可能性很大。一般图像中存在着以下数据冗余因素。 (1)编码冗余 编码冗余也称信息熵冗余。去除信源编码中的冗余量可以在对信息无损的前提下减少代表信息的数据量。对图像进行编码时,要建立表达图像信息的一系列符号码本。如果码本不能使每个像素所需的平均比特数最小,则说明存在编码冗余,就存在压缩的可能性。 (2)空间冗余

实验三图像压缩编码技术

太原理工大学现代科技学院数字图像处理课程实验报告 专业班级测控14-4 学号2014101874 姓名杨东倡

指导教师刘帆

实验名称实验三、图像压缩编码技术同组人 专业班级测控14-4 姓名杨东倡学号2014101874 成绩 实验三、图像压缩编码技术 一、实验目的 1、理解有损压缩和无损压缩的概念; 2、理解图像压缩的主要原则和目的; 3、了解几种常用的图像压缩编码方式; 4、利用MATLAB 程序进行图像压缩编码。 二、实验原理 1、图像压缩原理 图像压缩主要目的是为了节省存储空间,增加传输速度。图像压缩的理想标准是信息丢失最少,压缩比例最大。不损失图像质量的压缩称为无损压缩,无损压缩不可能达到很高的压缩比;损失图像质量的压缩称为有损压缩,高的压缩比是以牺牲图像质量为代价的。压缩的实现方法是对图像重新进行编码,希望用更少的数据表示图像。 信息的冗余量有许多种,如空间冗余,时间冗余,结构冗余,知识冗余,视觉冗余等,数据压缩实质上是减少这些冗余量。高效编码的主要方法是尽可能去除图像中的冗余成分,从而以最小的码元包含最大的图像信息。 编码压缩方法有许多种,从不同的角度出发有不同的分类方法,从信息论角度出发可分为两大类。 (1)冗余度压缩方法,也称无损压缩、信息保持编码或熵编码。具体说就是解码图像和压缩编码前的图像严格相同,没有失真,从数学上讲是一种可逆运算。 (2)信息量压缩方法,也称有损压缩、失真度编码或烟压缩编码。也就是说解码图像和原始图像是有差别的,允许有一定的失真。 应用在多媒体中的图像压缩编码方法,从压缩编码算法原理上可以分为以下3类: (1)无损压缩编码种类 哈夫曼(Huffman )编码,算术编码,行程(RLE )编码,Lempel zev 编码。 …… …… …… …… …… …… … …装 …… …… …… …… …………………订………… …… …… …… …… …… ……线…………………………

图像压缩与编码

实验项目3、图像压缩与编码 一、实验目的 (1)理解图像压缩编码的基本原理; (2)掌握用程序代码实现DCT变换编码; (3)掌握用程序代码实现游程编码。 二、实验原理及知识点 1、图像压缩编码 图像信号经过数字化后,数据量相当大,很难直接进行保存。为了提高信道利用率和在有限的信道容量下传输更多的图像信息,必须对图像进行压缩编码。 图像压缩技术标准一般可分为如下几种:JPEG压缩(JPEG Compression)、JPEG 2000 、H.26X标准(H.26X standards)以及MPEG标准(MPEG standards)。数字压缩技术的性能指标包括:压缩比、平均码字长度、编码效率、冗余度。 从信息论角度分,可以将图像的压缩编码方法分为无失真压缩编码和有限失真编码。前者主要包括Huffman编码、算术编码和游程编码;后者主要包括预测编码、变换编码和矢量量化编码以及运动检测和运动补偿技术。 图像数据压缩的目的是在满足一定图像质量的条件下,用尽可能少的比特数来表示原始图像,以提高图像传输的效率和减少图像存储的容量,在信息论中称为信源编码。图像压缩是通过删除图像数据中冗余的或者不必要的部分来减小图像数据量的技术,压缩过程就是编码过程,解压缩过程就是解码过程。 2、游程编码 某些图像特别是计算机生成的图像往往包含许多颜色相同的块,在这些块中,许多连续的扫描行或者同一扫描行上有许多连续的像素都具有相同的颜色值。在这些情况下就不需要存储每一个像素的颜色值,而是仅仅存储一个像素值以及具有相同颜色的像素数目,将这种编码方法称为游程(或行程)编码,连续的具有相同颜色值的所有像素构成一个行程。 在对图像数据进行编码时,沿一定方向排列的具有相同灰度值的像素可看成是连续符号,用字串代替这些连续符号,可大幅度减少数据量。游程编码记录方式有两种:①逐行记录每个游程的终点列号:②逐行记录每个游程的长度 3、DCT变换编码 变换编码是在变换域进行图像压缩的一种技术。图1显示了一个典型的变换编码系统。 压缩 图像输入图 像N×N 图1 变换编码系统 在变换编码系统中,如果正变换采用DCT变换就称为DCT变换(离散余弦变换)编码系统。DCT用于把一幅图像映射为一组变换系数,然后对系数进行量化和编码。对于大多数的正常图像来说,多数系数具有较小的数值且可以被粗略地量化(或者完全抛弃),而产生的图像失真较小。

哈夫曼编码译码器实验报告免费

哈夫曼编码译码器实验报告(免费)

————————————————————————————————作者:————————————————————————————————日期:

问题解析与解题方法 问题分析: 设计一个哈夫曼编码、译码系统。对一个ASCII编码的文本文件中的字符进行哈夫曼编码,生成编码文件;反过来,可将编码文件译码还原为一个文本文件。 (1)从文件中读入任意一篇英文短文(文件为ASCII编码,扩展名为txt); (2)统计并输出不同字符在文章中出现的频率(空格、换行、标点等也按字符处理);(3)根据字符频率构造哈夫曼树,并给出每个字符的哈夫曼编码; (4)将文本文件利用哈夫曼树进行编码,存储成压缩文件(编码文件后缀名.huf)(5)用哈夫曼编码来存储文件,并和输入文本文件大小进行比较,计算文件压缩率;(6)进行译码,将huf文件译码为ASCII编码的txt文件,与原txt文件进行比较。 根据上述过程可以知道该编码译码器的关键在于字符统计和哈夫曼树的创建以及解码。 哈夫曼树的理论创建过程如下: 一、构成初始集合 对给定的n个权值{W1,W2,W3,...,Wi,...,Wn}构成n棵二叉树的初始集合 F={T1,T2,T3,...,Ti,...,Tn},其中每棵二叉树Ti中只有一个权值为Wi的根结 点,它的左右子树均为空。 二、选取左右子树 在F中选取两棵根结点权值最小的树作为新构造的二叉树的左右子树,新二 叉树的根结点的权值为其左右子树的根结点的权值之和。 三、删除左右子树 从F中删除这两棵树,并把这棵新的二叉树同样以升序排列加入到集合F中。 四、重复二和三两步, 重复二和三两步,直到集合F中只有一棵二叉树为止。 因此,有如下分析: 1.我们需要一个功能函数对ASCII码的初始化并需要一个数组来保存它们; 2.定义代表森林的数组,在创建哈夫曼树的过程当中保存被选中的字符,即给定报文 中出现的字符,模拟哈夫曼树选取和删除左右子树的过程; 3.自底而上地创建哈夫曼树,保存根的地址和每个叶节点的地址,即字符的地址,然 后自底而上检索,首尾对换调整为哈夫曼树实现哈弗曼编码; 4.从哈弗曼编码文件当中读入字符,根据当前字符为0或者1的状况访问左子树或者 右孩子,实现解码; 5.使用文件读写操作哈夫曼编码和解码结果的写入; 解题方法: 结构体、数组、类的定义: 1.定义结构体类型的signode 作为哈夫曼树的节点,定义结构体类型的hufnode 作为

实验三 图像压缩编码技术

实验报告 课程名称: 数字图像处理 实验名称: 图像压缩编码技术 实验地点: 明向校区D001机房 专业班级: 测控1401班 学号: 学生姓名: 郭佳鑫 指导教师: 刘 帆 2017年 4月 21日 2014001796

一、实验目的 1.理解有损压缩和无损压缩的概念。 2.理解图像压缩的主要原则和目的。 3.了解几种常用的图像压缩编码方式。 4.利用MATLAB程序进行图像压缩编码。 二、实验原理 1、图像压缩原理 图像压缩主要目的是为了节省存储空间,增加传输速度。图像压缩的理想标准是信息丢失最少,压缩比例最大。不损失图像质量的压缩称为无损压缩,无损压缩不可能达到很高的压缩比;损失图像质量的压缩称为有损压缩,高的压缩比是以牺牲图像质量为代价的。压缩的实现方法是对图像重新进行编码,希望用更少的数据表示图像。 信息的冗余量有许多种,如空间冗余,时间冗余,结构冗余,知识冗余,视觉冗余等,数据压缩实质上是减少这些冗余量。高效编码的主要方法是尽可能去除图像中的冗余成分,从而以最小的码元包含最大的图像信息。 2、编码压缩方法有许多种,从不同的角度出发有不同的分类方法,从信息论角度出发可分为两大类。 (1)冗余度压缩方法,也称无损压缩、信息保持编码或熵编码。具体说就是解码图像和压缩编码前的图像严格相同,没有失真,从数学上讲是一种可逆运算。 (2)信息量压缩方法,也称有损压缩、失真度编码或烟压缩编码。也就是说解码图像和原始图像是有差别的,允许有一定的失真。 3、应用在多媒体中的图像压缩编码方法,从压缩编码算法原理上可以分为以下3类: (1)无损压缩编码种类 哈夫曼(Huffman)编码,算术编码,行程(RLE)编码,Lempel zev编码。 (2)有损压缩编码种类 预测编码,DPCM,运动补偿; 频率域方法:正交变换编码(如DCT),子带编码; 空间域方法:统计分块编码; 模型方法:分形编码,模型基编码; 基于重要性:滤波,子采样,比特分配,向量量化; (3)混合编码。 有JBIG,H.261,JPEG,MPEG等技术标准。 本实验主要利用MA TLAB程序进行赫夫曼(Huffman)编码和行程编码(Run Length Encoding,RLE)。 三、实验仪器 1.计算机。 2.MATLAB、Photoshop等程序。 3.移动式存储器(软盘、U盘等)。 4.记录用的笔、纸。

图像编码实验报告

图 像 压 缩 编 码(实验报告)

一、实验目的 1.理解图像压缩目的及意义; 2.理解有损压缩和无损压缩的概念; 3.了解几种常用的图像压缩编码方法; 4.利用MATLAB程序进行图像压缩。 二、实验原理 图像压缩主要目的是为了节省存储空间,提高存储、处理、传输速度。虽然表示图像需要大量的数据,但数据是高度相关的,或者说存在冗余(Redundancy),去掉这些冗余信息可以有效地压缩图像,同时不会损坏图像的有效信息。信息的冗余量有许多种,如空间冗余,时间冗余,结构冗余,知识冗余,视觉冗余等,数据压缩实质上是减少这些冗余量。高效编码的主要方法是尽可能去除图像中的冗余成分,从而以最小的码元包含最大的图像信息。 图像压缩的理想标准是信息丢失最少,压缩比例最大。不损失图像质量的压缩称为无损压缩,无损压缩不可能达到很高的压缩比;损失图像质量的压缩称为有损压缩,高的压缩比是以牺牲图像质量为代价的。压缩的实现方法是对图像重新进行编码,希望用更少的数据表示图像。 编码压缩方法有许多种,从不同的角度出发有不同的分类方法,从信息论角度出发可分为两大类。 (1)冗余度压缩方法,也称无损压缩、信息保持编码或嫡编码。具体说就是解码图像和压缩编码前的图像严格相同,没有失真,从数学上讲是一种可逆运算。 (2)信息量压缩方法,也称有损压缩、失真度编码或烟压缩编码。也就是说解码图像和原始图像是有差别的,允许有一定的失真。 应用在多媒体中的图像压缩编码方法,从压缩编码算法原理上可以分为以下几类: (1)熵编码。熵编码是纯粹基于信号统计特性的编码技术,是一种无损编码。熵编码的基本原理是给出现概率较大的符号赋予一个短码字,而给出现概率较小的符号赋予一个长码字,从而使得最终的平均码长很小。

哈夫曼编码实验报告

二、实验内容 1.根据给出的字符以及这些字符的使用频率构建哈夫曼树。 2.根据哈夫曼树对字符进行哈夫曼编码,并保存这些编码。 三、实验原理、方法和手段 试构造出问题模型,并编程实现这一问题的求解。根据实验内容编程,上机调试、得出正确的运行程序;编译运行程序,观察运行情况和输出结果。 六、实验步骤 1. 建立哈夫曼树的存储结构和哈夫曼编码的存储结构。 2. 建立哈夫曼树的函数; 3. 哈夫曼编码的函数; 4.哈夫曼编码的解码函数 5. 设计测试用例进行测试。 七、实验报告 记录数据结构与算法设计的过程及实验步骤、上机过程中遇到的困难及解决办法、遗留的问题、托福考位意见和建议等。格式见实验报告模板。测试数据及测试结果请在上交的资料中写明。

#include #include #define N 50#define M 2*N-1 const int INF=1e9+7;typedef struct//哈夫曼树的存储结构 { char data[6]; double weight; int parent; int lchild; int rchild; } HTNode;typedef struct//存放哈夫曼码存储结构 { char cd[N]; int start; } HCode;void CreateHT(HTNode ht[],int n0) //建立哈夫曼树的函数{ int i,k,lnode,rnode; double min1,min2; for (i=0;i<2*n0-1;i++) ht[i].parent=ht[i].lchild=ht[i].rchild=-1; for (i=n0;i<=2*n0-2;i++) {

实验八、图像变换压缩编码

实验八、图像变换压缩编码 一,目的 掌握变换压缩编码的原理与方法 了解有损压缩编码图像的质量评估的指标 二,实验条件 1)微型计算机:INTEL 奔腾及更高 2)MATLAB 3)典型的灰度、彩色图像文件 三,原理 1)去除数据冗余度可以有效地压缩数据 2)图像编码压缩的主要技术指标:压缩比,客观评价SNR,主观评价 四,实验内容 1.以DCT变换为例,采用标准亮度量化表,得有损压缩的变换值,并计算并显示其直方图; 2.采用标准量化表的上述变换值反量化回去后采用DCT变换回图像,比较并计算压缩前后图像的差异(均方差MSE,峰值信噪比PSNR等); 3.根据由1计算得到的统计直方图试判断采用HUFFMAN编码的平均码长。MATLAB具体的实现代码: clear ALL; cd d: %问题一,DCT变换,运用标准亮度量化表,得到有损压缩的量化值,并显示其直方图%jpeg亮度量化表 M=[16 11 10 16 24 40 51 61; 12 12 14 19 26 58 60 55; 14 13 16 24 40 67 69 56; 14 17 22 29 51 87 80 62; 18 22 37 56 68 109 103 77; 24 35 55 64 81 104 113 92; 49 64 78 87 103 121 120 101; 72 92 95 98 112 100 103 99; ]; I_=imread('test.jpg');%读入原始图像 I1=rgb2gray(I_);I2=double(I1); J = imresize(I2,[512 512]);%调整图像的大小 TEMP=zeros(8,8);%产生8*8临时矩阵 lianghuazhi=zeros(512,512);%产生512*512量化值矩阵 a=0;b=0; while 1 for x=1:1:8 for y=1:1:8

图像压缩编码

Discussion on Wavelet B ases Selection for Digital Image Compression H AN Fang2f ang,XU Shuang,ZHENG De2zhong (College o f Electric Engineering,Yanshan Univer sity,Qinhuangdao Hebei066004,China) Abstract: This paper studies the selection of optimal wavelet bases.The merits of biorthog onal spline wavelets are dis2 cussed and dem onstrated.C ontinuity of spline derivatives assures wavelets sm ooth and symmetry of biorthog onal wavelets makes the filters have linear phase.Those features can reduce distortion and guarantee the reconstructed images quality. K ey w ords: Optimal wavelet bases;Image com pression;S pline wavelets;Biorthog onal wavelets 关于数字图像压缩中小波基选择问题的探讨① 韩芳芳,徐 爽,郑德忠 (燕山大学,电气工程学院,河北 秦皇岛 066004) 摘要:针对数字图像压缩编码中最优小波基的选择问题,论证了双正交样条小波基的优点,并对其进行了推导。样条小波的导数连续性保证了小波基的光滑性,双正交对偶小波的对称性使得滤波器具有线性相位,可减小失真,保证重构图像的质量。 关键词:最优小波基;图像压缩;样条小波;双正交小波 中图分类号:T N919 文献标识码:A 文章编号:1004-1699(2004)01-0154-04 图像是人类感知信息的重要途径之一。然而图像经过采样及量化编码后数据量巨大,给传输与存储带来很多困难,因而需要对图像数据进行有效的压缩。在F ourier分析基础上发展起来的小波分析,提供了一种自适应的时域和频域同时局部化的分析方法,通过伸缩和平移等运算功能进行多尺度细化分析,能够有效地从信号中提取信息。小波分析用于数字图像压缩,压缩比高,压缩速度快,压缩后信号与图像的特征不变,且在传递过程中可以抗干扰。因此小波分析成为数字图像处理及压缩编码的有力工具。 如何选择最优小波基是图像压缩编码中所面临的一个棘手问题。对于图像信号而言,一方面要对巨大的数据量进行有效压缩,另一方面,要保持重建图像的质量满足视觉要求。小波基的选择存在一些标准,如平滑性、逼近精度、支撑大小和滤波频率等,如何最佳的组合这些特征是一个难点所在。 1 小波基的选择问题 如何最合理、快速的选择小波基,目前这方面的研究并无定论。在小波基的选择中,一般较为看重以下几方面: 平滑性与消失矩。消失矩表明了小波变换后的能量集中程度,消失矩阶数很大时,精细尺度下的高频部分数值有许多是小得可以忽略的(奇异点除外)[1]。从重构图像质量角度而言,平滑性的影响要 2004年3月 传 感 技 术 学 报 第1期 ①收稿日期:2003211210 作者简介:韩芳芳(1978-)女,硕士研究生,主要研究方向为视频信号压缩编码; 徐 爽(1978-)女,硕士研究生,主要研究方向为信号处理与语音编码; 郑德忠(1952-)男,教授,博士生导师,河北省人工智能学会副理事长,中国电子协会高级会员,主要从事信号 处理和先进控制等方面的研究工作,已在国内外发表论文50余篇。qhdzdz@https://www.doczj.com/doc/2b5983043.html,.

哈夫曼编码译码系统课程设计实验报告(含源代码C++_C语言)

目录 摘要………………………………………………………………………..………………II Abstract …………………………………………………………………………..………... II 第一章课题描述 (1) 1.1 问题描述 (1) 1.2 需求分析…………………………………………………..…………………………… 1 1.3 程序设计目标…………………………………………………………………………… 第二章设计简介及设计方案论述 (2) 2.1 设计简介 (2) 2.2 设计方案论述 (2) 2.3 概要设计 (2) 第三章详细设计 (4) 3.1 哈夫曼树 (4) 3.2哈夫曼算 法 (4) 3.2.1基本思 想 (4) 3.2.2存储结 构 (4)

3.3 哈夫曼编码 (5) 3.4 文件I/O 流 (6) 3.4.1 文件流 (6) 3.4.2 文件的打开与关闭 (7) 3.4.3 文件的读写 (7) 3..5 C语言文件处理方式…………………………………………………………………… 第四章设计结果及分析 (8) 4.1 设计系统功能 (8) 4.2 进行系统测试 (8) 总结 (13) 致谢 (14) 参考文献 (15) 附录主要程序代码 (16) 摘要 在这个信息高速发展的时代,每时每刻都在进行着大量信息的传递,到处都离不开信息,它贯穿在人们日常的生活生产之中,对人们的影响日趋扩大,而利用哈夫曼编码

进行通信则可以大大提高信道利用率,缩短信息传输时间,降低传输成本。在生产中则可以更大可能的降低成本从而获得更大的利润,这也是信息时代发展的趋势所在。本课程设计的目的是使学生学会分析待加工处理数据的特性,以便选择适当的逻辑结构、存储结构以及进行相应的算法设计。学生在学习数据结构和算法设计的同时,培养学生的抽象思维能力、逻辑推理能力和创造性的思维方法,增强分析问题和解决问题的能力。此次设计的哈夫曼编码译码系统,实现对给定报文的编码和译码,并且任意输入报文可以实现频数的统计,建立哈夫曼树以及编码译码的功能。这是一个拥有完备功能的系统程序,对将所学到的知识运用到实践中,具有很好的学习和研究价值. 关键词:信息;通讯;编码;译码;程序 Abstract This is a date that information speeding highly development and transmit

语音变换和压缩编码实验

实验三.语音变换和压缩编码实验 通过键盘和液晶选择“菜单”中的“二. 语音变换” 1.语音模数转换实验 (1)在语音变换下选择“1. 语音模数变换”; (2)按下AMBE2000的复位按钮,对AMBE2000进行复位; (3)K501拨到“SIN”,将输入的模拟信号设置为2kHZ的正弦信号,通过测试点TP501可以观测到输入给AD73311的模拟信号,调节面板上的W501,可以改变输入信号的幅 度; (4)通过测试点TP502观测AD73311中A/D和D/A变换的时钟输出; (5)通过测试点TP503观测AD73311中数字输出和输入的帧同步信号; (6)通过测试点TP504观测AD73311的A/D转换后的数字输出信号; (7)通过测试点TP505观测AD73311的D/A转换前的数字输入信号; (8)通过测试点TP506观测AD73311完成D/A转换后的模拟信号,并可以通过调节面板上的W502改变输出信号的幅度; (9)将K501拨到“MIC”,将输入的模拟信号设置为麦克风输入的语音信号,插入麦克风和耳机,可以从耳机中听到麦克风的声音。 测量操作与测量结果: (1)CH1连接到TP501;CH2连接到TP506; (2)按下示波器的“AUTO”键; (3)分别将CH1和CH2的电压档设为“200mV”,时间档设为“200us”; (4)将CH1向移动,CH2向下移动。 (5)调节面板上的W501和W502,分别将TP501和TP506信号的幅度调整到300 mV和500 mV左右。 (6)按“RUN/STOP”键停止波形采样。 (7)CH1为输入的模拟2KHz正弦波,CH2为输出恢复信号,可以看到恢复波形比原始波形质量变差了。如图2-1-TP501~TP506。 2-1-TP501~TP506

相关主题
文本预览
相关文档 最新文档