JPEG解码:反DCT变换(一)

DCT(Discrete Cosine Transform)离散余弦变换是一种经典谱分析方法,属于离散傅立叶变换的一种特殊情况,即在变换后的傅立叶级数中只包括余弦项,变化后的数据比较集中。经过DCT变换可以将图片从色彩域转换到频率域,将原始图像的信息块转化为代表不同频率分量的系数集。它是一种广泛使用的压缩方法,首先把每个单独的彩色图像分量分成8×8图像块,然后经过二维DCT变换,其低频分量都集中在左上角,高频分量分布在右下角。变换之后还是8×8的数据块,也就是说DCT变换本身并没有起到压缩数据的作用,但是它为以后的数据压缩奠定了必不可少的基础。

经过DCT变换的数据有2个优点:1,信号常将其能量的大部分集中于频率域的一个小范围内,这样一来,描述不重要的分量只需要很少的比特数;2,频率域分解映射了人类视觉系统的处理过程,并允许后继的量化过程满足其灵敏度的要求。对于变换之后的8×8的数据矩阵块,矩阵最左上角的直流 (DC)系数幅度最大,以DC 系数为出发点向下、向右的其它DCT 系数,离DC 分量越远,频率越高,幅度值越小,即图像信息的大部分集中于直流系数及其附近的低频频谱上,离DC 系数越来越远的高频频谱几乎不含图像信息,甚至于只含杂波。

 

压缩图像是经过DCT变换之后的图像,我们要对压缩图像进行解压就要对压缩数据进行“反DCT变换(DCT逆变换)”。DCT逆变换的方法有好几种,我们这里采用行列分解的方法。

DCT逆变换的公式为:

     

可改写为:

f=AτFA                                                                                    

 

 其中A为矩阵:

 对上面的公式进行变形的

Y =FA

f  =AT Y

fT =(AT Y)T =YT A

其中F的数据块。

经分析可知,完成一次DCT逆变换需要4步:

1:压缩数据块(8×8)矩阵与矩阵A(8×8)相乘,得到矩阵Y(8×8)。

2:对矩阵Y进行转秩得到(8×8)。

3:Y的转秩再与矩阵A相乘得到8×8的矩阵ft

4:对ft  进行转秩得到f。  

 

所以整个设计中需要两个模块,一个用于矩阵的相乘,两个用于矩阵的转秩。

总体设计如下:

 

 

A矩阵乘法器的作用是实现输入矩阵和A矩阵的相乘。注意A矩阵在乘法的右边。

iDCT变换的对象是8 ×8的数据单元,既输入数据共64个,按行输入,每8个数据为一行。每输入一行数据就分别和A矩阵的每一列进行乘加运算,每完成一次这样的乘加运算就输出一次结果。由于输入在左边,所以输出的按矩阵的行的序列输出的。比如,输入第一行数据,分别和A矩阵的各列相乘,按顺序输出8个结果,这8个结果就是输出矩阵的第一行;当输入第二行数据时,同样输出8个结果,这8个结果是输出矩阵的第二行。所以经过第一次矩阵乘法之后得到的是Y矩阵。

 

转秩就是对64个数据进行重新排列的结果。

如下图:

左边为未转秩的数据顺序,右边为转秩之后的数据顺序。

 

posted on 2012-03-22 03:36  @火枪手@  阅读(7872)  评论(4编辑  收藏  举报

导航