图像压缩算法

图像压缩算法
图像压缩算法

《算法设计与分析》课程报告

姓名:文亮

学号:201322220254

学院:信息与软件工程学院

老师:屈老师;王老师

算法实现与应用——《算法设计与分析》课程报告

一. 基本要求 1. 题目: 图像压缩 2. 问题描述

掌握基于DCT 变换的图像压缩的基本原理及其实现步骤;对同一幅原 始图像进行压缩,进一步掌握DCT 和图像压缩。

3. 算法基本思想

图像数据压缩的目的是在满足一定图像质量的条件下,用尽可能少的比特数来表示原始图像,以提高图像传输的效率和减少图像存储的容量,在信息论中称为信源编码。图像压缩是通过删除图像数据中冗余的或者不必要的部分来减小图像数据量的技术,压缩过程就是编码过程,解压缩过程就是解码过程。压缩技术分为无损压缩和有损压缩两大类,前者在解码时可以精确地恢复原图像,没有任何损失;后者在解码时只能近似原图像,不能无失真地恢复原图像。

假设有一个无记忆的信源,它产生的消息为{}N ≤≤i a i 1,其出现的概率是已知的,记为()i a p 。则其信息量定义为:

()()i i a p a log -=I

由此可见一个消息出现的可能性越小,其信息量就越多,其出现对信息的贡献量越大,反之亦然。

信源的平均信息量称为“熵”(entropy ),可以表示为:

()()[]()()∑∑==-=?=H N

i i i N

i i i a p a p a p I a p 1

1

log

对上式取以2为底的对数时,单位为比特(bits ):

()()∑=-=H N

i i i a p a p 1log

根据香农(Shannon )无噪声编码定理,对于熵为H 的信号源,对其进行无

失真编码所可能达到的最低比特数为,这里为一任意小的正数,因此可能达到的 最大压缩比为:

H

≈+H =

B

B C εmax 其中B 是原始图像的平均比特率。

在图像压缩中,压缩比是一个重要的衡量指标。可以定义压缩比为:

H

=

B C 其中B :原始数据的平均压缩比;H :压缩数据的平均比特率 图像压缩的基本模型

图像编码包括两个阶段,前一个阶段就是利用预测模型或正交模型对图像信号进行变换;后一个阶段是利用已变换信号的统计特性,对其分配适当的代码来进行编码传输。

编码器与解码器的结构分别如图(a)、(b)。

图(a ) 编码器结构

图(b ) 解码器结构

在发送端,输入的原始图像首先经过DCT 变换后,其低频分量都集中在左上角,高频分量分布在右下角(DCT 变换实际上是空间域的低通滤波器)。由于该低频分量包含了图像的主要信息,而高频分量与之相比就不那么重要了,所以可以忽略高频分量,从而达到压缩的目的。将高频分量去掉就要用到量化,这是产生信息损失的根源。

“量化”的主要任务是用有限个离散电平来近似表达已抽取出的信息。在此采用均匀量化,通过改变程序中的量化因子Q 的值以得到不同压缩比的图像。

Huffman编码时,首先对经DCT变换及量化后的图像收据扫描一遍,计算出各种像素出现的概率;然后按概率的大小指定不同长度的唯一码字,由此得到一张Huffman表。编码后的图像记录的是每个像素的码字,而码字与量化后像素值的对应关系记录在码表中。生成的一维字符矩阵即为实际中要传输的序列,压缩后的图像数据在信道中进行传输。

在接收端,接收到的压缩图像数据首先经过Huffman译码,通过搜索已生成的Huffman表,根据码字与量化后像素值的对应关系,搜索出与码字对应的像素值,并转换为二维矩阵。反量化时将以上二维矩阵中的每一个像素值乘以量化因子Q。最后通过DCT反变换得到重建图像。

●离散余弦变换(DCT)

当前处于信息高速流通时代,要求在保证质量的前提下,以较小的空间存储图像和较小的比特率传输图像,这就需要采用各种图像压缩编码技术来实现。DCT 变换是最小均方误差条件得出的次最佳正交变换,且已经获得广泛的应用,并已经成为许多图像编码国际标准的核心。离散余弦变换的变换核是余弦函数,计算速度较快,有利于图像压缩和其他处理。在大多数情况下,DCT用于图像的压缩操作中。JPEG图像格式的压缩算法采用的是DCT。

二.算法实现

●程序源代码

function b = blkproc(varargin)

[a, block, border, fun, params, padval] = parse_inputs(varargin{:}); [ma,na] = size(a);

mpad = rem(ma,block(1)); if mpad>0, mpad = block(1)-mpad; end

npad = rem(na,block(2)); if npad>0, npad = block(2)-npad; end

if (isa(a, 'uint8'))

if (padval == 1)

aa = repmat(uint8(1), ma+mpad+2*border(1),na+npad+2*border(2));

else

aa = repmat(uint8(0), ma+mpad+2*border(1),na+npad+2*border(2));

end

elseif isa(a, 'uint16')

if (padval == 1)

aa = repmat(uint16(1), ma+mpad+2*border(1),na+npad+2*border(2));

else

aa = repmat(uint16(0), ma+mpad+2*border(1),na+npad+2*border(2));

end

else

if (padval == 1)

aa = ones(ma+mpad+2*border(1),na+npad+2*border(2));

else

aa = zeros(ma+mpad+2*border(1),na+npad+2*border(2));

end

end

aa(border(1)+(1:ma),border(2)+(1:na)) = a;

m = block(1) + 2*border(1);

n = block(2) + 2*border(2);

mblocks = (ma+mpad)/block(1);

nblocks = (na+npad)/block(2);

arows = 1:m; acols = 1:n;

x = aa(arows, acols);

firstBlock = feval(fun,x,params{:});

if (isempty(firstBlock))

style = 'e';

b = [];

elseif (all(size(firstBlock) == size(x)))

style = 's'; % same

if (isa(firstBlock, 'uint8'))

b = repmat(uint8(0), ma+mpad, na+npad);

elseif (isa(firstBlock, 'uint16'))

b = repmat(uint16(0), ma+mpad, na+npad);

else

b = zeros(ma+mpad, na+npad);

end

brows = 1:block(1);

bcols = 1:block(2);

mb = block(1);

nb = block(2);

xrows = brows + border(1);

xcols = bcols + border(2);

b(brows, bcols) = firstBlock(xrows, xcols);

elseif (all(size(firstBlock) == (size(x)-2*border)))

style = 'b'; % border

if (isa(firstBlock, 'uint8'))

b = repmat(uint8(0), ma+mpad, na+npad);

elseif (isa(firstBlock, 'uint16'))

b = repmat(uint16(0), ma+mpad, na+npad);

else

b = zeros(ma+mpad, na+npad);

end

brows = 1:block(1);

bcols = 1:block(2);

b(brows, bcols) = firstBlock;

mb = block(1);

nb = block(2);

else

style = 'd'; % different

[P,Q] = size(firstBlock);

brows = 1:P;

bcols = 1:Q;

mb = P;

nb = Q;

if (isa(firstBlock, 'uint8'))

b = repmat(uint8(0), mblocks*P, nblocks*Q);

elseif (isa(firstBlock, 'uint16'))

b = repmat(uint16(0), mblocks*P, nblocks*Q);

else

b = zeros(mblocks*P, nblocks*Q);

end

b(brows, bcols) = firstBlock;

end

[rr,cc] = meshgrid(0:(mblocks-1), 0:(nblocks-1));

rr = rr(:);

cc = cc(:);

mma = block(1);

nna = block(2);

for k = 2:length(rr)

x = aa(rr(k)*mma+arows,cc(k)*nna+acols);

c = feval(fun,x,params{:});

if (style == 's')

b(rr(k)*mb+brows,cc(k)*nb+bcols) = c(xrows,xcols); elseif (style == 'b')

b(rr(k)*mb+brows,cc(k)*nb+bcols) = c;

elseif (style == 'd')

b(rr(k)*mb+brows,cc(k)*nb+bcols) = c;

end

end

if ((style == 's') || (style == 'b'))

b = b(1:ma,1:na);

end

function[a, block, border, fun, params, padval] = parse_inputs(varargin) iptchecknargin(2,Inf,nargin,mfilename);

switch nargin

case 3

% BLKPROC(A, [m n], 'fun')

a = varargin{1};

block = varargin{2};

border = [0 0];

fun = fcnchk(varargin{3});

params = cell(0,0);

padval = 0;

case 4

if (strcmp(varargin{2}, 'indexed'))

% BLKPROC(X, 'indexed', [m n], 'fun')

a = varargin{1};

block = varargin{3};

border = [0 0];

fun = fcnchk(varargin{4});

params = cell(0,0);

padval = 1;

else

params = varargin(4);

[fun,msg] = fcnchk(varargin{3}, length(params));

if isempty(msg)

% BLKPROC(A, [m n], 'fun', P1)

a = varargin{1};

block = varargin{2};

border = [0 0];

padval = 0;

else

% BLKPROC(A, [m n], [mb nb], 'fun')

a = varargin{1};

block = varargin{2};

border = varargin{3};

fun = fcnchk(varargin{4});

params = cell(0,0);

padval = 0;

end

end

otherwise

if (strcmp(varargin{2}, 'indexed'))

params = varargin(5:end);

[fun,msg] = fcnchk(varargin{4},length(params));

if isempty(msg)

% BLKPROC(A, 'indexed', [m n], 'fun', P1, ...)

a = varargin{1};

block = varargin{3};

border = [0 0];

padval = 1;

else

% BLKPROC(A, 'indexed', [m n], [mb nb], 'fun', P1, ...)

a = varargin{1};

block = varargin{3};

border = varargin{4};

params = varargin(6:end);

fun = fcnchk(varargin{5},length(params));

padval = 1;

end

else

params = varargin(4:end);

[fun,msg] = fcnchk(varargin{3},length(params));

if isempty(msg)

% BLKPROC(A, [m n], 'fun', P1, ...)

a = varargin{1};

block = varargin{2};

border = [0 0];

padval = 0;

else

% BLKPROC(A, [m n], [mb nb], 'fun', P1, ...)

a = varargin{1};

block = varargin{2};

border = varargin{3};

params = varargin(5:end);

fun = fcnchk(varargin{4}, length(params));

padval = 0;

end

end

end

if (islogical(a) || isa(a,'uint8') || isa(a, 'uint16'))

padval = 0;

end

clear

clc

I=imread('C:\Users\lenovo.lenovo-PC\Desktop\2aê?í?.jpg'); I=rgb2gray(I);

I=im2double(I);

T=dctmtx(8);

B=blkproc(I,[8 8],'P1*x*P2',T,T');

mask = [1 1 1 1 0 0 0 0

1 1 1 0 0 0 0 0

1 1 0 0 0 0 0 0

1 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0];

B2 = blkproc(B,[8 8],@(x)mask.* x);

I2 = blkproc(B2,[8 8],'P1*x*P2',T',T);

subplot(1,2,1);

imshow(I);

title('?-ê?í???');

subplot(1,2,2);

imshow(I2);

title('?1??oóí???');

figure;

error = I.^2-I2.^2;

MSE = sum(error(:))/prod(size(I2));

B3 = B-B2;

I3 = blkproc(B3,[8 8],'P1*x*P2',T,T');

imshow(I3);

title('?ù·??ó2?í???');

主要函数功能描述

Blkproc:对图像进行分块处理

MSE :计算均方误差

I2 = blkproc(B2,[16 16],'P1*x*P2',T',T):压缩操作I=rgb2gray(I):将彩色图像转化为灰度图像

●测试数据

测试图像为I1,图像大小为756

1021?

测试图像为I2,图像大小为671

879?

●运行结果

图像压缩算法的分析与研究本科毕业设计论文

图像压缩算法的分析与研究本科毕业设计论文 河南理工大学 本科毕业设计 图像压缩算法的分析与研究 摘? 要 随着多媒体技术和通讯技术的不断发展, 多媒体娱乐、信息高速公路等不断对信息数据的存储和传输提出了更高的要求, 也给现有的有限带宽以严峻的考验, 特别是具有庞大数据量的数字图像通信, 更难以传输和存储, 极大地制约了图像通信的发展, 因此图像压缩技术受到了越来越多的关注。图像压缩的目的就是把原来较大的图像用尽量少的字节表示和传输,并且要求复原图像有较好的质量。利用图像压缩, 可以减轻图像存储和传输的负担, 使图像在网络上实现快速传输和实时处理。 本文主要介绍数字图像处理的发展概况,图像压缩处理的原理和特点,对多种压缩编码方法进行描述和比较,详细讨论了Huffman编码的图像压缩处理的原理和应用。 关键词:图像处理,图像压缩,压缩算法,图像编码,霍夫曼编码

Abstract With the developing of multimedia technology and communication technology, multimedia entertainment, information, information highway have kept on data storage and transmission put forward higher requirements, but also to the limited bandwidth available to a severe test, especially with large data amount of digital image communication, more difficult to transport and storage, greatly restricted the development of image communication, image compression techniques are therefore more and more attention. The purpose of image compression is to exhaust the original image less the larger the bytes and transmission, and requires better quality of reconstructed images. Use of image compression, image storage

图像压缩算法论文

算法论文 基于huffman编码的图像压缩技术 姓名:康凯 学院:计算机学院 专业:网络工程1102 学号:201126680208 摘要 随着多媒体技术和通讯技术的不断发展, 多媒体娱乐、信息高速公路等不断对信息数据的存储和传输提出了更高的要求, 也给现有的有限带宽以严峻的考验, 特别是具有庞大数据量的数字图像通信, 更难以传输和存储, 极大地制约了图像通信的发展, 因此图像压缩技术受到了越来越多的关注。图像压缩的目的就是把原来较大的图像用尽量少的字节表示和传输,并且要求复原图像有较好的质量。利用图像压缩, 可以减轻图像存储和传输的负担, 使图像在网络上实现快速传输和实时处理。 本文主要介绍数字图像处理的发展概况,图像压缩处理的原理和特点,对多种压缩编码方法进行描述和比较,详细讨论了Huffman编码的图像压缩处理的原理和应用。 关键词:图像处理,图像压缩,压缩算法,图像编码,霍夫曼编码 Abstract With the developing of multimedia technology and communication technology, multimedia entertainment, information, information highway have kept on data storage and transmission put forward higher requirements, but also to the limited bandwidth available to a severe test, especially with large data amount of digital image communication, more difficult to transport and storage, greatly restricted the development of image communication, image compression techniques are therefore more and more attention. The purpose of image compression is to exhaust the original image less the larger the bytes and transmission, and requires better quality of

图像压缩论文

长沙理工大学 《数字图像压缩》报告 学院计算机与通信工程专业计算机与科学技术班级计算学号 学生姓名指导教师尹波 课程成绩完成日期2015年12月16日

摘要 图像压缩技术对于数字图像信息在网络上实现快速传输和实时处理具有重要的意义。本文介绍了当前几种最为重要的图像压缩算法:JPEG2000、分形图像压缩和小波变换图像压缩。其中主要研究了离散余弦变换压缩和小波变换压缩,并对两种压缩的前后数据进行了对比,同时还分析了离散余弦变换压缩和小波变换压缩之间的差异。 1.绪论 1.1图像压缩技术的发展现状 基于分形的方法是近几年来引起关注和争议的一种图像压缩方法。对图像压缩而言,分形主要是利用自相似的特点,通过迭代函数系统来实现压缩。利用分形特征对图像进行描述和处理是很自然的。分形能取得更好的图像质量,当然在较低压缩比的情况下,JPEG是更好的选择。分形压缩方法计算量比较大,时间开销长,因此加快分形压缩方法的速度是当前研究的热点之一。小波变换(Wavelet Transform)在频率精度方面稍差一些,但在时间的分析能力上更好一些,而且可以对时间和频率同时进行分解,这是传统傅立叶变换所做不到的。小波变换已经开始应用到图像数据压缩等领域,主要是采用离散小波变换。在某些情况下,小波变换更优于DCT等其他正交变换。利用人工神经网络(Artificial Neural Network,ANN)进行图像压缩是这个领域近几年的又一研究热点,并且取得了积极的进展。这是一种与视觉系统知识紧密相关的压缩方法。ANN并分布的联结机制与人的视觉系统有某些相似之处,利用此原理及其改进的方法进行图像压缩可获得较好的效果 1.2研究内容和目的 本文通过DCT和小波变换为基础的压缩方法,最大限度地减小图像的冗余度,同时分析DCT和小波变换压缩的实验结果,最后比较DCT和小波变换之间的差异。最后并得出了自己对两种不同压缩方法的看法和今后发展的前景。 2.图像压缩原理分析 2.1图像压缩的可能性 图像可以压缩,是因为图像中存在大量的冗余信息,图像的冗余包括以下几种: (1)空间冗余:像素点之间的相关性。 (2)时间冗余:活动图像的两个连续帧之间的冗余。 (3)信息熵冗余:单位信息量大于其熵。 (4)结构冗余;图像的区域上存在非常强的纹理结构。 (5)知识冗余:有固定的结构,如人的头像。 (6)视觉冗余:某些图像的失真是人眼不易觉察的。 2.2图像压缩原理 图像压缩主要目的是为了节省存储空间,增加传输速度。图像压缩的理想标准是信息丢失最少,压缩比例最大。不损失图像质量的压缩称为无损压缩,

JPEG图像压缩算法及其实现

多媒体技术及应用 JPEG图像压缩算法及其实现 罗群书 0411102班 2011211684

一、JEPG压缩算法(标准) (一)JPEG压缩标准 JPEG(Joint Photographic Experts Group)是一个由ISO/IEC JTC1/SC2/WG8和CCITT VIII/NIC于1986年底联合组成的一个专家组,负责制定静态的数字图像数据压缩编码标准。迄今为止,该组织已经指定了3个静止图像编码标准,分别为JPEG、JPEG-LS和JPEG2000。这个专家组于1991年前后指定完毕第一个静止图像压缩标准JPEG标准,并且成为国际上通用的标准。JPEG标准是一个适用范围很广的静态图像数据压缩标准,既可用于灰度图像又可用于彩色图像。 JPEG专家组开发了两种基本的静止图像压缩算法,一种是采用以离散余弦变换(Discrete Cosine Transform, DCT)为基础的有损压缩算法,另一种是采用以预测技术为基础的无损压缩算法。使用无损压缩算法时,其压缩比比较低,但可保证图像不失真。使用有损压缩算法时,其算法实现较为复杂,但其压缩比大,按25:1压缩后还原得到的图像与原始图像相比较,非图像专家难于找出它们之间的区别,因此得到了广泛的应用。 JPEG有4种工作模式,分别为顺序编码,渐近编码,无失真编码和分层编码,他们有各自的应用场合,其中基于顺序编码工作模式的JPEG压缩系统也称为基本系统,该系统采用单遍扫描完成一个图像分量的编码,扫描次序从左到右、从上到下,基本系统要求图像像素的各个色彩分量都是8bit,并可通过量化线性地改变DCT系统的量化结果来调整图像质量和压缩比。下面介绍图像压缩采用基于DCT的顺序模式有损压缩算法,该算法下的JPEG压缩为基本系统。 (二)JPEG压缩基本系统编码器 JPEG压缩是有损压缩,它利用了人的视觉系统的特性,将量化和无损压缩编码相结合来去掉视觉的冗余信息和数据本身的冗余信息。基于基本系统的JPEG压缩编码器框图如图1所示,该编码器是对单个图像分量的处理,对于多个分量的图像,则首先应将图像多分量按照一定顺序和比例组成若干个最小压缩单元(MCU),然后同样按该编码器对每个MCU各个分量进行独立编码处理,最终图像压缩数据将由多个MCU压缩数据组成。 图1 JPEG压缩编码器结构框图

JPEG2000图像压缩算法标准剖析

JPEG2000图像压缩算法标准 摘要:JPEG2000是为适应不断发展的图像压缩应用而出现的新的静止图像压缩标准。本文介绍了JPEG2000图像编码系统的实现过程, 对其中采用的基本算法和关键技术进行了描述,介绍了这一新标准的特点及应用场合,并对其性能进行了分析。 关键词:JPEG2000;图像压缩;基本原理;感兴趣区域 引言 随着多媒体技术的不断运用,图像压缩要求更高的性能和新的特征。为了满足静止图像在特殊领域编码的需求,JPEG2000作为一个新的标准处于不断的发展中。它不仅希望提供优于现行标准的失真率和个人图像压缩性能,而且还可以提供一些现行标准不能有效地实现甚至在很多情况下完全无法实现的功能和特性。这种新的标准更加注重图像的可伸缩表述。所以就可以在任意给定的分辨率级别上来提供一个低质量的图像恢复,或者在要求的分辨率和信噪比的情况下提取图像的部分区域。 1.JPEG2000的基本介绍及优势 相信大家对JPEG这种图像格式都非常熟悉,在我们日常所接触的图像中,绝大多数都是JPEG格式的。JPEG的全称为Joint Photographic Experts Group,它是一个在国际标准组织(ISO)下从事静态图像压缩标准制定的委员会,它制定出了第一套国际静态图像压缩标准:ISO 10918-1,俗称JPEG。由于相对于BMP等格式而言,品质相差无己的JPEG格式能让图像文件“苗条”很多,无论是传送还是保存都非常方便,因此JPEG格式在推出后大受欢迎。随着网络的发展,JPEG的应用更加广泛,目前网站上80%的图像都采用JPEG格式。 但是,随着多媒体应用领域的快速增长,传统JPEG压缩技术已无法满足人们对数字化多媒体图像资料的要求:网上JPEG图像只能一行一行地下载,直到全部下载完毕,才可以看到整个图像,如果只对图像的局部感兴趣也只能将整个图片载下来再处理;JPEG格式的图像文件体积仍然嫌大;JPEG格式属于有损压缩,当被压缩的图像上有大片近似颜色时,会出现马赛克现象;同样由于有损压缩的原因,许多对图像质量要求较高的应用JPEG无法胜任。 JPEG2000是为21世纪准备的压缩标准,它采用改进的压缩技术来提供更高的解像度,其伸缩能力可以为一个文件提供从无损到有损的多种画质和解像选择。JPEG2000被认为是互联网和无线接入应用的理想影像编码解决方案。 “高压缩、低比特速率”是JPEG2000的目标。在压缩率相同的情况下,JPEG2000的信噪比将比JPEG提高30%左右。JPEG2000拥有5种层次的编码形式:彩色静态画面采用的JPEG 编码、2值图像采用的JBIG、低压缩率图像采用JPEGLS等,成为应对各种图像的通用编码方式。在编码算法上,JPEG2000采用离散小波变换(DWT)和bit plain算术编码(MQ coder)。此外,JPEG2000还能根据用户的线路速度以及利用方式(是在个人电脑上观看还是在PDA上观看),以不同的分辨率及压缩率发送图像。 JPEG2000的制定始于1997年3月,但因为无法很快确定算法,因此耽误了不少时间,直到2000年 3 月,规定基本编码系统的最终协议草案才出台。目前JPEG2000已由ISO和

图像压缩算法

《算法设计与分析》课程报告 姓名:文亮 学号:201322220254 学院:信息与软件工程学院 老师:屈老师;王老师

算法实现与应用——《算法设计与分析》课程报告 一. 基本要求 1. 题目: 图像压缩 2. 问题描述 掌握基于DCT 变换的图像压缩的基本原理及其实现步骤;对同一幅原 始图像进行压缩,进一步掌握DCT 和图像压缩。 3. 算法基本思想 图像数据压缩的目的是在满足一定图像质量的条件下,用尽可能少的比特数来表示原始图像,以提高图像传输的效率和减少图像存储的容量,在信息论中称为信源编码。图像压缩是通过删除图像数据中冗余的或者不必要的部分来减小图像数据量的技术,压缩过程就是编码过程,解压缩过程就是解码过程。压缩技术分为无损压缩和有损压缩两大类,前者在解码时可以精确地恢复原图像,没有任何损失;后者在解码时只能近似原图像,不能无失真地恢复原图像。 假设有一个无记忆的信源,它产生的消息为{}N ≤≤i a i 1,其出现的概率是已知的,记为()i a p 。则其信息量定义为: ()()i i a p a log -=I 由此可见一个消息出现的可能性越小,其信息量就越多,其出现对信息的贡献量越大,反之亦然。 信源的平均信息量称为“熵”(entropy ),可以表示为: ()()[]()()∑∑==-=?=H N i i i N i i i a p a p a p I a p 1 1 log 对上式取以2为底的对数时,单位为比特(bits ): ()()∑=-=H N i i i a p a p 1log 根据香农(Shannon )无噪声编码定理,对于熵为H 的信号源,对其进行无

图像压缩算法性能的测试与分析工具

图像压缩算法性能的测试与分析工具1 蔡正兴,张虹 中国矿业大学计算机科学与技术学院,江苏徐州 (221008) 摘要:本文研究了图像压缩算法性能的评价方法,提出了图像压缩算法性能的测试算法,包括横向比较测试和纵向分解测试,并在此基础上设计并实现了压缩算法性能的测试与分析工具。该工具能够测试和分析压缩算法的性能,并自动生成各种分析图表,为用户提供了方便,具有较大的实用价值。为了提高评价的效率、准确性和全面性,文中提出了测试图像的选择方法和测试结果的分析方法,具有一定的理论意义。 关键词:压缩性能,测试方法,分析方法,图像选择方法 1. 引言 近年来,图像压缩得到快速发展[1],各种算法层出不穷,比如有损的压缩算法可以在低失真的条件下达到高压缩比[2,3],而无损的压缩算法则可以保证重建图像的无失真[4]。因此在实际应用中得知各种压缩算法的性能及特点是必要的。在评价图像压缩算法性能时主要考虑压缩比、重建质量、时间复杂度、空间复杂度和实现代价这几个方面[5],其中较为重要的是压缩比、重建质量和时间复杂度。为了计算这些压缩性能指标,常常使用一些工具软件,比如在图像处理领域广泛使用的MATLAB系列软件,它提供了大量的内置函数[6],操作方便,功能强大,但它不是评价图像压缩算法性能的专业工具,需要进行二次开发,不能有效的分析和评价压缩性能。其次,利用性能指标来评价压缩方法,尽管方便快捷,但还不能反映图像压缩算法的全部特点。例如,在考虑变换编码系统的失真性质时,一般采用MSE(均方误差),有时利用MSE计算得到的重建质量很好,但视觉效果却不好,这是因为MSE对图像中的失真显著性不敏感[7],可见,性能指标仅仅是对压缩算法进行宏观上的评价,无法评价每个过程对压缩性能的影响。再次,在评价压缩性能时,不可避免地要使用测试图像,用户在选择测试图像时带有随机性,不利于全面地评价压缩方法。针对这些不足,本文设计了图像压缩算法性能的测试与分析工具——AutoTA。AutoTA的目标是自动地对图像压缩算法进行测试与分析,并生成各种分析图表,全面的评价图像压缩算法的性能。AutoTA具有广泛的应用前景,科研人员利用AutoTA可横向比较各种压缩算法的性能,也可纵向分析压缩算法的特点;工程技术人员也可以根据AutoTA的测试结果,在实际应用中选择合适的图像压缩算法。 2. 压缩算法性能指标 压缩性能指标是评价压缩算法的重要方面,也是AutoTA分析图像压缩算法性能的重要依据,下面将描述相关的性能指标。 2.1压缩比 压缩比是指压缩过程中输入数据量和输出数据量之比,反映了图像压缩算法的压缩性能,当压缩比小于1时为正压缩,当压缩比大于1时为负压缩。压缩比的计算公式为: 1本课题得到国家自然科学基金项目(编号:60372102)、教育部博士点基金项目(编号:20030290011)、软件新技术国家重点实验室课题(编号:A200309)资助。

图像压缩(JPEG)编码算法及压缩过程的实现

秋风,秋雨,秋天的景色 ?博客园 ?首页 ?博问 ?闪存 ?新随笔 ?联系 ?订阅 ?管理 随笔- 234 文章- 0 评论- 22 图象压缩(JPEG)编码算法及压缩过程的实现转 图象压缩(JPEG)编码算法及压缩过程的实现 摘要 本文首先介绍了静态图像压缩(JPEG)编码算法的基本原理、压缩的实现过程及其重要过程的离散余弦变换(DCT)算法的实现原理及软件实现的例程,其次着重介绍了压缩过程中的DCT、量化和编码三个重要步骤的实现原理。 关键词:图像压缩有损压缩 JPEG 离散余弦变换 DCT 量化 第一章图像压缩编码的综述 1.1 图象压缩的目的和方法 图象的数字化表示使得图象信号可以高质量地传输,并便于图像的检索、分析、处理和存储。但是数字图像的表示需要大量的数据,必须进行数据的压缩。即使采用多种方法对数据进行了压缩,其数据量仍然巨大,对传输介质、传输方法和存储介质的要求较高。因此图象压缩编码技术的研究显得特别有意义,也正

是由于图象压缩编码技术及传输技术的不断发展、更新,推动了现代多媒体技术应用的迅速发展。 1.1.1 图象压缩的目的 图象采样后,如果对之进行简单的8bit量化和PCM编码,其数据量是 巨大的。以CIF(Common Intermediate Format)格式的彩色视频信号为例,若采样速率为25帧/秒,采样样点的Y、U、V分量均为8bit量化,则一秒钟的数据量为: 352×288×3×8×25=60.83Mbit 要传输或存储这样大的数据量是非常困难的,必需对其进行压缩编码,在满足实际需要的前提下,尽量减少要传输或存储的数据量。 虽然数字图象的数据量巨大,但图象数据是高度相关的。一幅图象的内部相邻象素之间,相邻行之间的视频序列中相邻图象之间有大量冗余信息—空间相关性和时间相关性,可以使用各种方法尽量去除这些冗余信息,减少图象的数据量。 除了时间冗余和空间冗余外,在一般的图象数据中还存在信息熵冗余、结构冗余、知识冗余和视觉冗余。各种冗余就是压缩图象数据的出发点。图象编码的目的就在于采用各种方法去除冗余,以尽量少的数据量来表示个重建图象。 1.1.2图象压缩的几种方法 1.统计和字典的压缩方法 常规程序和计算机熵的数据对于那些基于利用统计变种的压缩,效果很好,这些统计变种表现在单个符号的频率以及符号或短语字符串的频率等方面,而基于字典的系统实际山就是假扮统计程序。可是遗憾的是,这类压缩对于连续色调图象的作用并不很好。 这些程序的主要问题产生于这样的一个事实:照片图象的象素广泛地分布在整个范围。如果将图象中的彩色用频率分布画出,那么频率分布图中,没有我们在统计压缩的成功的情况下所看到的“尖峰”状,实际上,如果延长这个分布图,那么从类似于电视那样的生活图象源中得出的分布图会趋于平展。这意味着,每个象素代码彼此是大约相同的出现机会,决定不存在挖掘熵差的任何机会。 基于字典的压缩程序的运行也有类似的问题,基于扫描照片的图象决定没有任何类型的数据特征以产生相同的短语的多次出现。例如,一个栅格化的图象,

PNG图像的压缩算法

PNG图像格式的压缩算法 便携式网络图形(Portable Network Graphics)简称为PNG,它是一种无损压缩的位图图形格式,其含有以下几种特性: 1、支持256色调色板技术以产生小体积文件 2、支持最高48位真彩色图像以及16位灰度图像 3、支持阿尔法通道(Alpha Channel,表示图片的透明度和半透明度)的透明/半透明 性 4、支持图像亮度的伽马校正(Gamma校准,用来针对影片或是影像系统里对于光线的 辉度 (luminance) 或是三色刺激值 (tristimulus values)所进行非线性的运算或 反运算)信息 5、使用了无损压缩的算法 6、使用了循环冗余校验(CRC,用来检测或校验数据传输或者保存后可能出现的错误) 防止文件出错 一、 PNG格式的文件结构 PNG定义了两种类型的数据块:一种是PNG文件必须包含、读写软件也都必须要支持的关键块(critical chunk);另一种叫做辅助块(ancillary chunks),PNG允许软件忽略它不认识的附加块。这种基于数据块的设计,允许PNG格式在扩展时仍能保持与旧版本兼容。 关键数据块中有4个标准数据块: 1、文件头数据块IHDR(header chunk):包含有图像基本信息,作为第一个数据块出现 并只出现一次。 2、调色板数据块PLTE(palette chunk):必须放在图像数据块之前。 3、图像数据块IDAT(image data chunk):存储实际图像数据。PNG数据允许包含多个 连续的图像数据块。 4、图像结束数据IEND(image trailer chunk):放在文件尾部,表示PNG数据流结束 二、PNG格式文件的压缩算法 PNG格式文件采用的是从LZ77派生的一个称为DEFLATE的非专利无失真式压缩算法,这个算法对图像里的直线进行预测然后存储颜色差值,这使得PNG经常能获得比原始图像更大的压缩率。

图像无损压缩算法综述

图像无损压缩算法综述 【摘要】本文介绍了常见的图像无损压缩方法:静态及动态霍夫曼(Huffman)编码算法、算术编码算法、LZW ( lanpel-ziv-velch)编码及其改进算法、行程编码(又称游程编码,RLE)及改进自适应游程编码算法、费诺-香农编码算法和一种改进的编码方法。简要分析了各种算法的优缺点。 【关键词】霍夫曼算术编码 LZW 行程编码费诺-香农编码 1 前言 随着技术的不断发展,多媒体技术和通讯技术等对信息数据的存储和传输也提出了更高的要求,给现有的有限带宽带来更严峻的考验,尤其是具有庞大数据量的数字图像通信。存储和传输的高难度极大地制约了图像通信的发展,因此对图像信息压缩技术的研究受到了越来越多的关注。压缩数据量是图像压缩的首要目的,但保证压缩后图像的质量也是非常重要的,无损压缩是指能精确恢复原始图像数据的压缩方法,其在编码压缩过程中没有图像信号的损失。本文介绍了常见的无损压缩方法:静态及动态霍夫曼(Huffman)编码算法、算术编码算法、LZW ( lanpel-ziv-velch)编码及其改进算法、行程编码(又称游程编码,RLE)及改进自适应游程编码算法、费诺-香农编码算法和一种改进的编码方法。 2 常见图像无损压缩算法 2.1 霍夫曼算法 Huffman算法是一种用于数据压缩的算法,由D.A.Huffman最先提出。它完全依据字符出现概率来构造平均长度最短的编码,有时称之为最佳编码,一般叫做Huffman编码。频繁使用的数据用较短的代码代替,较少使用的数据用较长的代码代替,每个数据的代码各不相同。这些代码都是二进制码,且码的长度是可变的。 2.1.1 静态霍夫曼编码 步骤:

JEPG压缩算法

一、JEPG压缩算法(标准) (一)JPEG压缩标准 JPEG(Joint Photographic Experts Group)是一个由ISO/IEC JTC1/SC2/WG8和CCITT VIII/NIC于1986年底联合组成的一个专家组,负责制定静态的数字图像数据压缩编码标准。迄今为止,该组织已经指定了3个静止图像编码标准,分别为JPEG、JPEG-LS和JPEG2000。这个专家组于1991年前后指定完毕第一个静止图像压缩标准JPEG标准,并且成为国际上通用的标准。JPEG标准是一个适用范围很广的静态图像数据压缩标准,既可用于灰度图像又可用于彩色图像。 JPEG专家组开发了两种基本的静止图像压缩算法,一种是采用以离散余弦变换(Discrete Cosine Transform, DCT)为基础的有损压缩算法,另一种是采用以预测技术为基础的无损压缩算法。使用无损压缩算法时,其压缩比比较低,但可保证图像不失真。使用有损压缩算法时,其算法实现较为复杂,但其压缩比大,按25:1压缩后还原得到的图像与原始图像相比较,非图像专家难于找出它们之间的区别,因此得到了广泛的应用。 JPEG有4种工作模式,分别为顺序编码,渐近编码,无失真编码和分层编码,他们有各自的应用场合,其中基于顺序编码工作模式的JPEG压缩系统也称为基本系统,该系统采用单遍扫描完成一个图像分量的编码,扫描次序从左到右、从上到下,基本系统要求图像像素的各个色彩分量都是8bit,并可通过量化线性地改变DCT系统的量化结果来调整图像质量和压缩比。下面介绍图像压缩采用基于DCT的顺序模式有损压缩算法,该算法下的JPEG压缩为基本系统。 (二)JPEG压缩基本系统编码器 JPEG压缩是有损压缩,它利用了人的视觉系统的特性,将量化和无损压缩编码相结合来去掉视觉的冗余信息和数据本身的冗余信息。基于基本系统的JPEG压缩编码器框图如图1所示,该编码器是对单个图像分量的处理,对于多个分量的图像,则首先应将图像多分量按照一定顺序和比例组成若干个最小压缩单元(MCU),然后同样按该编码器对每个MCU各个分量进行独立编码处理,最终图像压缩数据将由多个MCU压缩数据组成。

bmp图像压缩算法详细解析

问题:将一张bmp图像的灰度值压缩存储到一个中间文件,然后利用中间文件还原这张图片。 初一看,这应该是两个程序吧,一个压缩程序一个解压程序。那就先压缩好喽,恩,压缩...可是要怎么读取它的灰度值呀?文件里不会只保存它的灰度值吧,点开属性,发现这是一张256*192的图片,如果图片文件里只有灰度值,那么大小应该是256*192 B,而实际大小是50230字节。。可见还有其它信息,根据经验,应该还有一个对图像的描述信息吧,这样那些图像显示程序才能知道以怎样的方式去显示它,毕竟不是所有的bmp图片都是灰度图片。额,只好求助百度了.............经过整理,我把bmp图像编码格式发到下面。 BMP文件被分成4个部分:位图文件头(Bitmap File Header)、位图信息(BitmapInfoHeader)、颜色表(Color Map)和位图数据(即图像数据,Data Bits或Data Body) 第1部分为位图文件头BITMAPFILEHEADER,是一个结构体类型,该结构的长度是固定的,为14个字节。其定义如下: typedef struct tagBITMAPFILEHEADER { WORD bfType; 位图文件类型,必须是0x424D,即字符串“BM” DWORD bfSize; 位图文件大小,包括这14个字节。 WORD bfReserved1; Windows保留字,暂不用。 WORD bfReserved2; Windows保留字,暂不用。 DWORD bfOffBits; 从文件头到实际的位图数据的偏移字节数 } BITMAPFILEHEADER, FAR *LPBITMAPFILEHEADER, *PBITMAPFILEHEADER; 第2部分为位图信息头BITMAPINFOHEADER,也是一个结构体类型的数据结构,该结构的长度也是固定的,为40个字节(WORD为无符号16位整数,DWORD为无符号32位整数,LONG为32位整数)。其定义如下: typedef struct tagBITMAPINFOHEADER { DWORD biSize; 本结构的长度,为40个字节。 LONG biWidth; 位图的宽度,以像素为单位。 LONG biHeight; 位图的高度,以像素为单位. WORD biPlanes; 目标设备的级别,必须是1。 WORD biBitCount 每个像素所占的位数(bit),其值必须为1(黑白图像)、4(16色图)8 (256色)、24(真彩色图),新的BMP格式支持32位色。 DWORD biCompression; 位图压缩类型,有效的值为BI_RGB(未经压缩)、BI_RLE8、BI_RLE4、BI_BITFILEDS(均为Windows定义常量)。这里只讨论未经压缩的情况,即biCompression=BI_RGB。

图像压缩技术的综述

题目:图像压缩技术的综述 学生姓名:徐欢学号:070110117 系别:计算机与信息学院专业:计算机科学与技术 入学年份:2010年9月 导师姓名:陈蕴谷职称/学位:讲师/硕士研究生 导师所在单位:中国科学院合肥物质研究院 完成时间:2014年4月 1.引言 随着多媒体技术和通讯技术的不断发展,多媒体娱乐、信息高速公路等不断对信息数据的存储和传输提出了更高的要求,也给现有的有限带宽以严峻的考验,特别是具有庞大数据量的数字图像通信,更难以传输和存储,极大地制约了图像通信的发展,因此图像压缩技术受到了越来越多的关注。图像压缩的目的就是把原来较大的图像用尽量少的字节表示和传输,并且要求复原图像有较好的质量。利用图像压缩,可以减轻图像存储和传输的负担,使图像在网络上实现快速传输和实时处理。 图像数据是用来表示图像信息的,如果不同的方法为表示相同的信息使用了不同的数据量,那么使用较多数据量的方法中,有些数据必然代表了无用的信息,或者是重复的表示了其他数据表示的信息,前者成为数据冗余,后者成为不相干信息。图像压缩编码的主要目的,就是通过删除冗余的或者是不相干的信息,以尽可能地的数码率来存储和传输数字图像数据。 图像压缩编码技术可以追溯到1948年提出的电视信号数字化,到今天已经有50多年的历史了。在此期间出现了很多种图像压缩编码方法,特别是到了80年代后期以后,由于小波变换理论,分形理论,人工神经网络理论,视觉仿真理论的建立,图像压缩技术得到了前所未有的发展,其中分形图像压缩和小波图像压缩是当前研究的热点。本文对当前最为广泛使用的图像压缩算法进行综述,讨论了它们的优缺点以及发展前景。 图像编码基础 图像编码压缩是指在满足一定图像质量的条件下,用尽可能少的数据量来表示图像。编码技术比较系统的研究始于Shannon信息论,从此理论出发可以得到数据压缩的两种基本途径。一种是联合信源的冗余度也寓于信源间的相关性之

图像压缩综述

图像压缩综述 摘要:随着信息时代的不断发展,数字图像处理技术得到了广泛的应用,而作为数字图像处理技术的重要组成部分——数字图像压缩,也得到了迅猛的发展。本文从数字图像压缩的概念、发展历史、图像压缩的必要性和可能性、图像压缩标准、图像压缩基本方法和图像压缩效果评价等方面进行了综述。 引言 在当前这个信息化社会中,新信息技术革命使人类被日益增多的多媒体信息所包围。多媒体信息主要是由图像、文本和声音三大元素组成。图像作为其主要元素之一,发挥着越来越重要的作用。而传输和存储图像需要占用大量的数据空间,这严重影响了传输速率和实时处理量,极大地制约了图像通信的发展。其中,数据量最大的是数字视频数据。未经处理的数字视频信息需要消耗巨大的存储资源,以主流高清视频为例,在分辨率为1280×720,帧率为30帧每秒的视频应用中,存储一分钟的视频信息,需要约18.5G(以常4:2:0视频,每像素12比特)比特存储空间,一部120分钟高清电影约需要2225G比特的存储空间。可见未经处理的视频信息量非常大,为了满足存储和传输需求,视频信息的压缩是十分必要的。在同等的通信容量下,如果图像数据可以压缩之后再传输,就可以使传输的数据量变得很小,也就能够增加通信能力。因此图像压缩编码技术受到了越来越多的关注及广泛的应用。如数码相机、USB摄像头、可视电话、视频点播、视频会议系统、数字监控系统等等,都使用到了图像或视频的压缩技术。 数字图像压缩是以尽可能少的比特数代表图像或图像中所包含的信息量的技术,图像通过压缩处理去掉其中的数据冗余、符号冗余、视觉冗余等各种冗余信息,提高传输速率,节省存储空间。 1图像压缩的发展历史 自1948年提出的电视信号数字化设想后, 即开始了图像压缩的研究,到现在已有60多年的历史。20世纪五六十年代的图像压缩编码主要集中在预测编码、哈夫曼编码等技术的研究,还不成熟。1969年在美国召开的第一届“图像编码会议”,标志着图像编码作为一门独立学科的诞生。到了七八十年代,图像压缩技术的主要成果体现在变换编码技术上, 矢量量化编码技术也有较大的发展。80年代末,小波变换理论、分形理论、人工神经网络理论、视觉仿真理论建立,人们开始突破传统的信源编码理论, 图像压缩编码向着更高的压缩率和更好的压缩质量的方向发展,进入了一个崭新的发展时期。 2图像压缩的可能性 图像之所以能够进行压缩有以下几个方面的原因: 一是原始图像数据是高度相关的,存在很大的数据冗余。如图像内相邻像素之间的空间冗余度、系列图像前后帧之间的时间冗余度、多光谱遥感图像各频谱间的频率域冗余度等,它们造成了大量的比特数浪费,消除这些冗余就可以节约码字,大大减少数据量,达到数据压 缩的目的。 二是信源符号出现的概率不同,若用相同码长表示不同出现概率的符号,就会造成符号冗余度。如果采用可变长编码技术,对出现概率高的符号用短码字,对出现概率低的符号用长码字表示,就可以消除符号冗余度,从而节约码字。 三是人眼具有视觉冗余,允许图像编码有一定的失真。人类视觉系统(HVS)是有缺陷的,人眼对于某些失真不敏感难以察觉。在许多场合中,并不要求经压缩及复原以后的图像和原始图像完全相同,可以允许有少量的失真,只要这些失真并不被人眼所察觉即可。这就为压缩比的提高提供了十分有利的条件,这种有失真的编码称为限失真编码。在多数应用中,人眼往

JPEG图像压缩算法基本介绍

JPEG图像压缩算法基本介绍 JPEG压缩算法可以用失真的压缩方式来处理图像,但失真的程度却是肉眼所无法辩认的。这也就是为什么JPEG会有如此满意的压缩比例的原因。 下面主要讨论,JPEG基本压缩法。 一、图像压缩算法之JPEG压缩过程 JPEG压缩分四个步骤实现: 1.颜色模式转换及采样; 2.DCT变换; 3.量化; 4.编码。 二、图像压缩算法具体操作 1、图像压缩算法之颜色模式转换及采样 RGB色彩系统是我们最常用的表示颜色的方式。JPEG采用的是YCbCr色彩系统。想要用JPEG基本压缩法处理全彩色图像,得先把RGB颜色模式图像数据,转换为YCbCr颜色模式的数据。Y代表亮度,Cb和Cr则代表色度、饱和度。通过下列计算公式可完成数据转换。 Y=0.2990R+0.5870G+0.1140B Cb=-0.1687R-0.3313G+0.5000B+128 Cr=0.5000R-0.4187G-0.0813B+128 人类的眼晴对低频的数据比对高频的数据具有更高的敏感度,事实上,人类的眼睛对亮度的改变也比对色彩的改变要敏感得多,也就是说Y成份的数据是比较重要的。既然Cb成份和Cr成份的数据比较相对不重要,就可以只取部分数据来处理。以增加压缩的比例。JPEG 通常有两种采样方式:YUV411和YUV422,它们所代表的意义是Y、Cb和Cr三个成份的数据取样比例。 2、图像压缩算法之DCT变换

DCT变换的全称是离散余弦变换(Discrete Cosine Transform),是指将一组光强数据转换成频率数据,以便得知强度变化的情形。若对高频的数据做些修饰,再转回原来形式的数据时,显然与原始数据有些差异,但是人类的眼睛却是不容易辨认出来。 压缩时,将原始图像数据分成8*8数据单元矩阵,例如亮度值的第一个矩阵内容如下: JPEG将整个亮度矩阵与色度Cb矩阵,饱和度Cr矩阵,视为一个基本单元称作MCU。每个MCU所包含的矩阵数量不得超过10个。例如,行和列采样的比例皆为4:2:2,则每个MCU将包含四个亮度矩阵,一个色度矩阵及一个饱和度矩阵。 当图像数据分成一个8*8矩阵后,还必须将每个数值减去128,然后一一代入DCT变换公式中,即可达到DCT变换的目的。图像数据值必须减去128,是因为DCT转换公式所接受的数字范围是在-128到+127之间。 DCT变换公式: x,y代表图像数据矩阵内某个数值的坐标位置 f(x,y)代表图像数据矩阵内的数个数值 u,v代表DCT变换后矩阵内某个数值的坐标位置 F(u,v)代表DCT变换后矩阵内的某个数值 u=0 且v=0 c(u)c(v)=1/1.414 u>0 或v>0 c(u)c(v)=1 经过DCT变换后的矩阵数据自然数为频率系数,这些系数以F(0,0)的值最大,称为DC,其余的63个频率系数则多半是一些接近于0的正负浮点数,一概称之为AC。 3、图像压缩算法之量化 图像数据转换为频率系数后,还得接受一项量化程序,才能进入编码阶段。 量化阶段需要两个8*8矩阵数据,一个是专门处理亮度的频率系数,另一个则是针对色度的频率系数,将频率系数除以量化矩阵的值,取得与商数最近的整数,即完成量化。

相关文档
最新文档