For faster navigation, this Iframe is preloading the Wikiwand page for 图像压缩.

图像压缩

维基百科,自由的百科全书

此条目没有列出任何参考或来源。 (2018年3月23日)维基百科所有的内容都应该可供查证。请协助补充可靠来源改善这篇条目无法查证的内容可能会因为异议提出而移除。

图像压缩数据压缩技术在数字图像上的应用,目的是减少图像数据中的冗余信息,从而用更加高效的格式存储和传输数据。

压缩的原理

资料越一致,代表统计特性越集中,包括傅里叶变换域(Fourier transform domain)、直方图(histogram)、特征值(eigenvalue)......等方面的集中度。压缩的通则即是利用资料的一致性,越一致的资料,越能够进行压缩。除此之外,也可利用资料的规则性与可预测性来对其作压缩。通常而言,若可以用比较精简的自然语言来描述一个东西,那么也就越能够对这个东西作压缩。

利用资料的特性作压缩

  • 文章:常用字或字母(字母多出现E,少出现QXZ)。
  • 歌曲:重复的旋律、频率的倍频关系、节拍内频率的稳定。
  • 声音:能量多集中在低频、频率在短区间内的稳定。
  • 卡通:每块区域的边缘(edge)信息与颜色(color)、边缘(edge)信息可以用较少参数编码(如果边缘(edge)是几何图案)。

资料压缩示例

  • 声音:MP3(.mp3),压缩率约1/3。
  • 图片:JPEG(.jpg),压缩率约1/10(灰阶)或1/20(彩色,利用4:2:0)。
  • 视频:MPEG(H.264、H.265),压缩率约1/30(灰阶)或1/60(彩色)。

影像的一致性

空间上的一致性

影像中每一点的值,会和相邻的点的值非常接近。

直方图(histogram)是统计出现次数的一种方法,它会去计算一个向量(vector)或一个矩阵(matrix)当中,有多少个点会等于某一个值。

举例来说,

的直方图(histogram)为

将影像相临值的差异,利用直方图(histogram)来统计,会发现值几乎都落在0附近。

频率上的一致性

一张影像的频谱大多集中在低频的地方。 影像的“频率”是在空间域(space domain)作分析:

  • 低频成分代表变化较为缓和的地方,对应的是影像的“颜色”(color)“强度”(intensity)
  • 高频成分代表变化较为剧烈的地方,对应的是影像的“边缘”(edge)“噪声”(noise)


常用图像压缩技术

压缩的技术分成两种:有损压缩(lossy compression)的压缩率较高,但无法重建原来的资料,例如:DFT、DCT、KLT(搭配量化(quantization)与截断(truncation))、4:2:2或4:2:0、多项式曲线的近似(polynomial approximation);无损压缩(lossless compression)的压缩率较低,但可以重建原来的资料,例如:二元编码(binary coding)、霍夫曼编码(Huffman coding)、算术编码(arithmetic coding)、格伦布编码 (Golomb coding)。

4:2:2或4:2:0

此技术运用的是空间上的一致性

将像素(pixel)的RGB值,利用以下的公式变换成YCbCr

Y = 0.299 R + 0.578 G + 0.114 B

Cb = -0.169 R - 0.331 G + 0.500 B ( Cb = 0.565 (B - Y) )

Cr = 0.500 R - 0.419 G - 0.081 B ( Cr = 0.713 (R - Y) )

其中 Y 是亮度(Luminance),Cb是蓝色色差(chrominance) ,Cr 是红色色差(chrominance)。

人类的视觉系统,对于亮度比较敏感,而对于彩度比较不敏感。 因此我们可以利用人类视觉的特性,减少Cb、Cr的采样个数,采样格式有4:2:2 与 4:2:0两种。

假设一张图片原本压缩前(即4:4:4)的Y、Cb、Cr各有M×N个值,4:2:2的压缩Y保留为M×N个值、Cb、Cr则采样到各剩下M/2×N个值;4:2:0的压缩Y同样保留为M×N个值、Cb、Cr则进一步采样到各剩下M/2×N/2个值。 从4:4:4到4:2:2,压缩率约为2/3;从4:4:4到4:2:0,压缩率约为1/2。 从4:4:4压缩到4:2:2,再压缩到4:2:0,单一像素(pixel)存储的bit 数可以等效为:24 bits/pixel → 16 bits/pixel → 12 bits/pixel。

还原时,则是利用插值(interpolation)的方式:

= 1/2 ×( + )


8×8 离散余弦变换(DCT)

此技术运用的是频率上的一致性

通常我们会将影像切成8×8的方格作离散余弦变换(DCT),原因如下:

  • 一张影像的每个区块,其高低频成分都不一样,对整张影像直接作离散余弦变换(DCT),多少会有高频成分的出现。如果切成8×8的方格,则对大部分的方格几乎都没有高频成分。
  • 降低存储器的需要量
  • 降低运算量

经过离散余弦变换(DCT)后的8×8矩阵称为DCT矩阵。DCT矩阵最左上角的系数称为直流(DC)成分,而其他63个系数则称为交流(AC)成分。越靠近DC值的AC值系数表示频率较低的部分,而越往右下角方向的AC值代表的频率则越高。

2D的8×8 DCT的输出通常会按照"zigzag"的顺序,将2D转为1D的类型。按照此顺序排列,能量可能较大的会被摆在前面,而后面的高频成分从某个值开始后几乎为零,以符号EOB(end of block)表示,指后面的高频的部分经过量化(quantization)之后皆为0。

差分编码(Differential coding)

此技术运用的是空间上的一致性

差分编码指的是,除第一个元素外,将其中各元素都表示为各该元素与其前一元素的差的编码。

,是针对 - 去编码, 而不是直接对作编码。

霍夫曼编码(Huffman coding)

霍夫曼编码(Huffman coding)的编码原则:(Greedy Algorithm)

  • 所有的码皆在编码树(coding tree)的端点,再下去没有分枝。满足唯一可解译码(uniquely decodable code)即时可解码(instantaneous decodable code)
  • 几率越大的,编码长度(code length)越短;几率越小的,编码长度(code length)越长。
  • 假设 是第L层的节点(node), 是第L+1层的节点(node),则 >= 必须满足。

不满足以上的条件则往上推一层。

算术编码(Arithmetic coding)

霍夫曼编码(Huffman coding)是将每一笔资料分开编码,算术编码(Arithmetic coding)则是将多笔资料一起编码,因此压缩效率比霍夫曼编码(Huffman coding)更高,近年来的压缩资料大多使用算术编码(Arithmetic coding)。

  • 示例:

假设要对X来作二进制的编码,且经过事先的估计, 的几率为0.8, 的几率为0.2。

若实际上输入的资料为

Initial():lower =0,upper=0.8

When i = 2 ():lower =0,upper=0.64

When i = 3 ():lower =0,upper=0.512

When i = 4 ():lower =0.4096,upper=0.512

When i = 5 ():lower =0.4096,upper=0.49152

When i = 6 ():lower =0.4096,upper=0.475136

由于 lower =0.4096,upper=0.475136

lower <= 14* < 15* <= upper

所以编码的结果为

动态影像之编码

MPEG(Moving Picture Experts Group)为动态影像编码的国际标准。 动态影像编码的使用原理为:不同时间,同一个像素(pixel)之间的相关度通常极高,只需对有移动的对象(objects)记录移动向量(motion vector)

:时间为t的影像

如何由 来预测

(1)移动向量

(2)预测

=

(3)计算“预测误差”

= -

对预测误差 作编码。

影像文件的处理(Matlab)

基本概念

  • 灰阶影像在Matlab 当中是一个矩阵,彩色影像在Matlab 当中是三个矩阵,分别代表红色(Red)、绿色(Green)、蓝色(Blue)。

.bmp: 没有经过任何压缩处理的图像文件

.jpg: 有经过JPEG 压缩的图像文件

  • 要对影像做运算时,要先变成double的格式,否则电脑会默认影像为integer 的格式,在做浮点运算时会产生误差。

例如,若要对影像做2D离散傅里叶变换(Discrete Fourier transform):

im=imread('C:\Program Files\MATLAB\pic\Pepper.bmp');

im=double(im);

Imf=fft2(im);

基本指令

  • Image 档读取: imread
  • Image 档显示: imshow, image, imagesc
  • Image 档制作: imwrite
  • Video 档读取: aviread

示例

  • 黑白影像

im=double(imread('C:\Program Files\MATLAB\pic\Pepper.bmp'));

(如果Pepper.bmp 是个灰阶图,im 将是一个矩阵)

size(im);

(用size 这个指令来看im 这个矩阵的大小)

image(im);

colormap(gray(256));

  • 彩色影像

im2=double(imread('C:\Program Files\MATLAB\pic\Pepper512c.bmp'));

size(im2);

(由于这个图像文件是个彩色的,所以im2 将由三个矩阵复合而成)

压缩方法

图像压缩可以是有损数据压缩也可以是无损数据压缩。常见的应用有raw和tiff格式等。gif和jpeg是有损压缩。通过DCT变换后选择性丢掉人眼不敏感的信号分量,实现高压缩比率。

无损压缩

对于如绘制的技术图、图表或者漫画,优先使用无损压缩,这是因为有损压缩方法,尤其是在低的位速条件下,将会带来压缩有损,如医疗图像或者用于存档的扫描图像……等,这些有价值的内容的压缩也尽量选择无损压缩方法。

有损压缩

有损方法非常适合于自然的图像,例如一些应用中图像的微小损失是可以接受的(有时是无法感知的),这样就可以大幅度地减小位速。

  • 色彩空间:这是化减到图像中常用的颜色。所选择的颜色定义在压缩图像头的调色板中,图像中的每个像素都用调色板中颜色索引表示。这种方法可以与抖动一起使用以模糊颜色边界。
  • 色度抽样:这利用了人眼对于亮度变化的敏感性远大于颜色变化,这样就可以将图像中的颜色信息减少一半甚至更多。
  • 变换编码:这是最常用的方法。首先使用如离散余弦变换(DCT)或者小波变换这样的傅立叶相关变换,然后进行量化和用熵编码法压缩。
  • 分形压缩

特性

图像压缩的目的就是在给定位速或者压缩比下实现最好的图像质量。但是,还有一些其它的图像压缩机制的重要特性:

  • 可扩展编码 :又称渐进编码、嵌入式位流,通常表示操作位流和文件产生的质量下降(没有解压缩和再压缩)。尽管具有不同的特性,在无损编码中也有可扩展编码,它通常是使用粗糙到精细像素扫描的格式。尤其是在下载时预览图像(如浏览器中)或者提供不同的图像质量访问时(如在数据库中)可扩展编码非常有用,有几种不同类型的可扩展性:
    • 质量渐进:又称层渐进,位流渐进更新重建的图像。
    • 分辨率渐进:首先在低分辨率编码图像,然后编码与高分辨率之间的差别。
    • 成分渐进:首先编码灰度数据,然后编码彩色数据。
  • 感兴趣区域编码:图像某些部分的编码质量要高于其它部分,这种方法可以与可扩展编码组合在一起(首先编码这些部分,然后编码其它部分)。
  • 元数据信息:压缩数据可以包含关于图像的信息用来分类、查询或者浏览图像。这些信息可以包括颜色、纹理统计信息、小预览图像以及作者和著作权信息。

压缩方法的质量经常使用峰值信噪比来衡量,峰值信噪比用来表示图象有损压缩带来的噪声。但是,观察者的主观判断也认为是一个重要的、或许是最重要的衡量标准。

参见

参考文献

Jian-Jiun Ding, “Advanced Digital Signal Processing”, NTU, 2021.


{{bottomLinkPreText}} {{bottomLinkText}}
图像压缩
Listen to this article

This browser is not supported by Wikiwand :(
Wikiwand requires a browser with modern capabilities in order to provide you with the best reading experience.
Please download and use one of the following browsers:

This article was just edited, click to reload
This article has been deleted on Wikipedia (Why?)

Back to homepage

Please click Add in the dialog above
Please click Allow in the top-left corner,
then click Install Now in the dialog
Please click Open in the download dialog,
then click Install
Please click the "Downloads" icon in the Safari toolbar, open the first download in the list,
then click Install
{{::$root.activation.text}}

Install Wikiwand

Install on Chrome Install on Firefox
Don't forget to rate us

Tell your friends about Wikiwand!

Gmail Facebook Twitter Link

Enjoying Wikiwand?

Tell your friends and spread the love:
Share on Gmail Share on Facebook Share on Twitter Share on Buffer

Our magic isn't perfect

You can help our automatic cover photo selection by reporting an unsuitable photo.

This photo is visually disturbing This photo is not a good choice

Thank you for helping!


Your input will affect cover photo selection, along with input from other users.