1.霍夫曼编码
霍夫曼编码的基本思想:输入一个待编码的串,首先统计串中各字符出现的次数,称之为频次,假设统计频次的数组为count[],则霍夫曼编码每次找出count数组中的值最小的两个分别作为左右孩子,建立他们的父节点,循环这个操作2*n-1-n(n是不同的字符数)次,这样就把霍夫曼树建好了。然后根据霍夫曼树分配二值编码0,1,即可得到唯一的编码序列。
霍夫曼编码本身是一种瞬时的,唯一可解码的块编码。即每个字符都映射到了固定的序列,查表即可解码。JPEG和MPEG标准都规定了默认的霍夫曼编码表。
2.Golomb编码
假设对正整数 x(本身该编码方法就是针对非负行程提出来的)进行 Golomb编码,选择参数 m,令b = 2^m,q = INT((x - 1)/b),r = x - qb - 1,则 x可以被编码为两部分(Gb(x)),第一部分是由 q个 1后面跟1个 0组成的x/b的商的一元编码(即整数q的一元编码定义),第二部分为 m位二进制数,其值为 r。我们将 m = 0, 1, 2, 3时的 Golomb编码表列出:
值 x m =0 m = 1 m= 2 m = 3
-------------------------------------------------------------
1 0 00 000 0 000
2 10 01 001 0 001
3 110 100 010 0 010
4 1110 101 011 0 011
5 11110 1100 1000 0 100
6 111110 1101 1001 0 101
7 1111110 11100 1010 0 110
8 11111110 11101 1011 0 111
9 111111110 111100 110 00 10000
从表中我们可以看出,Golomb编码不但符合前缀编码的规律,而且可以用较少的位表示较小的 x值,而用较长的位表示较大的 x值。这样,如果 x的取值倾向于比较小的数值时,Golomb编码就可以有效地节省空间。当然,根据 x的分布规律不同,我们可以选取不同的 m值以达到最好的压缩效果。这种编码方法很少用于灰度,而是用于相邻的灰度差编码。指数Golomb编码对行程编码很有用,无论长行程,还是短行程。
3.算数编码
算术编码与霍夫曼编码方法相似,都是利用比较短的代码取代图像数据中出现比较频繁的数据,而利用比较长的代码取代图像数据中使用频率比较低的数据从而达到数据压缩的目的。其基本思想是将被编码的数据序列表示成0和1之间的一个间隔(也就是一个小数范围),该间隔的位置与输入数据的概率分布有关。信息越长,表示间隔就越小,因而表示这一间隔所需的二进制位数就越多(由于间隔是用小数表示的)。算术压缩算法中两个基本的要素为源数据出现的频率以及其对应的编码区间。其中,源数据的出现频率、编码区间则决定算术编码算法最终的输出数据。JPEG。
4.LZW编码
1~3的编码方法几种消除编码冗余,LZW编码集中消除空间冗余。
LZW(Lempel-Ziv-WelchEncoding)编码原理是将每一个字节的值都要与下一个字节的值配成一个字符对,并为每个字符对设定一个代码。当同样的一个字符对再度出现时,就用代号代替这一字符对,然后再以这个代号与下个字符配对。LZW编码原理的一个重要特征是,代码不仅仅能取代一串同值的数据,也能够代替一串不同值的数据。在图像数据中若有某些不同值的数据经常重复出现,也能找到一个代号来取代这些数据串。在此方面,LZW压缩原理是优于RLE的。该编码技术已经被引入GIF,TIFF,PDF.
5.行程编码
行程编码又称RLE压缩方法,其中RLE是Run-Length-Encoding的缩写,这种缩写方法广泛用于各种图像格式的数据压缩处理中,是最简单的压缩图像方法之一。它主要用于二值图像压缩。
行程编码技术是在给定的图像数据中寻找连续重复的数值,然后用两个字符值取代这些连续值。例如,有一串字母表示的数据为“aaabbbbccccdddedddaa”经过行程编码处理可表示为“3a4b4c3d1e3d2a”。这种方法在处理包含大量重复信息的数据时可以获得很好的压缩效率。但是如果连续重复的数据很少,则难获得较好的压缩比。而且甚至可能会导致压缩后的编码字节数大于处理前的图像字节数。所以行程编码的压缩效率与图像数据的分布情况密切相关。
6.基于符号的编码
这种编码的思想是,把图像中的子图像作为一个单元,存储其位置和索引,一旦重复出现该子图像,则用索引表示。同时子图像内部,也可以用算数编码或者霍夫曼编码压缩。
JBIG2压缩中对正文,采用该方法。
因此,该方法针对二级图像压缩。
7.比特平面编码
将图像分解成比特平面,对每个平面的二值图像,采用几种熟知的二值编码方法。该方法针对多级图像压缩。
8.块变换编码
该方法把图像分成大小相等且不重叠的小块,利用二维线性可逆变换把每个块或子图像映射为变换系数集合,然后对这些变换系数进行量化和编码。预测编码认为冗余度是数据固有的,通过对信源建模来尽可能精确地预测源数据,去除图像的时间冗余度。但是冗余度有时与不同的表达方法也有很大的关系,变换编码是将原始数据“变换”到另一个更为紧凑的表示空间,去除图像的空间冗余度,可得到比预测编码更高的数据压缩。
变换编码是将图像时域信号变换到系数空间(频域)上进行处理的方法。在时域空间上具有很强相关的信息,在频域上反映出在某些特定的区域内能量常常被集中在一起或者是系数矩阵的分布具有某些规律,从而可以利用这些规律分配频域上的量化比特数而达到压缩的目的。变换编码的目的在于去掉帧内或帧间图像内容的相关性,它对变换后的系数进行编码,而不是对图像的原始像素进行编码。
先对信号进行某种函数变换,从一种信号(空间)变换到另一信号(空间)然后再对变换后的信号进行编码。比如将时城信号变换到频域,就是因为声音和图像的大部分信号都是低频信号,在频域中信号能比较集中,换为频域信号后再进行采样、编码,可以达到压缩数据的效果。可以看出预测编码和变换编码相比:预测编码主要在时空域上进行,变换编码则主要在变换域上进行。采用变换编码的有DEF(傅立叶变换)、DTC(离散余弦变换等)。
有WHT,正反变换核相同,计算简单,DCT,最常使用的,正反变换核相同。DCT携带信息的能力比WHT和DFT要强。但最强的是KLT,但KLT依赖数据,也就是其与输入有关系,计算繁重。而与输入无关的非正弦变换(DFT ,DCT)最容易实现。DFT的块缺陷问题比较严重。JPEG就是用的DCT变换编码。
9.预测编码
预测编码方式是目前应用比较广泛的编码技术之一。预测编码中典型的压缩方法有脉冲编码调制(PCM,Pulse Code Modulation)、差分脉冲编码调制(DPCM,Differential Pulse Code Modulation)、自适应差分脉冲编码调制(ADPCM,AdaptiveDifferential Pulse Code Modulation)等,它们较适合于声音、图像数据的压缩,因为这些数据由采样得到,相邻样值之间的差相差不会很大,可以用较少位来表示。通常,图像的相邻像素值具有较强的相关性,观察一个像素的相邻像素就可以得到关于该像素的大量信息。这种性质导致了预测编码技术。采用预测编码时,传输的不是图像的实际像素值(色度值或亮度值),而是实际像素和预测像素值之差,即预测误差。预测编码分为无失真预测编码和有失真预测编码。无失真预测编码是指对预测误差不进行量化,所以不会丢失任何信息。有失真编码要对预测误差进行量化处理,而量化必然要产生一定的误差。
数字图像水印
插入冗余信息。用作
1.版权识别
2.用户识别或指纹
3.著作权认定
4.自动监视
5.复制保护
---------------------
作者:EasonApp
来源:CSDN
原文:https://blog.csdn.net/App_12062011/article/details/42469941
版权声明:本文为博主原创文章,转载请附上博文链接!