您的位置:首页 > 其它

DCT变换的基函数与基图像

2017-12-03 19:45 1051 查看

1. 图像变换的基函数

  在图像的二维变换中,如果图像本身是正方形的(图像的长与宽相等),并且图像的变换核满足课可分离性和对称性,则此时图像的二维变换可以用两个一维变换代替,并有如下的矩阵表示形式(更过细节请参考《离散余弦变换(DCT)的来龙去脉》

T=AFAT

其中 A 是进行图像一维变化的时的矩阵,很多时候人们会误认为这个就是图像二维变换的基函数,这时不对的,因为在冈萨雷斯的《数字图像处理》中是这样定义基函数及基图像的。考虑大小为 n×n 的子图象 g(x,y) ,其离散变换 T(u,v) 可以表示为如下的关系

T(u,v)=Σn−1x=0Σn−1y=0g(x,y)r(x,y,u,v)

其中 u,v=0,1,2,……,n−1,其中的 r(x,y,u,v) 被称作是基函数或者是基图像。所以并不是 A 是基函数,而是 r(x,y,u,v) 。那 r(x,y,u,v) 可不可以用 AAT来表示呢?明显是不可以的,要不也就不用将它变成两个一维变换代替了。具体应该如何计算呢,将在第三部分如何绘制基图像中给出。

2. 图像变换的基图像

  以二维DCT变换为例介绍图像二维变换的基图像,如下图所示为 4×4 DCT变换的基图像



图1. n=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 时的值的图像,依次类推可以画出其余所有的图像。

3.如何绘制基图像

3.1 原理部分

  由上述内容可以知道,基图像就是固定 u,v 之后得到的变换核在所有可能取值的 x,y 上构成的图像,实际上这个图像也是可以根据矩阵计算生成的,根据《离散余弦变换(DCT)的来龙去脉》)可知变换矩阵 A 如下图所示



图2. DCT变换矩阵及两坐标轴意义

上图是根据一维变换核 r(x,u) 得到的变换矩阵,从图2 可以看到,水平方向取的是不同的 x 的值,竖直方向取得的是不同的 u 的值,原点位于左上角;同样变换矩阵 AT 如下图所示



图3. DCT变换矩阵的转置及两坐标轴意义

因此我们可以看到,当求图1 左上角的基图像时,只需要将图3 中的第一列乘以图2 中的第一行即可;当求图1 顶部行中的第二块的基图像(u=0,v=1)时,只需要图3 中的第二列乘以图2 中的第一行即可,依次便可以计算整幅基图像。

3.2 Matlab实现

  如果按照上面介绍的方法进行编程实现的话,相信一定是一个两层循环的程序。但是根据《使用矩阵运算替代 for 循环实现信号的DTFT》的思想,这样的一个针对与方阵进行的for循环基本上都可以写成矩阵相乘的形式。比如我们现在的两个矩阵是如下的两个简单的二维矩阵



图4. 简单二维矩阵

如果按照上述介绍的方法,得到的基函数为



但这样的过程也可以通过两矩阵相乘的形式得到,如下所示



  观察这两个结果可以看到,只有矩阵的右上角与左下角不同。但是实际上这两部分是对称的,对应到图1的基图像上只是出现水平条纹与竖直条纹的位置发生了变换。但是本身图像就是关于对角线对称的,因此这两个位置发生了变换也没有什么关系,另一方面,从右上角和左下角的矩阵的组成可以看到,右上角的实际上应该是水平的图案,而左下角是垂直的图案,这与图1 中的图像相同。

  实验结果如下图所示



这个图像与图1 明显不同,并不是计算的过程有问题,是因为在上述计算的基函数矩阵中有整数有负数,但是灰度图像应该是在[0,1]区间内的,所以需要将计算后的值放缩到[0,1]区间内。这样修改后的实验结果如下图所示



  采用MATLAB实现的代码请参考:http://download.csdn.net/download/dugudaibo/10143437
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息