DCT变换
来源:互联网 发布:java final 修饰变量 编辑:程序博客网 时间:2024/05/22 12:04
DCT变换的基本思路是将图像分解为8×8的子块或16×16的子块,并对每一个子块进行单独的DCT变换,然后对变换结果进行量化、编码。随着子块尺寸的增加,算法的复杂度急剧上升,因此,实用中通常采用8×8的子块进行变换,但采用较大的子块可以明显减少图像分块效应。
在图像压缩中,一般把图像分解为8×8的子块,然后对每一个子块进行DCT变换、量化,并对量化后的数据进行Huffman编码。DCT变换可以消除图像的空间冗余,Huffman编码可以消除图像的信息熵冗余。
DCT是无损的,它只将图像从空间域转换到变换域上,使之更能有效地被编码。对一个图像子块而言,将对变换后的6?个系数进行量化,并对Z字顺序扫描系数表进行编码。这种排列方法有助于将低频非0系数置于高频系数之前,直流系数由于包含了所有图像特征中的关键部分而被单独编码。量化后的系数经过熵编码进一步无损压缩,通常采用的是Huffman编码。这种压缩编码方法中,图像质量的降低主要是由于对系数的量化造成,且不可恢复。假设子图像为f(x,y),则DCT变换可以由下面的公式实现:
其中式(1)的f(u, v)表示变换域的高频成分,也称为交流系数;式(2)中F(0, 0)表示变换域中的低频成分,也称为直流系数。对变换结果进行分析,可以看出能量主要集中到左上角。DCT变换具有良好的去相关特性。在图像的压缩编码中,N一般取8。
在解码时首先得到各点的DCT系数,然后根据下面的DCT反变换即可恢复出原图像。DCT的反变换公式为:
利用公式(3)可以无损地恢复原图像。在实际的应用中,使用DCT变换的矩阵描述形式更容易理解。
基于系数重要性的分层编码
按照上面的方法对图像变换之后的系数进行编码,产生的码流不具有分层的特性,因而不具有分级传输的能力。为了实现分层压缩,我们对变换后的系数进行重新排列(见图1),再进行支持分级传输特性的编码。
由上面图中的方法可知,变换后能量集中到变换域的左上角。因此基于DCT变换的图像压缩方法是对系数采用“Z”字型扫描的方式处理。为了实现分层编码,我们将这些系数重新排列,然后进行分层次的编码:左上角的4个系数作为基本层的数据;左上角16个系数作为第一增强层的数据,这16个系数是除基本层中的四个系数以外的其余系数;从16-47的数据作为第二增强层的数据;其余的16个系数作为第三增强层数据。
经过重排并进行分层压缩之后,在各个层次上进行测试可以发现,在只传输基本层时可提供峰值信噪比为23.23dB以上的图像;增加一个增强层,图像的峰值信噪比强达到28.9dB以上;如果加入第二个增强层,恢复图像的峰值信噪比可以达到37.35dB。
采用这种方法,通过对DCT变换后的系数按照其重要性进行取舍,可以非常方便地实现图像序列的分层压缩和分级传输,大大提高压缩算法对不同传输通道的适应能力,并兼顾到帧内图像质量与帧速率。在一般的应用场合下,只传输第一增强层的数据即可达到较好的视觉效果,此时需要熵编码的数据量已经减少为原数据量的1/4,通过熵编码的方法,可以获得很高的压缩比。
、
http://www.ed-china.com/ART_8800012576_400002_500004_TS_8425a4e3.HTM
离散余弦变换(DCT)
离散余弦变换DCT (Discrete CosineTransform)是数码率压缩需要常用的一个变换编码方法。任何连续的实对称函数的付立叶变换中只含余弦项,因此余弦变换与付立叶变换一样有明确的物理意义。DCT是先将整体图像分成N*N像素块,然后对N*N像素块逐一进行DCT变换。由于大多数图像的高频分量较小,相应于图像高频分量的系数经常为零,加上人眼对高频成分的失真不太敏感,所以可用更粗的量化。因此,传送变换系数的数码率要大大小于传送图像像素所用的数码率。到达接收端后通过反离散余弦变换回到样值,虽然会有一定的失真,但人眼是可以接受的。二维正反离散余弦变换的算式:
其中N是像块的水平、垂直像素数,一般取N=8。N大于8时效率增加不多而复杂性大为增加。8*8的二维数据块经DCT后变成8*8个变换系数,这些系数都有明确的物理意义。譬如当U=0,V=0时F(0,0)是原64个样值的平均,相当于直流分量,随着U,V值增加,相应系数分别代表逐步增加的水平空间频率和垂直空间频率分量的大小。当我们先只考虑水平方向上一行数据(8个像素)的情况时,如图1所示:
可见图像信号被分解成为直流成分;以及从低频到高频的各种余弦成分;而DCT系数只是表示了该种成分所占原图像信号的份额大小;显然,恢复图像信息可以表示为这样一个矩阵形式:F(n)=C(n)*E(n)
式中E(n)是一个基底 ,C(n)是DCT系数,F(n)则是图像信号。
如果再考虑垂直方向上的变化,那么,就需要一个二维的基底,即该基底不仅要反映水平方向频率的变化;而且要反映垂直空间频率的变化;对应于8*8的像素块;其空间基底如图2所示:它是由64个像素值所组成的图像,通常也称之为基本图像。把它们称为基本图像是因为在离散余弦变换的反变换式中,任何像块都可以表示成64个系数的不同大小的组合。既然基本图像相当于变换域中的单一的系数,那么任何像元也可以看成由64个不同幅度的基本图像的组合。这与任何信号可以分解成基波和不同幅度的谐波的组合具有相同的物理意义。
图2给出了一个对8*8像块进行DCT变换的具体例子:
在如图3所示的实例中,可以看出:经过一次DCT变换计算后,64个样值仍然得到64个系数,本身码率并没有压缩;但是,经DCT变换后,比特数却增加了。原样值是8比特,数据从0~255;得到的F10即直流分量的最大值是原来256的64/8份,即0~2047,交流分量的范围是-1024~1023;但经过第2个步骤,即量化之后(图中△:4),大多数高频分量的系数变为0,一般说来,人眼对低频分量比较敏感,对高频分量则不太敏感;因而量化的结果是去掉了不太重要的高频分量,降低了码率。再通过“之”字型(Zig-Zag)方式读出数据,这样读出也可以减少码率。因为经DCT变换以后,系数大多数集中在左上角,即低频分量区,因此“之”字型读出实际上是按二维频率的高低顺序读出系数的。这样就便于采用游程长度编码(RunLength Encoding),所谓游程长度编码是指一个码可以同时表示码的值和前面有几个零。这样就发挥了“之”字型读出的优点,因为“之”字型读出,出现连零的机会比较多,特别到最后,如果都是零,在读到最后一个数后,只要给出“块结束”(EOB)码,就可以结束输出,因此节省了很多码率。
//////////////////////////////////////////////////////////////////
离散余弦变换(DiscreteCosineTranform,简称DCT)是一种与傅立叶变换紧密相关的数学运算。在傅立叶级数展开式中,如果被展开的函数式是偶函数,那么其傅立叶级数中只包含余弦项,再将其离散化可导出余弦变换,因此称之为离散余弦变换。时间域中信号需要许多数据点表示;在x轴表示时间,在y轴表示幅度。信号一旦用傅立叶变换转换到频率域,就只需要几点就可以表示这个相同的信号。如我们已经看到的那样,原因就是信号只含有少量的频率成分。这允许在频率域中只用几个数据点就可以表示信号,而在时间域中表示则需要大量数据点。
- DCT变换
- DCT变换
- DCT变换
- DCT变换
- dct变换
- DCT变换
- DCT变换
- dct变换
- DCT变换
- DCT变换
- DCT变换
- DCT变换、DCT反变换、分块DCT变换
- DCT变换、DCT反变换、分块DCT变换
- DCT变换、DCT反变换、分块DCT变换
- DCT变换、DCT反变换、分块DCT变换
- [转] DCT变换、DCT反变换、分块DCT变换
- DCT变换、DCT反变换、分块DCT变换
- DCT快速变换
- &和&&;|和||的区别C#
- c语言中的宏定义
- 南阳理工 102次方求模
- 头文件中ifndef/define/endif的作…
- 内存分配以及栈和堆
- DCT变换
- linux下快速和简单的安装docker
- 几种视频压缩标准简介
- 在宏定义 #define PI 3.14159中,…
- 结构体和链表
- 结构体 联合体 链表 枚举和位域
- pcl,opencv,openni2,Qt5官方文档
- struts2(基础1)
- VMware 12 安装 macOS S 10.12 144 (转载)