在图像的二维变换中,如果图像本身是正方形的(图像的长与宽相等),并且图像的变换核满足课可分离性和对称性,则此时图像的二维变换可以用两个一维变换代替,并有如下的矩阵表示形式(更过细节请参考《离散余弦变换(DCT)的来龙去脉》)
以二维DCT变换为例介绍图像二维变换的基图像,如下图所示为 4×4 DCT变换的基图像
这是根据基函数绘制出的由16个小块组成的基图像,其中每个小块由 4×4 个元素(子方块)组成。为了得到左上角块,我们令 u=v=0 ,并画出 x=y=0,1,2,3 时 r(x,y,0,0) 的值。顶部行中的第二块是 r(x,y,0,1) 在 x=y=0,1,2,3 时的值的图像,依次类推可以画出其余所有的图像。
由上述内容可以知道,基图像就是固定 u,v 之后得到的变换核在所有可能取值的 x,y 上构成的图像,实际上这个图像也是可以根据矩阵计算生成的,根据《离散余弦变换(DCT)的来龙去脉》)可知变换矩阵 A 如下图所示
上图是根据一维变换核 r(x,u) 得到的变换矩阵,从图2 可以看到,水平方向取的是不同的 x 的值,竖直方向取得的是不同的 u 的值,原点位于左上角;同样变换矩阵 AT 如下图所示
因此我们可以看到,当求图1 左上角的基图像时,只需要将图3 中的第一列乘以图2 中的第一行即可;当求图1 顶部行中的第二块的基图像( u=0,v=1 )时,只需要图3 中的第二列乘以图2 中的第一行即可,依次便可以计算整幅基图像。
如果按照上面介绍的方法进行编程实现的话,相信一定是一个两层循环的程序。但是根据《使用矩阵运算替代 for 循环实现信号的DTFT》的思想,这样的一个针对与方阵进行的for循环基本上都可以写成矩阵相乘的形式。比如我们现在的两个矩阵是如下的两个简单的二维矩阵
如果按照上述介绍的方法,得到的基函数为
但这样的过程也可以通过两矩阵相乘的形式得到,如下所示
观察这两个结果可以看到,只有矩阵的右上角与左下角不同。但是实际上这两部分是对称的,对应到图1的基图像上只是出现水平条纹与竖直条纹的位置发生了变换。但是本身图像就是关于对角线对称的,因此这两个位置发生了变换也没有什么关系,另一方面,从右上角和左下角的矩阵的组成可以看到,右上角的实际上应该是水平的图案,而左下角是垂直的图案,这与图1 中的图像相同。
实验结果如下图所示
这个图像与图1 明显不同,并不是计算的过程有问题,是因为在上述计算的基函数矩阵中有整数有负数,但是灰度图像应该是在[0,1]区间内的,所以需要将计算后的值放缩到[0,1]区间内。这样修改后的实验结果如下图所示
采用MATLAB实现的代码请参考:http://download.csdn.net/download/dugudaibo/10143437