很多朋友对于JPEG 图像压缩技术详解与流程分析和不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!
Cb=-0.1687R-0.3313G+0.5B+128
Cr=0.5R=0.418G-0.0813B+128
一般来说,C值(包括CbCr)应该是有符号数,但这里通过加上128,变成8位无符号整数,以方便数据存储和计算。
R=Y+1.402(Cr-128)
G=Y-0.34414(Cb-128)-0.71414(Cr-128)
B=Y+1.772(Cb-128)
“色差”的概念起源于电视行业。最早的电视都是黑白的。当时电视信号唯一需要传输的就是亮度信号,即Y信号。彩电出现后,人们在Y信号之外又增加了两个信号。色差信号用于传输颜色信息。这样做的目的是为了兼容黑白电视,因为黑白电视只需要处理信号中的Y信号即可。
对于人眼来说,图像中明暗的变化更容易感知,这是由人眼的结构造成的。视网膜上有两种类型的感光细胞,可以感知亮度变化的杆细胞和可以感知颜色的视锥细胞。由于视杆细胞的数量比视锥细胞多得多,因此我们可以更容易地感知明暗细节。
2. 采样(YCrCb YUV411 YUV422)
3. 分块(8*8)
JPEG 编码以8x8 点为单位进行处理。因此,如果原始图像的长和宽不是8的倍数,则需要先将其补足为8的倍数,以便可以逐块处理。将原始图像数据划分为8*8的数据单元矩阵后,每个值都要减去128,然后一一带入DCT变换公式,以达到DCT变换的目的。图像的数据值必须减去128,因为DCT公式接受的数字范围在-128到127之间。
4. 离散余弦变换(DCT)
F(n)=C(n)*E(n),其中E(n)为基数,C(n)为DCT系数,F(n)为图像信号;如果考虑垂直方向的变化,则需要一个二维底座。
5.量化
前面的变换都是可逆的,即数据信息不会丢失。
大多数数据压缩是通过量化完成的。有时保存图片时,软件会提示您选择保存精度。其实就是改变量化的程度,或者说改变量化系数矩阵相乘的倍数。
由于亮度和色度的精度要求不同,因此亮度和色度分别采用不同的量化表。前者是精细量化,后者是粗量化
6.ZigZag扫描排序
量化矩阵的最后一步是将量化后的二维矩阵转换为一维数组,以方便后续的哈夫曼压缩。然而,在进行这种顺序转换时,需要遵循特定的值顺序。这样做的目的只有一个,就是尽可能地将0 放在一起。由于大部分0都集中在右下角,所以我们按照从左上角到右下角的顺序进行。经过这样的顺序变换后,最终的矩阵就变成了一个整数数组
7. DC系数的差分脉冲调制编码
8*8图像块经过DCT变换后得到的DC系数有两个特点:
(1)系数值较大;
(2)相邻8*8图像块的DC系数值变化不大;
基于这两个特点,DC系数一般采用差分脉冲调制编码DPCM(DifferencePulseCodeModulation),即取同一图像分量中的每个DC值与前一个DC值的差值进行编码。对差异进行编码所需的位数将比对原始值进行编码所需的位数少得多。假设某个8*8图像块的DC系数值为15,前一个8*8图像块的DC系数值为12,那么两者之差为3。
8. DC系数的中间格式计算
为了进一步节省空间,JPEG并不直接保存数据的具体值。而是将数据按照位数分为16组,存储在表格中。
9. AC系数的游程编码(Run Length Encoding)
量化AC系数的特点是63个系数中有很多值为0的系数。因此,可以采用游程长度编码RLE(RunLengthEncoding)来进一步减少数据传输量。使用这种编码方法,字符串中重复的连续字符可以用两个字节替换,其中第一个字节表示重复次数,第二个字节表示重复的字符串。例如,(4,6) 表示字符串“6666”。不过,在JPEG编码中,RLC的含义与其原本的含义略有不同。在JPEG编码中,假设RLC编码后得到一个(M,N)数据对,其中M为两个非零AC系数之间连续0的个数(即游程长度),N为下一个非零AC 系数。 AC 系数的值为零。这么表示是因为AC系数中有大量的0,而使用Zigzag扫描也会导致AC系数中有很多连续的0。这样就非常适合用RLC进行编码。
10.AC系数的中间格式计算
11.熵编码(霍夫曼编码或算术编码)
OK,关于JPEG 图像压缩技术详解与流程分析和的内容到此结束了,希望对大家有所帮助。
【JPEG 图像压缩技术详解与流程分析】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
终于有时间学习一下图片压缩技术了!
有5位网友表示赞同!
这篇文章能详细解释JPEG怎么压缩图片吗?
有14位网友表示赞同!
以前都不知道压缩图片背后的原理是什么,挺好奇的。
有6位网友表示赞同!
希望看到一些代码实现吧,这样更容易理解。
有15位网友表示赞同!
最近在做一些网站开发项目,了解一下 JPEG 加压缩算法很有用。
有9位网友表示赞同!
我记得JPEG压缩主要是通过去除冗余信息来达到压缩的效果吧?
有19位网友表示赞同!
想了解一下这个过程中的具体操作步骤,以及一些参数设置的影响。
有12位网友表示赞同!
文章讲到没提到对不同图片类型(人物肖像、风景等)的压缩策略吗?
有17位网友表示赞同!
不知道JPEG在压缩过程中会损失多少画质呢?有没有办法减少图片质量损失?
有12位网友表示赞同!
学习一下JPEG算法可以让我更好地控制图片大小和质量吧!
有9位网友表示赞同!
我做图形设计的时候经常需要调整图片大小,了解这个算法能帮到我很多。
有8位网友表示赞同!
希望文章能够解释清晰易懂,不要过于专业性太强。
有5位网友表示赞同!
学习完这篇文章,我想试试自己用代码实现JPEG压缩算法!
有5位网友表示赞同!
之前听说过JPEG这种算法,但没有深入了解过其原理和流程。
有17位网友表示赞同!
很佩服能把如此复杂的算法设计出来的人!
有13位网友表示赞同!
想了解更多关于图像压缩的知识,除了JPEG还有其他的算法吗?
有19位网友表示赞同!
这篇文章的内容看起来很有价值,可以让我在图像处理方面有所进步吧!
有10位网友表示赞同!
学习一下JPEG压缩算法不仅对软件开发有帮助,对摄影爱好者也有用处。
有8位网友表示赞同!
期待看到本文分享一些实用的小技巧和经验总结。
有10位网友表示赞同!