JPEG编码协议--DCT变换

发布时间 2023-06-13 23:26:04作者: 沉默的思想

      从之前的几篇文章介绍可以看出,JPEG编码最重要的一步就是DCT变换,将空域的图像信号转换到频域,达到良好的去空间相关性的性能,DCT变换本身是无损的。因此DCT变换在图像编码领域被广泛应用。

一、一维DCT变换

      在JPEG编码中使用了二维DCT变换,一维DCT是二维的基础,我们先看下一维DCT变换。一维DCT变换共有8种形式,其中最常用的是第二种形式,由于其运算简单、适用范围广。我们在这里只讨论这种形式,其表达式如下:

    

    其中,f(i)为原始的信号,F(u)是DCT变换后的系数,N为原始信号的点数,c(u)可以认为是一个补偿系数,可以使DCT变换矩阵为正交矩阵。对应的逆DCT变换公式为:

 

二、二维DCT变换

    二维DCT变换其实是在一维DCT变换的基础上再做了一次DCT变换,其公式如下:

 

    由公式我们可以看出,上面只讨论了二维图像数据为方阵的情况,在实际应用中,如果不是方阵的数据一般都是补齐之后再做变换的,重构之后可以去掉补齐的部分,得到原始的图像信息,这个尝试一下,应该比较容易理解。

    如果原始信号是图像等相关性较大的数据的时候,我们可以发现在变换之后,系数较大的集中在左上角,而右下角的几乎都是0,其中左上角的是低频分量,右下角的是高频分量,低频系数体现的是图像中目标的轮廓和灰度分布特性,高频系数体现的是目标形状的细节信息。DCT变换之后,能量主要集中在低频分量处,这也是DCT变换去相关性的一个体现。

      之后在量化和编码阶段,我们可以采用“Z”字形编码,这样就可以得到大量的连续的0,这大大简化了编码的过程。

 三、二维DCT反变换

     在图像的接收端,根据DCT变化的可逆性,我们可以通过二维DCT反变换恢复出原始的图像信息,其公式如下:

 四、分块DCT变换

    在实际的图像处理中,DCT变换的复杂度其实是比较高的,所以通常的做法是,将图像进行分块,然后在每一块中对图像进行DCT变换和反变换,在合并分块,从而提升变换的效率。具体的分块过程中,随着子块的变大,算法复杂度急速上升,但是采用较大的分块会明显减少图像分块效应,所以,这里面需要做一个折中,在JPEG编码中,采用8*8的分块。