原文地址:http://www.stefan-kuhr.de/download/thesis2side.pdf

DCT算法是数字图像压缩中非常基本的算法,数字图像压缩时使用的是二维N*N(JPEG中N一般取8)的DCT.定义如下:

The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

如果按公式直接计算,那么计算量是非常巨大的,对于N=8,变换结果有8*8个系数,每个系数都需要进行8*8次乘法和8*8-1次加法。因此总的计算量为8*8*8*8次乘法;8*8*(8*8-1)次加法.实际中的处理是把二维8*8的DCT按The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)转换为按行和按列的两个8次一维8点DCT计算.而8点DCT只需要8*8次乘法加8*(8-1)次加法.8行(列)DCT总共需要8*8*8次乘法加8*8*(8-1)次加法.因此总的计算量为2*8*8*8次乘法,2*8*8*(8-1)次加法,仅为直接计算的1/8.

对于8点DCTThe T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法).,AAN算法 (T. Agui Y. Arai and M. Nakajima. A fast DCT-SQ Scheme for Images. Transactions of the IEICE, E 71:1095 – 1097, Nov 1988.)只需要13次乘法,29次加法.而且其中8次乘法都发生在计算的最后一步.对于JPEG标准DCT计算后紧跟着就是对DCT系数进行量化,这8次乘法可以合并在量化过程中.因此对于JPEG来说,AAN算法实际只需要5次乘法,29次加法. 其流程图如下

The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

带箭头的连线表示减,不带箭头的边表示加,a1~a5为乘法的常数.
                                           The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

网上对于AAN算法的介绍不是很多,而且原始论文T. Agui Y. Arai and M. Nakajima. A fast DCT-SQ Scheme for Images. Transactions of the IEICE, E 71:1095 – 1097, Nov 1988 也始终找不到.对于其由来一直很不明白.很多论文现其都是直接对变换矩阵进行分解得到最终算法.最近找到一篇论文,也是用矩阵分解的方法对AAN算法进行了推导.虽然不知道为什么要进行矩阵分解,但由于其分解过程还比较详细.因此翻译记录于此,供日后慢慢领悟.

AAN算法的思路是借助16点实对称序列的WFTA计算8点DCT,原理如下:

2N点实对称序列:The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法) 的DFT为:

The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

上式第二项中进行换元k=2N-1-n并利用e的周期性得:

The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

将上式第二项中k带回n得:

The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

(1)式两边同乘The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

因此2N点实对称序列的前N个DFT系数乘上一个复数比例因子恰好就是N点实序列的DCT系数。正是利用这一关系,借助16点WFTA算法推导出了AAN算法

16点WFTA算法

DFT算法写成矩阵形式就是:
The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

对N=16,记The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

则变换矩阵M为

The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

其偶数行前后部分相等,奇数行数前后半部分全部相反。因此将M按如下规则重排: 所有偶数行相对位置不变放到前8行,所有奇数行相对位置不变放到后8行.由于奇数行和偶数行的前后数据关系,将重拍后的矩阵看成四个8*8的分块矩阵则:The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

 再加上奇偶行的重排矩阵得:
The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)


    
              The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)                         The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

对于The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)左上角的8*8方阵满足同样的对称关系,因此可以继续进行同样的分解,但右下角的8*8方阵不满足这样的对称关系.只能专门进行分解.暂记为The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)的结构为 The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法),要想对The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)的左上角进行变换,而右下角保持不变,则变换矩阵The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)的结构应为The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)分别为变换矩阵和单位阵.经过再次分解后:The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

               The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)
          The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

同样对这次分解后剩下的不具备行对称关系4*4方阵先记为The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法).这次分解后剩下的左上角4*4方阵任然具有相似的对称偶数行数据前后相等的关系.因此分解可以继续进行.并且将The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)进行分块.左上角为一个4*4方阵,右下角为12*12方阵,其它位置为0。我们只希望变换左上角4*4方阵,而保持其它部分不变,则很容易得出变换矩阵The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)的结构应该为The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法).

经过再次分解后The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

                The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

:The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

为了使The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)左上角的2*2方阵对角化,再对The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)进行一变换,左乘一个,The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)得,The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)


The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)                                             The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

变换矩阵M左边的矩阵The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)都是重排列行序用的。可以把每一个The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)看成The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)的一个置换,这些The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)的乘积还是一个对行的排列,不影响计算结果.因此可以用一个The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)表示
The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

因此最终The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

其中The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)分解如下(分解规则:只使用初等行变换,化成只含0,1的一些列矩阵和一个稀疏矩阵之积):

The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

           The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)


The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

备注:

The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)的分解结果是4*4,8*8矩阵,运算的时候需要把分解的结果带入到原16*16矩阵中.方法如下.:将原方阵分块后看成一个对角阵,把The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)阶方阵也按同样分块,并把分解结果填入到对应位置中即可

例如要将The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)的分解结果带回去,已知The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)则将The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)分成8*8块的分块矩阵:The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

使用WFTA计算DFT所需的计算量复数加法可由 The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)以及The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)的分解式中每行多余1个正负1的个数确定。复数乘法则由以上矩阵中非1的个数决定,16点WFTA只需要10次复数乘法和74次复数加法.

使用WFTA构建AAN DCT

16点WFTA变换矩阵形式为The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法).其中输入The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)要求是16点的.但由于计算DCT时The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)满足实对称,因此只要其中前面8点确定了,后面8点也就确定了.可以在The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)之间增加一个映射,当取的数据在后8点时,自动映射成正确的前面8点中的某个位置.

The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

U正是这样的映射.  因此The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)前8点数据即为The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法) DCT结果(相差一个比例因子)The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)都为上节WFTA中的对应矩阵. The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)可以合并到一起,记为The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法).
                                                                  The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

因为The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)中只有The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)含有复数,因此不会出现两个复数相乘的情况.而整个结果又是实数,因此可以完全忽略The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)里复数的虚部,可以直接将对应复数虚部置0

由于只需要计算Y[0]~~Y[7]这8个数据,因为可以将以上各矩阵进一步简化以便减少计算.由矩阵P可知,Y[0],Y[2],Y[4],Y[6] 由The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)的0,4,2,5行计算出.Y[1],Y[3],Y[5],Y[7]由The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)的8,9,10,11行计算出(由矩阵P第i行中1的位置指明使用The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)的哪一行计算.)

对于0,4,2,5行.每行的后8点数据都是0,因此这4行可表示成The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

将矩阵The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)分别进行适当的分块后可以把它们都看成对角阵.因此The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)从左到右的每一步之积也都是对角阵.Y[0],Y[2],Y[4],Y[6]只跟结果矩阵的0,4,2,5行有关,位于矩阵的上部分,而矩阵每一步之积顶部的8行中,后面的一半数据都全为0.因此计算时可以直接取The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)的左上角8*8小块.因此Y[0],Y[2],Y[4],Y[6]的计算可以简化为:
                                The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)分别为The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)的左上角的8*8小块.

 其中
        The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)最后两行的特殊关系还可进一步分解(交换倒数第一列和倒数第三列,再将倒数第二行的负一倍加到倒数第一行可消去最后一行的两个非零常数)

The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

为了进一步减少运算量,还需对The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)进行简化.

The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

其中

The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

因为有The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)所以有:

The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

由以上关系得:

The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)可简化为:The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

如此简化后The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)下半部分可以全部用0代替

同理The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)可分别简化为:

The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

并且The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)的2,3,6,7行可用0代替

The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

并且The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)的1,3,6,7行可用0代替

The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)相邻的矩阵

The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

由于The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)中第四行和第七行相差一个-1,这个-1可以合并到The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)中去。合并后的The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

最后去掉全为0的行列后得到
The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

其流程图为:


The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

同理,计算基数下表的系数Y[1],Y[3],Y[5],Y[7]时,可以直接采用对应矩阵的右下角8*8方阵进行计算.The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)对应右下角8*8方阵都是单位阵.因此只需要化简


The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)即可

The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)的右下角8*8分块.

The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

V可分解为:
The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

V的分解式中最后一个矩阵

The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)相乘.根据The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)中每列数据的对称关系,可以修改V的最后一个分解式.将The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)每列中两个正负1合并到V的最后一个分解式中去.{合并要求矩阵乘积的结果不变,及V最后一个分解式的修改后每行与The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)中每列对应数据相乘的结果都不能改变.记V最后一个分解式一行数据为a[i],The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)每列数据为b[i],因此对V最后一个分解式每一行的修改都必须满足The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)保持不变.因此只能利用The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)}的关系修改a(i) :i位为1时,如果7 - i mod8 的位置为0,则可以将i位的1移动到7 - i mod 8的位置,并改变符号.

因此修改后的V的最后一个分解式为

因此修改后的V的最后一个分解式为

The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

去掉全为0的行列最后可写成
The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

对应流程图为;
The T. Agui Y. Arai and M. Nakajima DCT Algorithm (AAN DCT算法)

寄偶部分下标合在一起即为文章开头部分的整个流程图

...............................................................................完.............................................................................................................

.................................................................2011年3月22号凌晨1点40分初稿................................................................................/

相关文章:

  • 2021-04-14
  • 2021-04-15
  • 2022-12-23
  • 2021-06-12
  • 2021-09-30
  • 2021-04-19
  • 2021-05-21
  • 2021-10-15
猜你喜欢
  • 2022-12-23
  • 2021-07-16
  • 2022-12-23
  • 2021-11-12
  • 2022-12-23
  • 2021-09-23
相关资源
相似解决方案