图像压缩原理

article/2025/9/25 1:50:42

原文网址:http://blog.csdn.net/newchenxf/article/details/51693753
转载请注明出处。


1 图像可压缩的原因

一张原始图像(1920x1080),如果每个像素32bit表示(RGBA),那么,图像需要的内存大小
1920x1080x4 = 8294400 Byte,大约8M。这我们是万万不能接受的。如果这样,1G硬盘才存100多张图片,伤不起啊!视频也一样,如果视频是1920x1080,30fps, 1小时。那不压缩大概需要的内存:
8Mx30x60*60 = 864000M,都800多G了!疯了吧!

所以说,我们需要图像压缩。

那图像为何可以压缩呢?因为它有很多冗余信息。
常见图像、视频、音频数据中存在的冗余类型如下:
1. 空间冗余
2. 时间冗余
3. 视觉冗余
下面详细介绍。

1.1 空间冗余

一幅图像表面上各采样点的颜色之间往往存在着空间连贯性,比如下图,两只老鼠的颜色,背后的墙,灰色的地板,颜色都一样。这些颜色相同的块就可以压缩。
比如说,第一行像素基本都一样,假设亮度值Y是这么存的
[105 105 105…….105],如果共100个像素,那需要1Byte*100。
最简单的压缩:[105, 100],表示接下来100个像素的亮度都是105,那么只要2个字节,就能表示整行数据了!岂不是压缩了!
空间冗余

空间冗余主要发生在单张图片,比如我们的照片。

1.2 时间冗余

这种冗余主要针对视频。
运动图像(视频)一般为位于一时间轴区间的一组连续画面,其中的相邻帧往往包含相同的背景和移动物体,只不过移动物体所在的空间位置略有不同,所以后一帧的数据与前一帧的数据有许多共同的地方,这种共同性是由于相邻帧记录了相邻时刻的同一场景画面,所以称为时间冗余。
如下图所示,其实1秒30帧,每一帧之间都是33ms,这么短,前后帧的变话很少,也许只有嘴巴动了,背景没动。
这里写图片描述

1.3 视觉冗余

人类的视觉系统由于受生理特性的限制,对于图像场的注意是非均匀的,人对细微的颜色差异感觉不明显。
例如,人类视觉的一般分辨能力为26灰度等级,而一般的图像的量化采用的是28灰度等级,即存在视觉冗余。
人类的听觉对某些信号反映不太敏感,使得压缩后再还原有允许范围的变化,人也感觉不出来。

2 数据压缩方法的分类

2.1 按照压缩方法是否产生失真分类

2.1.1 无失真压缩

无失真压缩要求解压以后的数据和原始数据完全一致。解压后得到的数据是原数据的复制,是一种可逆压缩。
无失真压缩法去掉或减少数据中的冗余,恢复时再重新插到数据中,因此是可逆过程
根据目前的技术水平,无损压缩算法一般可以把普通文件的数据压缩到原来的1/2-1/4。一些常用的无损压缩算法有赫夫曼(Huffman)算法和LZW(Lenpel-Ziv & Welch)压缩算法

2.1.2 有失真压缩

解压以后的数据和原始数据不完全一致,是不可逆压缩方式。有失真压缩还原后,不影响信息的表达
例如,图像、视频、音频数据的压缩就可以采用有损压缩方法,因为其中包含的数据往往多于我们的视觉系统和听觉系统所能接收的信息,丢掉一些数据而不至于对声音或者图像所表达的意思产生误解,但可大大提高压缩比。图像、视频、音频数据的压缩比可高达100:1,但人的主观感受仍不会对原始信息产生误解。

2.2 按照压缩方法的原理分类

2.2.1 预测编码

基本思想是利用已被编码的点的数据值,预测邻近的一个像素点的数据值

2.2.2 变换编码

基本思想是将图像的光强矩阵变换到系数空间上,然后对系数进行编码压缩

2.2.3 统计编码

根据信息出现概率的分布特性而进行的压缩编码。比如霍夫曼编码。

3 图像压缩的要素

压缩比
压缩前后文件大小之比,越高越好,但受速度、消耗资源等的影响。
图像质量
还原后与原图像相比,评估的方法有客观评估和主观评估。
压缩与解压缩速度
与压缩方法和压缩编码的算法有关,一般压缩比解压缩计算量大,因而压缩比解压缩慢。

4. 图像压缩编码举例

4.1 行程编码(RLE)

这是最好理解的一种编码了。
现实中有许多这样的图像,在一幅图像中具有许多颜色相同的图块。在这些图块中,许多行上都具有相同的颜色,或者在一行上有许多连续的像素都具有相同的颜色值。在这种情况下就不需要存储每一个像素的颜色值,而仅仅存储一个像素的颜色值,以及具有相同颜色的像素数目就可以,或者存储像素的颜色值,以及具有相同颜色值的行数。
这种压缩编码称为行程编码(run length encoding,RLE),具有相同颜色并且是连续的像素数目称为行程长度。
例如,字符串AAABCDDDDDDDDBBBBB
利用RLE原理可以压缩为3ABC8D5B
RLE编码简单直观,编码/解码速度快,
因此许多图形和视频文件,如.BMP .TIFF及AVI等格式文件的压缩均采用此方法.
由于一幅图像中有许多颜色相同的图块,用一整数对存储一个像素的颜色值及相同颜色像素的数目(长度)。例如:
(G ,L)//G为颜色值,L为长度值
编码时采用从左到右,从上到下的排列,每当遇到一串相同数据时就用该数据及重复次数代替原来的数据串。

举例,如下的18*7的像素(假设只有灰度值,1字节)
000000003333333333
222222222226666666
111111111111111111
111111555555555555
888888888888888888
555555555555553333
222222222222222222
仅仅需要11对数据表示。
(0,8) (3,10) (2,11) (6,7)
(1,18) (1,6) (5,12) (8,18)
(5,14) (3,4) (2,18)

游程长度编码特点:
直观,经济;
是一种无损压缩;
压缩比取决于图像本身特点,相同颜色图像块越大,图像块数目越少,压缩比越高。
适用于计算机生成的图像,例如。BMP、TIF等,不适于颜色丰富的自然图像。

这并不是说RLE编码方法不适用于自然图像的压缩,相反,在自然图像的压缩中少不了RLE,只不过是不能单纯使用RLE一种编码方法,需要和其他的压缩编码技术联合应用。

4.2 哈夫曼编码(Huffman)

由于图像中表示颜色的数据出现的概率不同,对于出现频率高的赋(编)予较短字长的码,对出现频率小的编于较长字长的码,从而减少总的代码量,但不减少总的信息量。

编码步骤:
(1)初始化,根据符号概率的大小按由大到小顺序对符号进行排序
(2)把概率最小的两个符号组成一个节点,如图4-02中的D和E组成节点P1。
(3)重复步骤2,得到节点P2、P3和P4,形成一棵“树”,其中的P4称为根节点。
(4)从根节点P4开始到相应于每个符号的“树叶”,从上到下标上“0”(上枝)或者“1”(下枝),至于哪个为“1”哪个为“0”则无关紧要,最后的结果仅仅是分配的代码不同,而代码的平均长度是相同的。
(5)从根节点P4开始顺着树枝到每个叶子分别写出每个符号的代码。

4.3 DCT编码

4.3.1 基本概念

将在空域上描述的图象,经过某种变换(通常采用,余弦变换、傅立叶变换、沃尔什变换等),在某种变换域里进行描述。
在变换域里,首先降低了图象的相关性;其次通过某种图象处理(如频域的二维滤波)以及熵编码,则可进一步压缩图象的编码比特率。
这种变换常用于JPEG图像压缩。

4.3.2 变换压缩原理框图

这里写图片描述
G : 输入源图像
G’ :解码后的图像
U: 二维正交变换
U’ : 二维正交逆变换

有关DCT变换,由于内容较长,将在另一边博文讨论。
请看我另一篇博文:[JPEG压缩原理与DCT离散余弦变换]
http://blog.csdn.net/newchenxf/article/details/51719597

除了这些常见的压缩算法,还有很多种其他算法,这里就不一一介绍啦,反正你有个感性的认识就行。

亲,如果你觉得我写的不那么烂,给个赞呗^^


http://chatgpt.dhexx.cn/article/9qEMcimc.shtml

相关文章

JPEG图像压缩算法详解

转载自 http://www.ibm.com/developerworks/cn/linux/l-cn-jpeg/ JPEG压缩算法之前已有很多前辈详细讲解过,我就不在这里画蛇添足了(主要是我懒。。),转载两篇JPEG压缩算法介绍,拼为一篇。侵删。 JPEG图像压缩算法详解…

图片压缩知识

一、图片压缩算法 有损算法: JPEG,我们最为常用的算法。他是通过离散余弦变换,对图片质量尽量小的时候进行有损压缩,该算法对高中波特率下效果很好,但是对低波特率下,就会出现方格之类的,比如1…

imadjust函数分析一

声明:本文涉及到的行数皆指本文提供的附件imadjust.m的代码中行数 本文只讨论imadjust函数是一种用法,即 J IMADJUST(I,[LOW_IN; HIGH_IN],[LOW_OUT; HIGH_OUT],GAMMA) 处理效果如下图 图像矩阵I要求数据类型uint8、uint16、double、single和int16&…

matlab灰度变换函数imadjust、stretchlim

1、imadjust函数 gimadjust(f,[low_in,high_in],[low_out,high_out],gamma) f为输入灰度图像,将low_in和high_in之间的灰度值映射到low_out到high_out之间 gamma大于1,映射函数下凸;小于1,上凸;gamma默认为1&#x…

Matlab中库函数imadjust()的使用细节

不知道大家有没有使用这个函数时,出现结果异常、过曝的情况我在使用时,发现在官方文档中并未声明的细节。 结合开源的程序源码和实验结果发现该函数对矩阵进行处理时,会对参数指明的处理数据以外的内容进行调整,错误使用会导致图像…

stretchlim matlab,matlab灰阶变换函数imadjust和stretchlim的c++实现

灰阶变换 首先介绍一下灰阶变换,一幅图像数据本身在存储的数据结构上为一个二维的矩阵,即一幅图像为m*n个密密麻麻的像素点构成。 image.png 然后,这些像素点有着一个值,这个值成为灰度值或者亮度值,值的范围为[0,255]…

在OpenCV里实现函数imadjust

imadjust 函数是针对灰度图像进行灰度变换的基本图像。 J = imadjust(f,[low_in; high_in],[low_out; high_out],gamma) 此函数将 f 的灰度值映像到 g 中的新值, 也就是将 low_in 与high in 之间的值映射到 low out 与 high out 之间的值。 low in 以下与 high in 以上的值可…

imadjust使用opencv实现

实现函数功能 J low_out (high_out - low_out).* ((I - low_in)/(high_in - low_in)).^ gamma [cpp] view plain copy print ? IplImage* ImageAdjust(IplImage *src, IplImage *dst, double low_in, double high_in, double low_out, double h…

python实现matlab stretchlim函数和imadjust函数

matlab 代码: [img,map]imread(“/home/zhongjia/test.png”); LOW_HIGHstretchlim(img); Jimadjust(img,[LOW_HIGH(1) LOW_HIGH(2)],[0 1],1); imwrite(J,"/home/zhongjia/test_result.png"); 实现功能是:对16位深度1024*1024大小的test.…

MATLAB图像处理imadjust()函数调节图像的对比度示例

imadjust()函数 Jimadjust(I) 将强度图像为I的值映射到J中的新值,使得1%的数据在低强度和高强度I时饱和。这将增加了输出图像J的对比度。 J imadjust(I,[LOW_IN; HIGH_IN],[LOW_OUT; HIGH_OUT])将强度图…

matlab常用语句imadjust作用,matlab中imadjust函数的作用及应用举例

imadjust简介 imadjust是一个计算机函数,该函数用于调节灰度图像的亮度或彩色图像的颜色矩阵。在matlab的命令窗口中键入: doc imadjust或者help imadjust就行了获得该函数的帮助信息, 键入type imadjust可以查看函数的源码。 调用格式&#…

matlab imadjust函数,imadjust从用法到原理—Matlab灰度变换函数之一

imadjust函数是MATLAB的一个工具箱函数,一般的语法调用格式为: f1=imadjust(f,[low_in high_in],[low_out high_out],gamma) (注:本文所述图像数据均为Uint8,对于Matlab,矩阵中的一个元素即是一个像素点) 该函数的意义如图1所示,把图像f灰度变换到新图像f1的过程中,f…

matlab imadjust函数,浅析matlab中imadjust函数

imadjust imadjust是一个计算机函数,该函数用于调节灰度图像的亮度或彩色图像的颜色矩阵。在matlab的命令窗口中键入: doc imadjust或者help imadjust即可获得该函数的帮助信息, 键入type imadjust可以查看函数的源代码。 函数功能&#xff1…

matlab图像灰度调整——imadjust函数的使用

在MATLAB中,通过函数imadjust()进行图像灰度的调整,该函数调用格式如下: Jimadjust( I ) 对图像I进行灰度调整 Jimadjust( I,[low_in;high_in],[low_out;high_out]) [low_in;high_in]为原图像…

matlab——imadjust函数

作用: 对进行图像的灰度变换,即调节灰度图像的亮度或彩色图像的颜色矩阵。 格式: g imadjust(f,[low_in; high_in],[low_out; high_out]) 将图像I中的亮度值映射到J中的新值。即将low_in至high_in之间的值映射到low_out至high_out之间的值。…

4.3 Python图像处理之图像恢复-无约束滤波器(逆滤波)、有约束滤波器(维纳滤波器)

4.3 Python图像处理之图像恢复-无约束滤波器(逆滤波)、有约束滤波器(维纳滤波器) 文章目录 4.3 Python图像处理之图像恢复-无约束滤波器(逆滤波)、有约束滤波器(维纳滤波器)1 算法原…

MATLAB图像的恢复

一、实验类型:验证性实验 二、实验目的 1. 掌握退化模型的建立方法。 2. 掌握图像恢复的基本原理。 三、实验设备:安装有MATLAB 软件的计算机 四、实验原理 一幅退化的图像可以近似地用方程gHfn 表示,其中g 为图像,H为变形算…

图像恢复 Restormer: 彻底理解论文和源代码 (注释详尽)

文章目录 1. Restormer 论文2. Restormer 网络结构2.1 整体框架2.2 MDTA2.3 GDFN 3. 主要代码理解3.1 MDTA3.2 GDFN3.3 TransformerBlock3.4 一个测试实例 参考文献结语与思考 1. Restormer 论文 主要工作: [1] MDTA (Multi-Dconv Head Transposed Attention), 聚合…

【去噪去模糊去雨】Multi-Stage Progressive Image Restoration 多阶段渐进式通用图像恢复【CVPR2021】

论文:【CVPR2021】Multi-Stage Progressive Image Restoration 多阶段渐进式通用图像恢复 参考:多阶段渐进式图像恢复 | 去雨、去噪、去模糊 | 有效教程(附源码)|【CVPR 2021】 1. 研究问题: 图像恢复领域&#xff0c…

图像恢复及滤波处理

图像恢复及滤波处理 1.基本概念: a.图像恢复是通过计算机处理,对质量下降的图像加以重建或恢复的处理过程。因摄像机与物体相对运动、系统误差、畸变、噪声等因素的影响,使图像往往不是真实景物的完善映像。在图像恢复中,需建立造…