JPEG图像压缩编码及其MATLAB仿真实现

合集下载

JPEG静图像压缩实验

JPEG静图像压缩实验

JPEG静图像压缩实验
一.实验目的
1.了解数字图像压缩的一类方法
2.掌握2D快速DCT变换的算法
二.实验原理
JPEG标准是面向连续色调静止图像的图像压缩标准。

它定义了多种类型的工作模式,其中最基本的是基于8*8块的DCT变换的顺序编码。

就是将一帧图像分为8*8的数据块单元,按照从左到右,自上到下的顺序对”块流”编码,其编码解码框图如下:
三.实验内容
按照如上框图实现一帧图像的压缩编码和解码
四.代码理解
1.编码主程序
五、实验结果
六.思考题
1.计算图像压缩比,并比较原图像的效果
使用lady.dat做实验的图像压缩比为:63/5.436=11.8:1
左图为压缩前的lady.bmp,右图为压缩后的lady.jpg
两图没有明显的区别,但比较细节,右图稍微模糊,并且局部区域有一些块化现象。

2.改变g-scale和量化矩阵的元素,比较压缩比和恢复图像的效果
Gscale141625
压缩比 3.197.5418.122.91
G_scale=1G_scale=4
G_scale=16G_scale=25
量化矩阵Q1Q2
压缩比7.3418.44
Q1=0.5*Q0,Q2=2*Q0,Q0为原始的量化矩阵
Q1Q2
3.对于8bit的像素值,在经过DCT变换后,值域为[-2048,2047],有可能超过码表范围。

图像编码实验报告

图像编码实验报告

图像编码实验报告图像编码实验报告一、引言图像编码是一项重要的技术,它可以将图像数据进行压缩和传输,以节省存储空间和传输带宽。

本实验旨在探究图像编码的原理和方法,并通过实验验证不同编码算法的性能和效果。

二、实验目的1. 理解图像编码的基本原理和概念;2. 掌握JPEG和PNG两种常见的图像编码算法;3. 分析和比较不同编码算法的压缩率和图像质量。

三、实验过程1. 实验环境搭建在本实验中,我们使用MATLAB软件进行图像编码实验。

首先,安装MATLAB 并导入实验所需的图像处理工具箱。

2. 图像压缩选择一张分辨率较高的彩色图像作为实验对象。

首先,使用JPEG编码算法对图像进行压缩。

在压缩过程中,可以调整压缩比例参数,观察压缩后图像的质量变化。

然后,使用PNG编码算法对同一张图像进行压缩,并比较JPEG和PNG 两种算法的压缩率和图像质量。

3. 实验结果分析根据实验结果,我们可以得出以下结论:- JPEG算法在高压缩比下会出现明显的失真,但在适当的压缩比下可以获得较好的图像质量;- PNG算法在压缩过程中不会导致明显的失真,但压缩率相对较低。

四、实验讨论1. 图像编码的原理图像编码是将图像数据转换为二进制码流的过程。

常见的图像编码方法包括无损编码和有损编码。

无损编码可以完全还原原始图像,但压缩率较低;有损编码可以获得较高的压缩率,但会引入一定的失真。

2. JPEG编码算法JPEG是一种常用的有损图像编码算法。

它采用离散余弦变换(DCT)将图像从空间域转换为频域,并通过量化和熵编码实现压缩。

JPEG算法在高频部分进行较大幅度的量化,从而实现高压缩率,但也导致了明显的失真。

3. PNG编码算法PNG是一种无损图像编码算法。

它采用预测编码和差分编码的方法,将图像数据转换为无损的二进制码流。

PNG算法在压缩过程中不引入明显的失真,但压缩率相对较低。

五、实验总结通过本次实验,我们深入了解了图像编码的原理和方法,并通过实验验证了JPEG和PNG两种编码算法的性能和效果。

基于Matlab的JPEG图像压缩编码仿真实现

基于Matlab的JPEG图像压缩编码仿真实现
( College of M echanical and E lectr ical Eng ineering, H ebi Co llege of Vocation and T echno logy, H ebi 458030, China ) Abstrac t: The a lgor ithm o f the JPEG image com pression based on DCT w as d iscussed. Then sim ulation exper im ents w ere done w ith M atlab 6. 5 and ra te d istortion curve w as drawn w ith different compression பைடு நூலகம்o the sam e im age L ena. S imu lation experim ents show tha t the reconstructed im ages are of good quality satisfy ing peop le s v isua l requ irementw ith PSNR above 30 db under the c ir cum stances o f very large compress ion range at var ious compression ratio and b it rate. D iffe rent types o f compression of the images satisfy the dem ands o f d ifferent im age qua lity on various o ccasion and rate contro .l T he m ethod do ing experim ents w ith M atlab is simp le and w ith little error. It can im prove the effic iency and precision o f the image com pression greatly. K ey word s: joint photographie experts group ( JPEG ); im age com pression algorithm; discrete cosine transfo rm ( DCT ) ; H uff m an encoding; peak signal to no ise ratio ( PSNR )

基于DCT的JPEG图像压缩编码算法的MATLAB实现

基于DCT的JPEG图像压缩编码算法的MATLAB实现
式 在解 码过程 中 , 先对 已编码 的量 子化 的 D T系数进 行 解 码 , C 然后 求 逆量 化 并把 D T系数 转 化为 8×8样 C 本像块 ( 使用二 维 D T反变换 )最后 将操 作完 成 后 的块 组 合 成一 个 单一 的 图像 . 样 就 完成 了图像 的压 缩 C , 这
维普资讯
第1 第 1 5卷 期
20 年 3 02 - 月
J u a fZ i gWa l U iesy o r l } a ni nv ri n o n t
浙 江万里学院学报

b , o】
Ma 2 0 r 02
文章 编号 :6 1 2o2o ]l 0 2 —0. 17 —25 io 2o 一 08 4 -
和解 压过程 .
12 结 合 M T  ̄ 53仿 真对上 述算法 的几点 解释 . A LB. 12 1 离散 余 弦 变挟 ( c ) D r 定义
二维 D T的解 析式定 义 可 以由下式表示 : C
F f= (yF, 等 ( ) ( )N ) ( ) c o , 0 ,,O o s
D T系数值 , 中 1 数 值是 直 流 ( C 系数 , 8×8空域 图像 子块 的平 均值 , 余 的 6 C 其 个 D) 即 其 3个 是交 流 ( c 系 A ) 数, 接下 来对 D T系数进 行量 化 , 将变 换得到 的量 比的 D T系数进 行编码 和传 送 , 成压 缩后 的图像 格 C 最后 C 形
二维 D T反变换 (D T 解析 式定 义可 以表示 为 : C IC )
几 =m, 啬 击 o ) +
+ m cs o
c o s
os o
+ os 等 m.o ) c

Matlab中的视频图像压缩与编码技术

Matlab中的视频图像压缩与编码技术

Matlab中的视频图像压缩与编码技术在当代数字化时代,视频图像的传输和存储成为了日常生活中不可或缺的一部分。

然而,高清晰度的视频图像通常需要大量的存储空间和高带宽支持,这对于资源有限的设备和网络来说是一项挑战。

为了解决这个问题,视频图像压缩与编码技术应运而生。

通过压缩和编码技术,可以将视频图像的文件大小减小,以实现更高效的存储和传输。

Matlab作为一种功能强大的编程语言和开发环境,提供了丰富的工具和函数来实现视频图像的压缩与编码。

在本文中,我们将探讨一些常用的视频图像压缩与编码技术,以及如何使用Matlab来实现这些技术。

首先,我们来了解一下视频图像压缩的基本原理。

视频压缩通常包括两个步骤:空间域压缩和变换域压缩。

空间域压缩是指通过减少冗余的像素数据来减小图像文件的大小。

其中,最常用的压缩方法是基于离散余弦变换(DCT)的压缩算法。

DCT将图像分解为一组特定频率的正弦波,然后通过舍弃低频系数达到压缩的目的。

Matlab中,可以使用dct2函数来实现DCT变换。

另一种压缩技术是变换域压缩,它利用图像中的统计特性来减小文件大小。

其中,最常用的压缩方法是基于小波变换(Wavelet Transform)的压缩算法。

小波变换将图像分解为不同尺度和方向的基函数,通过舍弃低频和低幅度的小波系数来实现压缩。

Matlab中,可以使用wavedec2函数来实现小波变换。

除了以上两种压缩技术,还有一种常见的压缩方法是基于运动估计(Motion Estimation)和运动补偿(Motion Compensation)的压缩算法。

运动估计和运动补偿利用连续视频帧之间的像素变化信息来减小文件大小。

通过计算相邻帧之间的运动向量,然后通过将运动向量和预测误差进行压缩来实现视频压缩。

Matlab中,可以使用vision.MotionEstimator和vision.MotionCompensator函数来实现运动估计和运动补偿。

基于Matlab环境的JPEG图像压缩算法

基于Matlab环境的JPEG图像压缩算法
值 的 二维 离 散 余 弦 变 换 。得 到 的 D T系 数 根 据 式 ( ) 行 C 5进
量 化
便 于传输 、 存储和译码器进 行译码 , 这样组织 的数据通常 称 为 JE P G位数据流(P G bt t a 。图像 的离散余弦变换 JE i sem) r
具 有把 高 度 相关 数 据 能 量 集 中 的趋 势 , 正 是 他 用 于 图 像 压 这 缩 的优 点 所 在 , 这 一点 被 广 泛 应 用 于 图 像 压 缩 。对 通 常 的 故 图像 来 说 , 多 数 D T系 数 的值 非 常 接 近 0 如 果 舍 弃 这 些 大 C 。
接近零 的 D T系数 值 , 重构 图像 是并 不会带来 画面质量 C 在
(, =0 d H , I u ) r n ” ul

() 5
的 显著 下 降 。所 以 , 用 D T进 行 图 像 压 缩 可 以节 约 大 量 利 C
的存储空间 。压缩应 该在最合 理的近似原 图像 的情 况下使
JE (o t it eepr gop , P G ji c r xe ru ) 即联 合 图像 专家 组 。 np u t
JE P G算法 中首先对 图像进行 分块处理 , 在对 每一 快进行 二 维离散余 弦变换 , 变换后 的系数基 本不相关 , 系数矩 阵的 且
Fu ) c )( ∑ ∑f , ・ (, = ( c ) (y x)

于空间线性 预测技术 ( 即差分脉冲编码调制) 算法 , 该算法 属
于无失真压缩算法 ; 2种算 法是基 于离散余 弦变换 、 程 第 行 编码 、 熵编码 的有 失真 压缩算 法。 目前 比较 流行后 一种算 法, 即有失真 D T压缩编码 。 C

二维DCT变换在JPEG图像压缩中的应用及其MATLAB实现

二维DCT变换在JPEG图像压缩中的应用及其MATLAB实现

d i s t o r t i o n o f i m a g e , a n d a l s o w o n t h e h i g h c o m p r e s s i o n r a t i o . T h e m e t h o d i s s i m p l e , f a s t a n d s u i t a b l e f o r t h e
0 引言
随着 网络技术和信 息技术 的飞速发展 , 网络中信息的需求量 越 来越 大。 这其 中就包括有对 信息传输 的需求, 而 信息传输 中大 部分又表现为 图像 , 所 以图像信 息量的大小将 直接 影响到网络传 输的速度 。 因此 , 为 了保证 图像信息 的存储与传输 , 对 图像进 行压 缩成为 当前最迫切 的需求 。 图像 压缩 就是在没有明显失真的前提 下, 尽 量减少表示 数字 图像 时需要 的数据量 , 从而 节省 图像 的存 储空间 , 减少传输信道 的容量、 缩短 图像加工处理 的时 间等 。 在所 有 的图像压缩编码 中 J P E G是第 一个被广泛应 用的适用 于 ( 包括
行仿 真验 证, 实验结果显示 图像无 明显失真 , 同时又 获得 了高压缩 比。 该方法操作简单、 速度快 , 适用于 日常数字 图像 的压缩需
求。
关键词 : 图像压缩 ; D C T; M A T L A B; J P E G A
M ATLAB t w o- d i me ns i o na l DCT t r a ns f o r m a nd i t s a p pl i c a t i on i n t he J PE G r e a iz l a t i o n o f i ma g e c o mp r e s s i o n

基于MATLAB的JPEG压缩编码

基于MATLAB的JPEG压缩编码

本文对 J PEG 压缩 算法进行 了初步的研 究, 并编程 实现 了相应 的算法 , 实验结果进 对 行了分析研究 , 出结论 。 得
1 图像压缩技术的现 状
图像 压缩 技术是 数 字时 代的产 物和 重要 组成部 分 , 它的进步对整个社会 的数字化和信 息化都 有不 可估量 的推 动作用 。 然而 , 尽管各种通信媒介容量越来越大并 且各种 通信 协议不断升级 , 随着通 信量爆 炸式 此 , 图像压缩技术得 到国际上学术界 和工程 界极高 的重视 , 由此得到飞 速发展 。 并 各种 图像和 视频 压缩 国际标 准 己出现并 得到 广泛应用 , 中 J G( 其 PE 用于静态图像压缩) 和 MP G( E 用于动态图像压缩) 应用最广。 图像压缩技术的发展趋势是 : 算法更复杂 , 压 缩率更高 , E J G的压缩率在 1 o P : 左右, E 2 0 2 J G 0o P 的压缩率更高 , E 压缩标准也己经几代的发 MP G
个的进 行的 , 则称 标准量化 , 若量化 是成组的 进行 的, 则称矢量 量化 , 量化总会造成 某些信 息丢失 , 形成失真 , 即量化失真或量化噪声 , 为 使失真小 , 应量化的精细 , 但压缩比就高不 了, 这是一对矛盾 , 应选 用恰当的量化级数和 量化 曲线形状来缓解这对 矛盾 , 量化 器的引入是图 像编码产生失真的根源 , 在要求复原 图像 与原 图完全 一致 的无 失真 编码 器中必 须不 用量化 器, 但这样一来 , 压缩 比难以提 高, 在多数应用 中, 存在少量 失真并不 可怕 , 只要把失真 的程 度和性 质控 制在允许的范 围内 , 也就是把 复原 图像 的主观 质量控制在允许 的程 度内 , 可以 就 在满足 应用要 求的前提下提高 压缩 比 , 得注 值 意 的是 , 对于 同样的量化 失真 , 同的映射变 不 换和 反变换反映不 同性质 的复原图像的失 真 , 人 眼对某 些性 质的 失真 敏感而 对 另一些性 质

MATLAB中的图像压缩和编码方法

MATLAB中的图像压缩和编码方法

MATLAB中的图像压缩和编码方法图像压缩和编码是数字图像处理的重要领域,在各种图像应用中起着至关重要的作用。

在本文中,我们将探讨MATLAB中的图像压缩和编码方法,包括无损压缩和有损压缩,并介绍其中的一些经典算法和技术。

一、图像压缩和编码概述图像压缩是指通过一定的算法和技术来减少图像数据的存储量或传输带宽,以达到节约存储空间和提高传输效率的目的。

而图像编码则是将原始图像数据转换为一系列二进制编码的过程,以便存储或传输。

图像压缩和编码通常可以分为无损压缩和有损压缩两种方法。

无损压缩是指压缩后的数据可以完全还原为原始图像数据,不会引入任何失真或变化。

常见的无损压缩算法有Run-Length Encoding (RLE)、Lempel-Ziv-Welch (LZW)、Huffman编码等。

这些算法通常针对图像中的冗余数据进行编码,如重复的像素值或相似的图像区域。

有损压缩则是在保证一定程度的视觉质量下,通过舍弃或近似原始图像数据来减小存储或传输的数据量。

常见的有损压缩算法有JPEG、JPEG2000、GIF等。

这些算法通过离散余弦变换(DCT)、小波变换或颜色量化等方法,将图像数据转换为频域或颜色空间的系数,并通过量化、编码和压缩等步骤来减小数据量。

二、无损压缩方法1. Run-Length Encoding (RLE)RLE是一种简单高效的无损压缩算法,通过计算连续重复像素值的数量来减小数据量。

在MATLAB中,可以使用`rle`函数实现RLE编码和解码。

例如,对于一幅图像,可以将连续的像素值(如白色)编码为重复的个数,然后在解码时根据重复的个数恢复原始像素值。

2. Lempel-Ziv-Welch (LZW)LZW是一种字典压缩算法,通过将图像中连续的像素序列映射为一个短代码来减小数据量。

在MATLAB中,可以使用`lzwencode`和`lzwdecode`函数实现LZW 编码和解码。

例如,对于一段连续的像素序列,可以将其映射为一个短代码,然后在解码时根据代码恢复原始像素序列。

jpeg算法实验报告

jpeg算法实验报告

jpeg算法实验报告JPEG算法实验报告摘要:本实验旨在研究和分析JPEG(Joint Photographic Experts Group)算法的原理和应用。

通过实验,我们对JPEG算法的压缩效果、图像质量和压缩比进行了评估,并对其优缺点进行了探讨。

实验结果表明,JPEG算法在图像压缩方面具有较高的效率和广泛的应用前景。

一、引言JPEG算法是一种广泛应用于图像压缩的算法,它通过对图像进行离散余弦变换(DCT)和量化处理来实现压缩。

JPEG算法以其高效的压缩率和较好的图像质量而在图像处理领域得到广泛应用。

本实验将通过实际操作和实验数据来验证JPEG算法的有效性和优势。

二、实验方法和步骤1. 实验环境和工具:使用MATLAB软件进行实验,选择合适的图像进行处理和压缩。

2. 实验步骤:a. 选择一幅高分辨率的彩色图像作为实验对象。

b. 将图像转换为YCbCr颜色空间,以便进行离散余弦变换。

c. 对图像进行离散余弦变换,得到频域图像。

d. 对频域图像进行量化处理,降低高频分量的精度。

e. 对量化后的图像进行反量化和反离散余弦变换,得到压缩后的图像。

f. 计算压缩后图像与原始图像之间的均方差(MSE)和峰值信噪比(PSNR),评估图像质量。

g. 计算压缩比,评估压缩效果。

三、实验结果和分析在实验中,我们选择了一张分辨率为1920x1080的彩色图像进行处理和压缩。

经过JPEG算法的处理,我们得到了压缩后的图像,并计算了MSE、PSNR和压缩比等指标。

1. 图像质量评估通过计算MSE和PSNR,我们可以评估压缩后图像的质量。

实验结果显示,经过JPEG算法压缩后的图像,MSE较小,PSNR较高,表明图像质量较好。

这是因为JPEG算法通过量化处理,减少了高频分量的细节信息,但保留了图像的主要特征,使得图像在视觉上仍然保持较高的质量。

2. 压缩效果评估通过计算压缩比,我们可以评估JPEG算法的压缩效果。

实验结果显示,JPEG 算法在保持较高图像质量的前提下,能够实现较高的压缩比。

基于Matlab的JPEG图像压缩编码仿真实现

基于Matlab的JPEG图像压缩编码仿真实现
需要 。 对 图像 作 不 同 的 压 缩 , 足 了不 同 的 场 合 、 同 的 控 制 码 率 下 要 求 不 同 的 图 像 质 量 的 实 际 需要 。 满 不
用 Ma a t b做 仿真 实验 , l 方法 简单 而且误 差小 , 大大提 高 了图像 压 缩的效 率和精 度 。 关键 词 : 合 图像 专 家组 ; 联 图像 压 缩算 法 ; 离散 余 弦变换 ; f a Hu m n编码 ; f 峰值 信 噪 比 中图分类 号 :P 1 T 32 文 献标识 码 : A 文章编 号 :01 45(07 1 09 — 3 10 — 5 120 )0— 07 0
( o e eo c a i l n l t c l n ier g H b C l g oaina d Tc n l y H b 4 8 3 ,C ia C l g l fMeh n a a d Ee r a E gn ei , ei ol eo V c t n eh oo , ei 5 0 0 h ) c ci n e f o g n
Ke r s on h tga hee p rsgo p( P ywo d :jitp oolp i x et ru J EG);i g o rsin ag r h 。 ma ec mpe s loi m;dsrt o iet n fr ( Ct o t i e, s r s m D —);lu - c  ̄c n a o l f
S mul to m p e n a i n o i a i n i l me t to fJPEG m a e c mpr s in b s d o a lb i g o e so a e n M ta
Z HA0 W e . ..D nj u ONG Hu— n.Z h. n imi HU Z imi

基于Matlab环境的JPEG图像压缩算法

基于Matlab环境的JPEG图像压缩算法
M -1 N -1
F( u, v) = C( u) C( v)
y) · ∑ ∑ f( x,
x =0 y =0
π( 2 x + 1 ) u π( 2 y + 1 ) v cos cos 2M 2N
( 1)
收稿日期:2011 - 03 - 15 作者简介:程丽( 1982 —) , 女, 硕士研究生, 讲师, 主要从事系统工程研究 。
21 世纪以来, 随着计算机软硬件以及操作系统的不断 “多媒体技术 ” 发展, 人们对 一词已经耳熟能详, 它有非常重 要的存在必要性, 如图形和图像处理的需要 、 大量数据存储 。“多媒体技术” 的需要等 定义为利用个人计算机对文字 、 图 逻辑关系和人机交互作用的产物 像、 图形、 动3 ] 。 多媒体技术应运而
2011 年 5 月 第 32 卷 第 5 期 四 川 兵 工 学 报 【自动化技术】
基于 Matlab 环境的 JPEG 图像压缩算法
程 丽, 王聪丽, 侯著荣, 王 凯
( 军械工程学院 计算机工程系 , 石家庄 050003 ) 摘要:压缩是多媒体技术得到长足发展的关键技术 , 而图像是多媒体信息的重要组成部分 。 针对图像压缩问题, 分 析了 JPEG 图像压缩系统的原理, 提出了一种基于 DCT 的 JPEG 图像压缩技术, 并在 Matlab 环境下实现了编码和解 演示了一幅图像压缩后的效果 。 码的几个关键步骤, 关键词:图像压缩; DCT; JPEG 图像压缩算法 中图分类号:TP751 文献标识码:A 文章编号:1006 - 0707 ( 2011 ) 05 - 0100 - 03 通过保留低频区部分系数 , 去掉高频区 能量集中在低频区, 的部分, 从而达到压缩目的, 余弦变换时经典谱分析的工具 , 它考察的是整个时域过程中的频域特性 , 或者整个频域过程 中的时域特性, 该算法具有较强的块内去相关的能力 , 适于 较平坦的压缩, 它的特点是没有利用图像中局域间的相关特 性, 在压缩倍数高时, 恢复图像出现明显的方块效应 。 JPEG2000 是由 ISO / IEC JTC1SC29 标准化组织负责的全 新静止图像压缩标准, 一个最大的改进是他采用小波变换代 它既能考查局 替了余弦变换。小波变换是现代谱分析工具 , 部时域过程的频域特性 , 又能考查局部频域过程中的时域问 。 JPEG2000 几何算法在高压缩比下跟传统的 JPEG 压 题 用 缩方式相比, 图像质量并没有明显的降低 , 来自 RAPH LEVIEN 于 2000 年三月所作的对比测试报告表明 : 在中度与低度 的压缩比率下, 传统的 JPEG 表现的更为出色, 但是在较高的 压缩比率下传统的 JPEG 方式就不那么让人满意 , 与传统的 JPEG 压缩方式对比, JPEG2000 的表 在较高的压缩比率小, 现更为优秀。

JPEG图像压缩Matlab程序

JPEG图像压缩Matlab程序

% function ReconImage=func_DCTJPEG(I,q)%% 1.This function tests the DCTJPEG codec%% ReconImage=DCTJPEG(I,q),I为待压缩图像,q为量化因子,ReconImage为解压缩重建图像。

%% 2.This function calls:%% blkproc.m,DCHuffmanEncoding.m,ACHuffmanEncoding.m,zigzag.m,PSNR.m, %% 对灰度图像进行DCT变换,量化,ZigZag扫描,Huffman编解码,反量化,反DCT 变换而重建图像。

%% 其中,blkproc.m为分块DCT变换函数;%% DCHuffmanEncoding.m,ACHuffmanEncoding.m分别为DC和AC变换系数的Huffman码表函数;%% zigzag.m为ZigZag扫描函数;PSNR.m为求图像峰值信噪比函数。

%% Copyright 2008 Reserved @ Wang Chengyou @ Tianjin University, P.R.China.%%******************************************************************* *******************%%%%Testclose all;clear all;clc;% fname=input('Please input the bmp image name:','s');%%读一幅bmp灰度图像% [I,map]=imread(fname,'bmp');I=imread('lena512.bmp');%%读bmp灰度图像q=1;%%设定量化因子OriginalImage=I;Q=q;OriginalImage=double(OriginalImage);%%图像数据类型转换ImageSub=OriginalImage-128;%%电平平移128[Row,Col]=size(OriginalImage);%%图像的大小BlockNumber=Row*Col/64;%%8*8分块数%% dct2变换:把ImageSub分成8*8像素块,分别进行dct2变换,得变换系数矩阵CoefCoef=blkproc(ImageSub,[8,8],'dct2(x)');%% 量化:用量化矩阵L量化Coef得CoefAfterQ%% JPEG建议量化矩阵L=Q*[16 11 10 16 24 40 51 6112 12 14 19 26 58 60 5514 13 16 24 40 57 69 5614 17 22 29 51 87 80 6218 22 37 56 68 109 103 7724 35 55 64 81 104 113 9249 64 78 87 103 121 120 10172 92 95 98 112 100 103 99];CoefAfterQ=blkproc(Coef,[8,8],'round(x./P1)',L);%%向靠近的整数取圆整%% 把CoefAfterQ分成8*8的块得分块矩阵CoefBlockm=0;for row=1:Row/8for col=1:Col/8m=m+1;CoefBlock(:,:,m)=CoefAfterQ(((row-1)*8+1):(row*8),((col-1)*8+1):(col*8));endendm;%% 把量化后各个分块的DC系数存放到行矩阵DC中DC(m)=0;for i=1:mDC(i)=CoefBlock(1,1,i);endDC;%% 求由各个DC系数的差值组成的行矩阵DCdifDCdif(BlockNumber)=0;DCdif(1)=DC(1);for i=2:BlockNumberDCdif(i)=DC(i)-DC(i-1);endDCdif;%% 用行矩阵DCdif中的差值替换原来系数矩阵CoefBlock中各个分块的DC系数m=0;for i=1:Row/8for j=1:Col/8m=m+1;CoefBlock(1,1,m)=DCdif(m);endendm;%% 把分块矩阵CoefBlock放到变换系数大矩阵CoefDCchanged中n=0;forrow=1:Row/8for col=1:Col/8n=n+1;CoefDCchanged(((row-1)*8+1):(row*8),((col-1)*8+1):(col*8))=CoefBlock(:,:,n);endendn;%%******************************************************************* *******************************%% 至此,完成了所有块中DC系数的替换(除第一个分块以外),为以后的DC系数差分编码做好了准备%%******************************************************************* *******************************%%*********************** the first--end blocks ************************%% 以下对每个分块进行量化,ZigZag扫描和编码(分别对DC系数和AC系数)%%******************************************************************* ***%% 整个图像编码后的bit序列以及bit序列的长度ImageBitSeq=[];ImageBitLen=[];%% 调试用,用来记循环的次数rowloop=0;for row=1:Row/8colloop=0;for col=1:Col/8m(1:8,1:8)=CoefDCchanged((row-1)*8+1:(row-1)*8+8,(col-1)*8+1:(col-1)*8+8);k= round(m); %% 就近取整%k;%% k为变换系数矩阵经量化并就近取整后的矩阵%% ZigZag Scaning%%*********************************************************t=zigzag(k);%t;%% t为zigzag扫描结果。

JPEG图像压缩与编码解析

JPEG图像压缩与编码解析

JPEG图像压缩与编码解析
JPEG(Joint Photographic Experts Group)压缩格式,以其易于使用、压缩率高而著称,是应用最为广泛的一种图像压缩格式。

JPEG压缩
算法把图像分为内容和质量两个维度来进行压缩。

下面将详细论述JPEG
图像编码与解码的基本原理。

1.JPEG图像编码过程
(1)空间域转换
空间域转换是将原始图像由空间域变换成更加节省存储空间的频域。

JPEG压缩采用的是离散余弦变换(DCT)这种空间域转换方法,它可以把
图像表示成一系列正交基函数的线性组合,每一个函数表示的是对应的图
像量化值。

利用DCT将一幅图像分成8×8(也有可能是16×16)大小的块,每一个块由64(或者256)个相互独立的像素构成,被称为DCT子块。

(2)频段选择
JPEG图像压缩算法采用频段选择的原则,根据图像中的特征,把空
间域转换之后的低频分量即低频信息传��有损,而只把高频分量即高频
信息传递以达到保留重要信息的目的,在JPEG中,特征的保留按照“从
重要的到不重要的”的顺序进行。

(3)变换。

数字图像JPEG压缩编码算法研究毕业设计论文正文

数字图像JPEG压缩编码算法研究毕业设计论文正文
图像压缩编码是在对数字图像进行大量统计分析,在掌握和了解图像信息的统计特性的基础上,充分利用图像本身的相关性强的特点,寻求消除或减少相关性或改变图像信源概率分布不均匀性的方法,以实现数据的压缩。
第1章绪论
1.1
图像压缩编码技术可以追溯到1948年提出的电视信号数字,到今天已经有近60年的历史了。Kunt提出了第一代数据压缩编码的概念。他把20世纪40年代中研究的以去除冗余为基础的编码方法称为第一代编码[2]。如PCM(pulse code modulation,脉冲编码调制),DPCM(differential pulse code modulation,差分脉冲编码调制)、亚取样编码法、变换编码中的DFT(discrete Fourier transform,离散傅里叶变换),DCT(discrete cosine transform,离散余弦变换)等方法以及以此为基础的混合编码法属于经典的第一代编码方法。直至五十年代和六十年代的图像压缩技术由于受到电路技术等的制约,仅仅停留在预测编码、亚采样以及内插复原等技术的研究上,而且还很不成熟。A. Huffman于1952年第一次发表了他的论文“最小冗余度代码的构造方法”,从此,数据压缩开始在商业程序中实现并被应用在许多技术领域。
在数据压缩编码技术的发展过程中,获得最大成功的,并被广泛应用在各个领域的就是压缩技术第二代中的JPEG(Joint Photographic Experts Group)压缩算法[3]。JPEG是1952年ISO国际质量认证组织和国际通信联盟联合组成的。JPEG组织提出和制定的一种压缩标准,主要适用于静态图像信号的压缩和编码,JPEG标准结合采用了预测、不定长等多种压缩编码方法,压缩比可以达到10:1—100:1,而且压缩比可以在一定范围内由用户进行选择。当压缩比小于40:1时,可以被认为压缩结果是无失真的。但是采用JPEG标准制定的压缩算法的计算量比较大,如对一幅较高精度的真彩色图像使用JPEG压缩时,大约要进行上亿次运算操作,这对实现JPEG压缩、编码的软件、硬件设备产品提出了较高的要求。早期的JPEG压缩多数做成专用的压缩卡,以专用的高速CPU芯片实现压缩处理,现在通用的计算机CPU速度不断提高的情况下,JPEG压缩也可以用软件来实现。为了解决JPEG中存在计算复杂,块效应的问题,近些年来出现了很多新的压缩编码方法,如使用人工神经元网络(Artificial NeuralNetwork,ANN)的压缩编码算法:分形(Fractal);小波(Wavelet);基于对象(Object-Based)的压缩编码算法;基于模型(Model-Based)的压缩编码算法(应用在MPEG4及未来的视频压缩编码标准中)。

Matlab技术图像压缩算法

Matlab技术图像压缩算法

Matlab技术图像压缩算法图像压缩是数字图像处理中的一项重要技术,它通过减少图像数据的冗余性,实现图像数据的压缩和存储。

在实际应用中,我们常常需要在保证图像质量的前提下,尽可能减少图像的存储空间和传输带宽。

Matlab作为一种功能强大的科学计算软件,提供了一系列图像压缩的算法和工具,本文将介绍一些常用的Matlab技术图像压缩算法。

一、离散余弦变换(DCT)算法离散余弦变换是一种广泛应用于图像压缩的算法。

DCT算法将图像分解为一系列互不相关的频域分量,通过对这些分量进行量化和编码,实现图像的压缩。

在Matlab中,可以使用dct2函数对图像进行离散余弦变换。

首先,需要将原始图像转换为灰度图像,然后将像素值缩放到(-127,127)的范围内。

接下来,可以使用dct2函数对图像进行离散余弦变换,得到图像的频域分量。

在量化阶段,可以选择不同的量化步长来控制图像的压缩比。

较大的量化步长将导致更高的压缩比,但同时也会引入更多的失真。

在编码阶段,可以使用Huffman编码等技术对量化后的系数进行编码,进一步减小图像的存储空间。

二、小波变换(Wavelet Transform)算法小波变换是另一种常用的图像压缩算法。

相比于离散余弦变换,小波变换能够更好地捕捉到图像的局部特征,提供更高的压缩效果。

在Matlab中,可以使用wavedec2函数对图像进行小波变换。

首先,需要将原始图像转换为灰度图像,然后对图像进行小波分解。

分解得到的低频分量和高频分量之间存在一种层次结构,可以选择保留较低频的分量来实现不同程度的压缩。

在重构阶段,可以使用waverec2函数将图像的小波分量进行重构,得到压缩后的图像。

与DCT算法类似,小波变换也可以通过量化和编码来进一步减小图像的存储空间。

三、向量量化(Vector Quantization)算法向量量化是一种基于聚类的图像压缩算法。

它将图像分成多个不重叠的区域,然后将每个区域表示为一个固定长度的向量。

JPEG图像压缩算法及其实现

JPEG图像压缩算法及其实现

JPEG图像压缩算法及其实现⼀、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压缩数据组成。

MATLAB数据压缩与编码技巧与实例

MATLAB数据压缩与编码技巧与实例

MATLAB数据压缩与编码技巧与实例引言在现代信息时代,数据的处理与传输是一项重要任务。

然而,随着数据量的不断增加,数据的存储和传输成本也逐渐提高。

为了克服这一问题,数据压缩和编码技巧变得至关重要。

本文将探讨MATLAB中的数据压缩和编码技巧,并提供实际案例。

一、数据压缩方法1. 无损压缩无损压缩是指在数据压缩过程中不会丢失数据。

MATLAB提供了多种无损压缩方法,如GZIP、ZLIB和LZ77算法等。

其中,GZIP是一种广泛使用的压缩工具,可以通过命令行或MATLAB函数进行调用。

例如,可以使用以下MATLAB代码压缩文件。

```matlabinputFile = 'input.txt';outputFile = 'compressed.gz';gzip(inputFile, outputFile);```此代码将输入文件"input.txt"压缩为"compressed.gz"。

2. 有损压缩有损压缩是指在数据压缩过程中会有一定的数据损失。

这种方法适用于某些情况下,例如图像和音频数据。

在MATLAB中,可以使用JPEG和MP3等算法进行有损压缩。

以下是一个示例,演示如何使用JPEG算法对图像进行有损压缩。

inputImage = imread('input.jpg');outputImage = 'compressed.jpg';imwrite(inputImage, outputImage, 'Quality', 80);```这段代码将输入图像"input.jpg"以80%的质量压缩为"compressed.jpg"。

二、数据编码技巧1. 霍夫曼编码霍夫曼编码是一种常用的无损编码方法,广泛应用于数据压缩领域。

在MATLAB中,可以通过"Huffmandict"和"Huffmanenco"函数实现霍夫曼编码。

matlab实现jpeg算法进行图像压缩的源代码

matlab实现jpeg算法进行图像压缩的源代码

function jpeg %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% THIS WORK IS SUBMITTED BY:%%%% OHAD GAL%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%close all;% ==================% section 1.2 + 1.3% ==================% the following use of the function:%% plot_bases( base_size,resolution,plot_type )%% will plot the 64 wanted bases. I will use "zero-padding" forincreased resolution% NOTE THAT THESE ARE THE SAME BASES !% for reference I plot the following 3 graphs:% a) 3D plot with basic resolution (64 plots of 8x8 pixels) using "surf" function% b) 3D plot with x20 resolution (64 plots of 160x160 pixels) using "mesh" function% c) 2D plot with x10 resolution (64 plots of 80x80 pixels) using "mesh" function% d) 2D plot with x10 resolution (64 plots of 80x80 pixels) using "imshow" function%% NOTE: matrix size of pictures (b),(c) and (d), can support higher frequency = higher bases% but I am not asked to draw these (higher bases) in this section ! % the zero padding is used ONLY for resolution increase !%% get all base pictures (3D surface figure)plot_bases( 8,1,'surf3d' );% get all base pictures (3D surface figure), x20 resolutionplot_bases( 8,20,'mesh3d' );% get all base pictures (2D mesh figure), x10 resolutionplot_bases( 8,10,'mesh2d' );% get all base pictures (2D mesh figure), x10 resolutionplot_bases( 8,10,'gray2d' );% ==================% section 1.4 + 1.5% ==================% for each picture {'0'..'9'} perform a 2 dimensional dct on 8x8 blocks.% save the dct inside a cell of the size: 10 cells of 128x128 matrix% show for each picture, it's dct 8x8 block transform.for idx = 0:9% load a pictureswitch idxcase {0,1}, input_image_128x128 =im2double( imread( sprintf( '%d.tif',idx ),'tiff' ) );otherwise, input_image_128x128 =im2double( imread( sprintf( '%d.tif',idx),'jpeg' ) );end% perform DCT in 2 dimension over blocks of 8x8 in the given picture dct_8x8_image_of_128x128{idx+1} =image_8x8_block_dct( input_image_128x128 );if (mod(idx,2)==0)figure;endsubplot(2,2,mod(idx,2)*2+1);imshow(input_image_128x128);title( sprintf('image #%d',idx) );subplot(2,2,mod(idx,2)*2+2);imshow(dct_8x8_image_of_128x128{idx+1});title( sprintf('8x8 DCT of image #%d',idx) );end% ==================% section 1.6% ==================% do statistics on the cell array of the dct transforms% create a matrix of 8x8 that will describe the value of each "dct-base"% over the transform of the 10 given pictures. since some of the values are% negative, and we are interested in the energy of the coefficients, we will% add the abs()^2 values into the matrix.% this is consistent with the definition of the "Parseval relation" in Fourier Coefficients% initialize the "average" matrixmean_matrix_8x8 = zeros( 8,8 );% loop over all the picturesfor idx = 1:10% in each picture loop over 8x8 elements (128x128 = 256 * 8x8 elements)for m = 0:15for n = 0:15mean_matrix_8x8 = mean_matrix_8x8 + ...abs( dct_8x8_image_of_128x128{idx}(m*8+[1:8],n*8+[1:8]) ).^2;endendend% transpose the matrix since the order of the matrix is elements along the columns,% while in the subplot function the order is of elements along the rows mean_matrix_8x8_transposed = mean_matrix_8x8';% make the mean matrix (8x8) into a vector (64x1)mean_vector = mean_matrix_8x8_transposed(:);% sort the vector (from small to big)[sorted_mean_vector,original_indices] = sort( mean_vector );% reverse order (from big to small)sorted_mean_vector = sorted_mean_vector(end:-1:1);original_indices = original_indices(end:-1:1);% plot the corresponding matrix as asked in section 1.6figure;for idx = 1:64subplot(8,8,original_indices(idx));axis off;h = text(0,0,sprintf('%4d',idx));set(h,'FontWeight','bold');text(0,0,sprintf('\n_{%1.1fdb}',20*log10(sorted_mean_vector(idx)) ));end% add a title to the figuresubplot(8,8,4);h = title( 'Power of DCT coefficients (section 1.6)' );set( h,'FontWeight','bold' );% ==================% section 1.8% ==================% picture 8 is chosen% In this section I will calculate the SNR of a compressed image againts% the level of compression. the SNR calculation is defined in the header% of the function: <<calc_snr>> which is given below.%% if we decide to take 10 coefficients with the most energy, we will% zeros to the other coefficients and remain with a vector 64 elements long% (or a matrix of 8x8)% load the original imageoriginal_image = im2double( imread( '8.tif','jpeg' ) );% I will use this matrix to choose only the wanted number ofcoefficients% the matrix is initialized to zeros -> don't choose any coefficient at allcoef_selection_matrix = zeros(8,8);% compressed picture set (to show the degrading)compressed_set = [1 3 5 10 15 20 30 40];% this loop will choose each time, the "next-most-energetic"coefficient,% to be added to the compressed image -> and thus to improove the SNRfor number_of_coefficient = 1:64% find the most energetic coefficient from the mean_matrix[y,x] = find(mean_matrix_8x8==max(max(mean_matrix_8x8)));% select if for the compressed imagecoef_selection_matrix(y,x) = 1;% replicate the selection matrix for all the parts of the dct transform% (remember that the DCT transform creates a set of 8x8 matrices, where% in each matrix I need to choose the coefficients defined by the % <<coef_selection_matrix>> matrix )selection_matrix = repmat( coef_selection_matrix,16,16 );% set it as zero in the mean_matrix, so that in the next loop, we will% choose the "next-most-energetic" coefficientmean_matrix_8x8(y,x) = 0;% choose the most energetic coefficients from the original image% (total of <<number_of_coefficient>> coefficients for this run in the loop)compressed_image = image_8x8_block_dct(original_image) .*selection_matrix;% restore the compressed image from the given set of coeficientsrestored_image = image_8x8_block_inv_dct( compressed_image );% calculate the snr of this image (based on the original image)SNR(number_of_coefficient) =calc_snr( original_image,restored_image );if ~isempty(find(number_of_coefficient==compressed_set))if (number_of_coefficient==1)figure;subplot(3,3,1);imshow( original_image );title( 'original image' );endsubplot(3,3,find(number_of_coefficient==compressed_set)+1);imshow( restored_image );title( sprintf('restored image with %dcoeffs',number_of_coefficient) );endend% plot the SNR graphfigure;plot( [1:64],20*log10(SNR) );xlabel( 'numer of coefficients taken for compression' );ylabel( 'SNR [db] ( 20*log10(.) )' );title( 'SNR graph for picture number 8, section 1.8' );grid on; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%% --------------------------------------------------------------------------------%% I N N E R F U N C T I O N I M P L E M E N T A T I O N%% --------------------------------------------------------------------------------%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%% ---------------------------------------------------------------------------------% pdip_dct2 - implementation of a 2 Dimensional DCT%% assumption: input matrix is a square matrix !% ---------------------------------------------------------------------------------function out = pdip_dct2( in )% get input matrix sizeN = size(in,1);% build the matrixn = 0:N-1;for k = 0:N-1if (k>0)C(k+1,n+1) = cos(pi*(2*n+1)*k/2/N)/sqrt(N)*sqrt(2);elseC(k+1,n+1) = cos(pi*(2*n+1)*k/2/N)/sqrt(N);endendout = C*in*(C');% ---------------------------------------------------------------------------------% pdip_inv_dct2 - implementation of an inverse 2 Dimensional DCT%% assumption: input matrix is a square matrix !% ---------------------------------------------------------------------------------function out = pdip_inv_dct2( in )% get input matrix sizeN = size(in,1);% build the matrixn = 0:N-1;for k = 0:N-1if (k>0)C(k+1,n+1) = cos(pi*(2*n+1)*k/2/N)/sqrt(N)*sqrt(2);elseC(k+1,n+1) = cos(pi*(2*n+1)*k/2/N)/sqrt(N);endendout = (C')*in*C;% ---------------------------------------------------------------------------------% plot_bases - use the inverse DCT in 2 dimensions to plot the base pictures%% Note: we can get resolution be zero pading of the input matrix% that is by calling: in = zeros(base_size*resolution)% where: resolution is an integer > 1% So I will use zero pading for resolution (same as in the fourier theory)% instead of linear interpolation.% ---------------------------------------------------------------------------------function plot_bases( base_size,resolution,plot_type )figure;for k = 1:base_sizefor l = 1:base_sizein = zeros(base_size*resolution);in(k,l) = 1; % "ask" for the "base-harmonic (k,l)"subplot( base_size,base_size,(k-1)*base_size+l );switch lower(plot_type)case'surf3d', surf( pdip_inv_dct2( in ) );case'mesh3d', mesh( pdip_inv_dct2( in ) );case'mesh2d', mesh( pdip_inv_dct2( in ) ); view(0,90);case'gray2d', imshow( 256*pdip_inv_dct2( in ) );endaxis off;end% add a title to the figuresubplot(base_size,base_size,round(base_size/2));h = title( 'Bases of the DCT transform (section 1.3)' );set( h,'FontWeight','bold' );% ---------------------------------------------------------------------------------% image_8x8_block_dct - perform a block DCT for an image% ---------------------------------------------------------------------------------function transform_image = image_8x8_block_dct( input_image )transform_image = zeros( size( input_image,1 ),size( input_image,2 ) ); for m = 0:15for n = 0:15transform_image( m*8+[1:8],n*8+[1:8] ) = ...pdip_dct2( input_image( m*8+[1:8],n*8+[1:8] ) );endend% ---------------------------------------------------------------------------------% image_8x8_block_inv_dct - perform a block inverse DCT for an image% ---------------------------------------------------------------------------------function restored_image = image_8x8_block_inv_dct( transform_image ) restored_image =zeros( size( transform_image,1 ),size( transform_image,2 ) );for m = 0:15for n = 0:15restored_image( m*8+[1:8],n*8+[1:8] ) = ...pdip_inv_dct2( transform_image( m*8+[1:8],n*8+[1:8] ) );endend% ---------------------------------------------------------------------------------% calc_snr - calculates the snr of a figure being compressed%% assumption: SNR calculation is done in the following manner:% the deviation from the original image is considered% to be the noise therefore:%% noise = original_image - compressed_image%% the SNR is defined as:%% SNR = energy_of_image/energy_of_noise%% which yields:% SNR = energy_of_image/((original_image-compressed_image)^2)% ---------------------------------------------------------------------------------function SNR = calc_snr( original_image,noisy_image )original_image_energy = sum( original_image(:).^2 );noise_energy = sum( (original_image(:)-noisy_image(:)).^2 );SNR = original_image_energy/noise_energy;以下是1-9号原图像,放到matlab的.m文件目录里,重命名9个图像名为1、2、3、4、5、6、7、8、9。

用matlab仿真huffman编码在jpg图像压缩中的应用 崔微微

用matlab仿真huffman编码在jpg图像压缩中的应用  崔微微

用matlab仿真huffman编码在jpg图像压缩中的应用1.jpg图像的定义:JPEG是Joint Photographic Experts Group(联合图像专家组)的缩写,文件后辍名为".jpg"或".jpeg",是最常用的图像文件格式,是一种有损压缩格式,能够将图像压缩在很小的储存空间,图像中重复或不重要的资料会被丢失,因此容易造成图像数据的损伤。

尤其是使用过高的压缩比例,将使最终解压缩后恢复的图像质量明显降低,如果追求高品质图像,不宜采用过高压缩比例。

但是JPEG压缩技术十分先进,它用有损压缩方式去除冗余的图像数据,在获得极高的压缩率的同时能展现十分丰富生动的图像,换句话说,就是可以用最少的磁盘空间得到较好的图像品质。

而且JPEG是一种很灵活的格式,具有调节图像质量的功能,允许用不同的压缩比例对文件进行压缩,支持多种压缩级别,压缩比率通常在10:1到40:1之间,压缩比越大,品质就越低;相反地,压缩比越小,品质就越好。

比如可以把1.37Mb的BMP位图文件压缩至20.3KB。

当然也可以在图像质量和文件尺寸之间找到平衡点。

JPEG格式压缩的主要是高频信息,对色彩的信息保留较好,适合应用于互联网,可减少图像的传输时间,可以支持24bit真彩色,也普遍应用于需要连续色调的图像。

2.huffman编码huffman编码是一种高效的无失真信源编码方法,所得到的码字具有最短的平均码长。

3.用matlab仿真用huffman编码对一图像进行压缩的例子(1)编码思路:先将一个模拟图形进行抽样量化,像素量化成九个灰度级。

然后进行huffman 编码,最后进行压缩率的计算。

(2)编码程序如下:% 图像的huffman编码过程%将模拟图形进行抽样量化clear all;close all;clc;Dimens = 256; % 矩阵维数,假设矩阵为方阵即256*256src_size = Dimens^2; % 矩阵元素的个数gray_level = 9; % 灰度级src = randn(Dimens); %产生模拟图像矩阵,满足正态分布,零均值,方差为1 src_one = reshape(src,1,src_size);src_max = max(src_one);src_min = min(src_one);quan = linspace(src_min,src_max,gray_level); % 产生均匀量化区间src_d = []; % 数字矩阵for row = 1:Dimens % 逐点量化for vol = 1:Dimensdiff = abs(src(row,vol)-quan);[min_diff,min_index] = min(diff);quan_gray = min_index -1;src_d(row,vol) = quan_gray;endend% prob数组保存图像中各灰度出现的概率prob = [];for src_value=0:(gray_level-1)index = find(src_d==src_value);i = src_value + 1;prob(i) = length(index)/src_size;end% huffman编码p = prob;n=length(p);q=p;m=zeros(n-1,n);for i=1:n-1[q,l]=sort(q);m(i,:)=[l(1:n-i+1),zeros(1,i-1)];q=[q(1)+q(2),q(3:n),1];endbre=zeros(n-1,n);bre(n-1,1)=0+j; %虚部表示当前的二进制数的位数,以下类似bre(n-1,2)=1+j;for time=1:n-2loc_1 = find(real(m(n-time,:))==1);prebit = bre(n-time,loc_1);bre(n-time-1,1) = (real(prebit)*2 + 0) + j*(imag(prebit)+1);bre(n-time-1,2) = (real(prebit)*2 + 1) + j*(imag(prebit)+1);loc_not1 = find(real(m(n-time,:))>1);bre(n-time-1,3:3+time-1) = bre(n-time,loc_not1);end[m1,index] = sort(m(1,:));code = bre(1,index);code_data = real(code);code_bits = imag(code);disp(['gray level',' ', 'huffman code']);for i = 1:length(code)disp([num2str(i-1),' ' ,num2str(dec2bin(code_data(i)))]); endcode_binary = dec2bin(code_data);%逐点编码out = [];for row = 1:Dimensfor vol = 1:Dimensnow_gray = src_d(row,vol);now_code = code_binary(now_gray+1,:);now_bits = code_bits(now_gray+1);now_code = now_code(end-now_bits+1:end);out = [out, now_code];endend%计算压缩比real_bitnum = length(out);bitnum_no_huffman = src_size*nextpow2(gray_level);comp_ratio =bitnum_no_huffman/real_bitnum;Hshannon = (-1)*prob*(log2(prob))';disp(['comp_ratio = ',num2str(comp_ratio)]);disp(['Hshannon = ',num2str(Hshannon)]);(3)matlab运行结果如下:gray level huffman code0 110000001 11000012 110013 1114 05 106 11017 1100018 11000001comp_ratio = 1.9087Hshannon = 2.0186。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
信ቤተ መጻሕፍቲ ባይዱ技术
电 子 测 量 技 术 EL EC TRON IC M EASU R EM EN T TEC HNOL O GY
第 30 卷 第 1 期 2007 年 1 月
JPEG图像压缩编码及其 MATL AB 仿真实现
王成优 侯正信
(天津大学 天津 300072)
摘 要 : 首先介绍了基于离散余弦变换的 J PEG 图像压缩编码算法 ,接着用 MA TL AB6. 5 对标准灰度图像进行仿真 , 并对同一幅 Lena 图像做不同的压缩 ,绘制了率失真曲线 。实验结果表明 ,在很大的压缩范围内 ,在不同的压缩比和编 码比特率下 ,重建图像的峰值信噪比都在 30 dB 以上 ,仍然能满足人们的视觉需要 。对图像做不同的压缩 ,满足了不 同的场合 、不同的控制码率下要求不同的图像质量的实际需要 。用 MA TL AB 做仿真实验 ,方法简单而且误差小 ,大 大提高了图像压缩的效率和精度 。 关键词 : J PEG 图像压缩算法 ; 离散余弦变换 (DCT) ; Huff man 编码 ; 峰值信噪比 中图分类号 : TP3911 41 文献标识码 : A
由表 1 实验结果可以看出 ,在很大的压缩比下 ,仍然得到 了比较高的峰值信噪比 ,并且重建图像的主观质量也很好。
图 3 是 Lena 和 yacht 的原始图像 ,图 4 是经 J PEG 压 缩 、重建得到的图像 。在比较原始图像与重建图像时 ,主 观上看不出它们之间的差别 。
图 2 J PEG 编译 MA TL AB 程序流程图
[ 4 ] ISO/ IEC 1091821 | ITU2T Rec. T. 81 (J PEG) , Digital co mp ressio n and coding of continuous2tone still images [ S].
[ 5 ] 卢官明 ,宗昉. 数字电视原理 [ M ]. 北京 :机械工业出 版社 ,2005.
2 MATLAB 仿真实现[ 527]
根据上面所述的 J PEG 压缩编码算法 ,要将一幅灰度 图像进行压缩编码 ,首先把图像分成 8 ×8 的像素块 ,分块 进行 DC T 变换后 ,根据 J P E G 标准量化表[8] 对变换系数进 行量化后 ,再对直流系数 (DC) 进行预测编码 ,对交流系数 (AC) 进行 Zig2Zag 扫描和可变长编码 , 然后根据标准的 Huff man 码表[425] 进行熵编码 ,输出压缩图像的比特序列 , 实现了图像压缩 。在接收端 ,则经过 Huff man 熵解码 、DC 系数和 AC 系数可变长解码 、反量化后 ,再进行反 DC T 变 换得 到 重 建 图 像 。对 一 幅 图 像 进 行 J PEG 编 解 码 的 MA TL AB 程序流程图如 2 所示 。
参考文献
[ 1 ] 林福宗. 多媒体技术基础 [ M ] . 2 版. 北京 :清华大学出 版社 ,2002.
[ 2 ] 罗倩玲. J P EG 编码与矢量量化编码方法比较 [J ] . 电 子测量技术 ,2005 (4) :35237.
[ 3 ] WALL ACE G K. The J PEG still pict ure comp ression standard [ J ] . IEEE Transactions on Consumer Elect ronics ,1992 ,38 :18234.
Algorithm of JPEG image compression and its simulation real ization based on MATLAB
Wang Chengyou Hou Zhengxin
( Tianjin Universit y , Tianjin 300072)
Abstract :The algorit hm of t he J PEG image co mp ressio n based on DC T was discussed. Then simulatio n experiment s were done wit h MA TL AB 6. 5 and rate distortion curve was drawn wit h different comp ressio n to t he same image Lena. Simulatio n experiment s show t hat t he reconst ructed images are of good quality satisf ying peopleπs visual requirement wit h PSN R above 30 dB under t he circumstances of very large comp ressio n range at various comp ression ratio and bit rate. Different types of comp ression of t he images satisf y t he demands of different image quality o n vario us occasion and rate cont rol. The met hod doing experiment s wit h MA TL AB is simple and wit h little error , and it can imp rove t he efficiency and p recision of the image co mp ressio n greatly. Keywords :J PEG image co mp ression algorit hm ; discrete co sine t ransform (DC T) ; Huff man encoding ; peak signal to noise ratio ( PSN R)
3 实验结果
用上述 MA TL AB 程序对原始图像大小为 512 ×512 , 8 bit/ pixel的 6 幅灰度图像分别做 J PEG 压缩编解码 ,然后 进行反量化和逆 DC T 变换 ,得到重建图像 ,实验结果如表 1 所示 。
表 1 6 幅图像 JPEG压缩的实验结果
Test Images 编码比特率 Comp ress Ratio
0 引 言
随着信息技术的发展 ,图像信息被广泛应用于多媒体 通信和计算机系统中 。但是图像具有庞大的数据量 ,不便 于存储和传输 ,所以必须采用合适的方法对其进行压缩 , 因此有必要对图像压缩编码标准进行研究 。在众多的图 像编码标准中 ,J PEG(joint p hotograp hic expert s group) 标 准是一个适用范围很广的静态图像压缩标准 ,在数字图像 压缩领域得到了广泛应用[122] 。
bpp
压缩比
0. 40 0. 63 0. 98 1. 14 1. 36
19. 81 12. 80 8. 13 7. 03 5. 87
续表 2
PSN R dB
33. 70 35. 81 37. 87 38. 56 39. 47
由表 2 数据做 Lena 图像的率失真曲线如图 5 所示 。 由图 5 可以看出 ,在很大的压缩范围内 ,在不同的压缩比 和编码比特率下 ,重建图像的峰值信噪比都在 30 dB 以上 。 对图像做不同的压缩 ,满足了不同的场合要求不同的图像 质量的实际需要 。
本文在研究 J PEG图像压缩原理的基础上 ,用 MATLAB 6. 5 对标准灰度图像进行J PEG 压缩与重建 ,并分析实验结 果得出结论 。
1 JPEG压缩编码算法[ 124]
J PEG 专家组开发了 2 种基本的压缩算法 ,一种是以 离散余弦变换 (DC T) 为基础的有损压缩算法 ,另一种是以
预测技术为基础的无损压缩算法 。有损 J PEG 压缩算法框 图如图 1 所示 。
图 1 J PEG 算法框图 在有损压缩算法中 ,主要采用基于块的离散余弦变换
·135 ·
第 30 卷
电 子 测 量 技 术
消除图像的空间冗余 ,利用人的视觉系统特性对变换系数 进行量化 ,最后通过无损变字长熵编码消除视觉冗余和数 据统计冗余 ,实现图像压缩 。译码或者叫做解压缩的过程 与压缩编码过程正好相反 。
测试图像
bpp
压缩比
PSN R dB
L e na p ep p e r s airplane yacht mil k drop cablecar
0. 63 0. 63 0. 68 0. 71 0. 49 0. 74
12. 80 12. 61 11. 82 11. 32 16. 25 10. 80
35. 81 34. 78 36. 02 37. 72 38. 08 36. 52
作者简介
王成优 ,男 ,1979 年出生 ,硕士研究生 ,主要研究方向为 数字图像与视频处理 、小波分析等 。 E2mail :chengyo u_wang @yahoo . co m. cn
·137 ·
[ 6 ] SALOMON D. 数据压缩原理与应用 [ M ] . 2 版. 吴乐 南 ,译. 北京 :电子工业出版社 ,2003.
[ 7 ] 张益贞 ,刘滔. Visual C + + 实现 MPE G/ J PE G 编解码 技术 [ M ] . 北京 :人民邮电出版社 ,2002.
[ 8 ] 张志涌. 精通 Matlab 6. 5 版 [ M ] . 北京 :北京航空航天 大学出版社 ,2003.
在图 2 的程序流程图中 ,在进行 Huff man 编码时 ,对 于 DC 系数 ,因为是对相邻图像块之间的差值进行编码 ,所 以在量化后扫描之前要先对 DC 系数进行预处理 。将量化 后 DC 的原始值替换成相邻图像块之间的差值 ; 在对 AC 系数进行编码时 ,又要考虑 63 个系数全是零和连续出现 16 个连零这 2 种特殊情况 。
相关文档
最新文档