1. 当前位置:网站首页 > 数据恢复

JPEG图片详细分析


JPEG图片详细分析

简述
  JPEG是一个压缩标准,以一幅24位彩色图像为例,JPEG的压缩分为四个步骤:
  ①颜色转换:在将彩色图像进行压缩之前,必须先对颜色模式进行数据转换。转换完成之后还需要进行数据采样。
  ②DCT 变换:是将图像信号在频率域上进行变换,分离出高频和低频信息的处理过程,然后再对图像的高频部分(即图像细节)进行压缩。首先以象素为单位将图像划分为多个8×8的矩阵,然后对每一个矩阵作DCT 变换。把8×8的象素矩阵变成8×8的频率系数矩阵(所谓频率就是颜色改变的速度),频率系数都是浮点数。
  ③量化:由于下面第四步编码过程中使用的码本都是整数,因此要对频率系数进行量化,将之转换为整数。数据量化后,矩阵中的数据都是近似值,和原始图像数据之间有了差异,这一差异是造成图像压缩后失真的主要原因。这一过程中,质量因子的选取至为重要。值选得大,可以大幅度提高压缩比,但是图像质量就比较差,质量因子越小图像重建质量越好,但是压缩比越低。
  ④编码:编码是基于统计特性的方法。
 四个步骤都完成后的JPEG文件,其基本数据结构为两大类型:“段”和经过压缩编码的图像数据。
JPEG图片详细分析

可以这么简单理解:一幅原图压缩成JPG格式的图片,是先把图片按一定的大小分成小块,再按一定的算法把这些块的亮度和色度进行运算得到比原来数据量更小但可以还原的数据。那么这个算法就是FFDB,亮度和和色度采样就是哈夫曼表(FFC1-FFC4),为什么四个呢,有两个不可以吗?设计者就是这样做了,两次采样,一对交流AC,一对直流DC,我的理解是这样图片的还原力更强,更接近于原图吧。这样算完了的数据就放在FFDA段里了。

我们可以打开 JPEG 文件查看里面的内容,

JPEG图片详细分析
JPEG图片详细分析
。 。。。。。。。这是数据部分省略若干字节。。。。。。。。。。。。。。。。
JPEG图片详细分析
即可看到上面的各个标记段:FFD8,FFDB,FFC0,FFC1—FFC4,FFDA,FFD9等,这几个段是jpg图像文件必须有的,也就是说只要有这几个段图像就可以正常打开并完整清楚的显示出来了。这几个段在图像中的前后顺序也是固定的,不能错了。当然,FFD9段可以没有,就这几个字符,不影响。FFD8不能没有,也不能错。否则图像打不开。
除了FFD8,FFD9这两个段没有内容,就是标志着开头和结束外,其它四类段都有大小和内容,它们的大小都是段后面的两个字节来表示:比如FFDB0043,0043就是这个段的长度,也包括0043这两个字节,但不包括段名FFDB这两个字节,也就是说从0043开头的位置向下跳转67个字节就到了下一段了,下一段一定也是以 FF开头的,不是FFDB就是FFC0,或FFC1,刚才说过了,要是第一个FFDB向下跳67个字节一定是第二个FFDB,这是死的,如果第一个FFDB后面的长度不是0043,而是0084,那么这个图像就只有一个FFDB(量化表),接下来跳132个字节就一定是FFC0段了。如下图:
JPEG图片详细分析
这说明量化表由两个合成一个了,内容其实还是一样的,也是两个88矩阵。
总之:FFDB量化表一一般有两个(一个亮度一个色度)或者由两合成一个了,那样的图像结构里就只有一个FFDB段了,两个67字节的就变成一个132个字节的FFDB段了,量化表的内容 都是比较小的数字,没有规律,是根据原来图像采样的数据组成的8行
8列数字矩阵,为了解压还原图像数据用的。
量化表的实例
JPEG图片详细分析
上面这个内容,FFDB 标记后的长度值为67,接下来的是 QT 信息,占一个字节;
这里是0,表示这个 QT 表编号为0,并且精度是8bit。然后后面就是64个8x8的 QT 表的各个 item 了。
也即第一个 DQT 量化表的内容表示为十进制是:
JPEG图片详细分析
这个表即为 JPEG 亮度量化表。

第二个量化表的内容为:
JPEG图片详细分析
这个表的内容即为 JPEG 色度量化表。
当你打开不同的 JPEG 文件,你会看到这两个表可能也是会有区别的。这个主要是使用了不同的量化方式的结果。
总结:记住第一段前5个字节FFDB004300可以跳到第二段FFDB004301 其它是两个64字节的矩阵不用记。
接下来就是 图像信息段FFC0段了(有个别图片用FFC2来描述图像信息),这段也是固定长度的,17个字节,这17个字节除了宽度和高度以外其它不同的图片基本一样,记住就好了,具体表示如下:
JPEG图片详细分析

上面这个内容,FFC0 标记后即是长度,为17;
然后是一个字节的数据精度,通常是为8,代表样本位数。
接下来是图片的高度,占两字节,这里即为8,然后是图片的宽度,也为8,这也就是我们定义的8x8的内容。
然后是 component 的个数,这里是3,表示 YUV。接下来是三组数据,每组数据里,第一个是 component ID,第二个是采样系数,这里 Y 的采样系数为22,说明垂直是2,水平是2。
总结:这17个字节的意义要基本搞明白,出题点有两个:一个是分辨率,一个是数据精度,其它的量化表的数量,编号,采样系数和ID各个图片都一样,记住就好了。如果记不住的话用画图新建一个就可以看到了。

Haffman 表FFC4有四个:
JPEG图片详细分析
上面这个内容,FFC4 标记后的内容为数据长度,再接着的1字节为 Huffman Table 的信息,低4位是 HT ID 号,第5位是 HT 表类型标记,再高三位是为0。
总结:记住这部分的长度,和类型。
长度一般是31和181,类型四个是固定顺利的:00,10,01,11,后面的内容没法记,也不用记。
图像数据段FFDA
JPEG图片详细分析
这里 SOS 段,长度为 12,后面所含有的 component 数量为 3 个,也即 Y UV。然后后面是各 component 的编号,及对应所使用的 Huffman 表的 ID 是多少。
总结:这12个字节所有的图片都基本一样的。
在这个段的后面就是所有压缩后的数据。直到结束的标记,即 FFD9,EOI(End Of Image)。
当然说过了,FFD9可以没有。
总之:JPG图片格式由FFD8,FFDB,DDC0,FFC4,FFC4,FFC4,FFC4,DDDA组成,它们由其后面的两个字节的大小,并且每个段一定要前后连成一片,而且不能变换顺序。切记!
常见的格式如下:
FFD8(FE00010 ...14字节... FFE10022...32字节...)FFDB004300..64字节...FFDB004301...64字节...FFC0001108...14字节...FFC4001F00...28字节...FFC400B510...178字节...FFC4001F01...28字节...FFC400B511...178字节...FFDA000C03010002110311003F00+图片数据部分(注意这部分后面的数据删除变化不影响前面,但前面改了会影响后面,前面括号部分可以没有)。

JPG图个损坏后的损坏后的恢复,请看实例分析。


本文最后更新于2023-4-30,已超过 3个月没有更新,如果文章内容或图片资源失效,请留言反馈,我们会及时处理,谢谢!
版权说明

本文地址:https://bolg.xs357.com/post-11.html
未标注转载均为本站远程,转载请注明文章出处:

联系我们

在线咨询:点击这里给我发消息

微信号:LS1975172433

工作日:9:00-23:00,节假日休息

扫码关注