1.什么是傅里叶变换 傅里叶变换能将满足一定条件的某个函数表示成三角函数(正弦和/或余弦函数)或者它们的积分的线性组合。在不同的研究领域,傅里叶变换具有多种不同的变体形式,如连续傅里叶变换和离散傅里叶变换。最初傅里叶分析是作为热过程的解析分析的工具被提出的。(摘抄自百度百科) 连续傅里叶变换的公式 连续傅里叶变换的逆变换的公式 通过公式可以看出一个函数,可以用复指数函数的积分来表示,如果通过欧拉公式变换,也可以用三角函数的积分来表示,其中 F(w)表示的是在某频率下的幅值,而 w为基波频率,iw表示频率,一般的傅里叶函数的曲线表示为iw为横轴,F(w)为纵轴。 傅里叶变换可以把一个函数从t域,也就是时域,变换到w域,也就是频域。通过傅里叶变换可以很方便的看出当前信号的频域特性。 2.什么是离散余弦变换 图像的各个像素点之间的变化都是平滑变化的,所以每个像素点和相邻像素点之间都是相关的,而这种相关性对图像的熵编码很不利,详细请查看信息熵的一些资料。所以我们必须通过某种变换,将图像的各个像素之间的相关性去除,其中去相关最好的算法,目前为K-L变换,但是缺乏快速算法,并且变换矩阵不固定,详细可以查看相关资料。目前常用的是离散余弦变换(DCT),由于其良好的去相关效果,可以较快的变换算法,在多媒体编码算法中得到了广泛的使用。 二维DCT变换及其逆变换的公式如下图:
DCT变换不是傅里叶变换,只是其形式有点像傅里叶变换而已。 3.DCT的整数变换 由于三角函数中会有很多小数的部分,不利于计算机处理,所以将小数部分提取出来,在量化中进行处理。具体如下图
前面三个矩阵的运算都为加法,减法,和移位( *2)运算。 4.蝶形算法 两个4x4矩阵的乘法分解开来会有12次加法和16次乘法运算,而根据DCT变换举证的特性,如果我们合并一些中间结果,就可以减少为8次加法,2次乘法运算。这就是著名的蝶形算法,如下图所示:
5.汇编代码分析 DCT的算法和hadamard变换的算法基本相同,只是某一些系数稍微有点不同,如上图所示。 所以我们只分析hadamard的变换 ;----------------------------------------------------------------------------- |
|