版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2016-11-30学号:院系: 电子与信息工程学院指导教师:摘要离散余弦变换( DCT)是一种正交变换,它本身并不会改变信息源的熵值,因而是一种 无损的变换。 但是由于离散余弦变换 ( DCT)变换能够给量化和编码等过程创造很好的条件, 因而在数字信号处理领域, 特别是语音和图像压缩领域有着很广泛的应用。 对于语音信号与 图像信号这样相关性很强的信号而言, 离散余弦变换 (DCT)接近于最优的 KL变换 (Karhunen- Loeve Transform)。传统的 2-D 离散余弦变换( DCT)变换过程是行 -列变换,这种方法直观简 单但是效率低下, 在有些实时性要求较高的图像压缩领域并
2、不能满足要求。 从离散余弦变换 (DCT)的数学表达式上可以看出,其具有很高的对称性,利用这种对称性可以极大地降低 算法的复杂度。 本次课程报告在总结前人研究的基础上, 展示并实现了一种快速变换和反变 换算法,并在 MATLAB 平台上进行了实现与测试。结果表明,这种算法具有高效、简单、易 于实现的特点。 关键词:快速离散余弦变换,快速离散余弦反变换,快速算法,图像压缩2-D DCT算法优化一、 引言(一)研究背景在本次的课程报告中, DCT的优化算法主要是针对于 2 维输入数据,因而此 算法主要针对的是图像处理。在图像处理领域中,图像压缩编码依据原理可以分为熵编码、预测编码、变 换编码和混合
3、编码。 DCT属于其中的变换编码, 变换编码还包括傅里叶变换和沃 尔什变换等等。 变换编码是一种数学变换对, 通常是将 2 维空间域上的图像经过 正交变换映射到另一个空间域上(例如频域) ,并且使得变换后的系数之间的相 关性降低。 就变换本身而言, 它是一种在数学上无损的变换, 通过反变换可以恢 复原信号。 但是这种变换的特点在于, 变换后图像的大部分能量只集中在少数几 个变换系数上, 这就为量化编码和熵编码带来了很大的便利, 在对系数进行编码 后就能实现图像的压缩。在理论上, K-L 变换是最优的正交变换,它能够完全消除图像块内像素间的 线性相关性,经过 K-L变换后各个系数在统计上不相关,
4、 其协方差矩阵是对角阵, 因而 K-L变换能够大大的减小原数据的冗余度。如果在 K-L 变换之后丢弃数值娇 小的系数,所造成的均方误差是所有正交变换中最小的。但是 K-L变换有一个很 大的缺点, 它的基向量是图像的协方差矩阵的特征向量。 这就意味着对于不同的 图像,它的基向量是不相同的,为了对图像进行 K-L变换,就需要先计算每一幅 图像的相关矩阵, 再对相关矩阵作特征分解, 取特征向量作为变换的基向量。 这 就使得 K-L变换的使用变得很麻烦,甚至是难以实现。DCT变换的性能仅次于 K-L 变换,被认为是一种准最佳变换,对于图像这种 相关性较大的数据, DCT的性能接近于 K-L变换。此外,
5、 DCT的变换矩阵是固定 的,与图像无关。 而且它是构造成对称的数据序列, 避免了子图像边界处的跳跃 和不连续现象。傅里叶变换是应用最早的变换之一,并且也有快速算法。但是傅里叶变换存 在一个很明显的缺陷, 恢复出来的边界会存在不连续现象, 这使得恢复的图像存图 1 离散余弦变换( DCT)效果图在明显可见的方格,影响图像质量。沃尔什变换比 DCT简单,实时性更高,但是性能比 DCT略差。基于以上的特点, DCT 具有广泛的应用,在常见的 JPEG静态图像编码以及 MJPEG、MPEG动态图像编码等标准中都有应用。这种应用的广泛也对DCT的算法效率提出了更高的要求,对 DCT快速算法也有着更加迫
6、切的需求。(二)前人研究由于 DCT在语音和图像压缩领域的广泛应用, 已经有人提出了许多快速算法 和快速计算 DCT的 VLSI架构。 DCT的传统计算方法是行 -列法,先对行计算 1-D DCT,再对列计算 1-D DCT。对于N N大小的图像而言, 这种算法需要计算 2N个 1-D DCT,算法的复杂度为 ?(?2?)。因而为了更加高效地进行 DCT运算,有人提出 了直接对整个 2 维矩阵做 DCT运算。目前,最为高效的 DCT算法是由 Duhamel 和 Guillemot 在 1990 年的一篇论文中提出的多项式变换计算方法。在这种方法 中,2-D DCT运算的乘积运算相对于传统的方法
7、而言减小了 50%。还有人提出基 于 FFT的算法,这种算法的复杂度在传统方法的 50%到 75%之间。此外, Cho 和 Lee 提出了专门针对于矩阵大小为 4 4快速 DCT算法,这种算法仅仅局限于大 小为4 4的变换,如果要进行扩展更大的维数, 则需要与迭代算法相结合, 但是如果维数很大,这种迭代算法这会大大增加整体算法的复杂度。 在本次的课程报告中所展示的是一种有别于以上快速算法的方法, 这种方法 和 Cho 与 Lee 提出的算法有异曲同工之处,本质上来说是对他们算法的一种扩 展。这种算法对于大小为 ?的矩阵而言,仅仅需要计算 N 个 1-D DCT,但是 要求?= 2?,m ?。算
8、法需要的乘积运算次数仅仅为传统算法的50%,与Duhamel 和 Guillemot 的算法有着相同复杂度。 但是相比于 Duhamel 和 Guillemot 的算法而言, 这种算法的结构有着更高的对称性, 更加简单直观, 同时能够更加 容易的应用到硬件的并行处理中,也更加适合 VLSI的实现。(三)报告的章节安排本次报告的主要内容和章节安排如下:快速 DCT算法的理论分析 从数学上对算法进行理论分析, 相关公式推导,总结出最终的算法结构。相应的快速 IDCT算法的理论分析 基于前面的理论推导,总结出快速 IDCT算法的结构。与其他快速算法的复杂度比较 将此算法与传统的算法、其他算法的复杂度
9、作数值上的比较。算法的实现与测试在前面理论分析的基础上,在 MATLAB平台上实现 4 4的快速算法,并 对图像做 DCT和 IDCT变换,检验算法的有效性, 同时与 MATLAB自带的 DCT和 IDCT函数的运算时间进行比较。总结与展望分析此算法的优缺点与可改进的空间。理论分析(一)2-D DCT理论分析对于一个给定的大小为 ?的二维矩阵 X? ?,?=, 0,1,2,? ,?- 1假设二维 DCT矩阵为 ?,?,?= 0,1,2,? ,?- 1DCT变换公式为:?= ?(?)?(?)?-=10 ?-=10 ?c?os( 2?+1)? (2?+1) ?2?)cos (2?(2.1)其中,1
10、 ,?= 0 ?(?) =?(?) =1?1?,?= 0 ?,? 0 ?,? 0定义?为?对?(?) ?(?)做归一化得到的变量?= ?-=10 ?-=10 ?c?os (2?2+?1)?)cos (2?( 2?+1) ?)?2?(2.2.a)?= ?(?)?(?) ?(2.2.b)利用积化和差公式,可以进行如下的变换,( 2?+1)?( 2?+1) ? 1 (2?+1)?+(2?+1)?cos( 2? ) cos( 2? ) = 2(cos ( ?)+2?2?(2?+1)?- (2?+1)? cos(2?) (2.3)将( 2.3)带入到( 2.2.a)中,得到?= 21 ( ?-=10 ?
11、-=10 ?c?os ( (2?+1) ?2?+?(2?+1)?)2?+ ?-=10 ?-=10 ?c?os(2?+1)?2?-?(2?+1)?),2? ?=?, 1,2, ? ,?- 1(2.4)同时,我们定义两个新的变量 ?,?= ?-=10 ?-=10 ?c?os(2?+1)?+(2?+1)?)2?(2.5.a)(2.5.b)?-1 ?-1( 2?+1) ?- ( 2?+1) ?2? ? = ?-=10 ?-=10 ?c?os (2?)所?可以表示为? = 2 (?+ ?)(2.6)从(2.5)与(2.6)中,可以发现, 二维的 DCT变换可以分解为两个分量的叠加, 并且这两个分量( ?
12、与?)的形式类似于一维 DCT的形式。那么下面的目标 就在于如何将 ?与?转换成一维 DCT 的形式。从而达到对于 ?的矩阵而 言,只需要计算 N 次一维 DCT就可以获得二维 DCT。一维 DCT的表达式为?-1(2?+ 1)? = ?(?) ?c?os(2? )?=0与( 2.5.a)和( 2.5.b)对比可以发现,如果 (2?+ 1)?(2?+ 1 ) ?可以转换为 (2?+ 1)?,?的形式,那么就可以将 ?与?转换成一维 DCT的形式。由于?,?= 0,1,2,? ,?- 1 ,那么(2?+ 1) 的值要么等于 (2?+ 1)整数倍除 以2?的余数,要么等于 2N 减去(2?+ 1)
13、 的整数倍除以 2?的余数(2?+ 1) = ?(?2?+ 1) ? 2? (2.7.a)或者(2?+ 1) = 2?- ?(?2?+ 1) ? 2? (2.7.a) 其中?= 1,3,5,7, ? ,?- 1,如果?超过这个范围,这会得到相同的 (2?+ 1)的值。将( 2.7)进行化简,就可以得到(2.8.a)?-1?= (?+? ) ? 2?2或者? 2?(2.8.a)?-1?= (?- 1 - ?-?2其中 ?= 1,3,5,7, ? ,?- 1从(2.8)中可以发现,如果?取? 0 到(?- 1)的不同值,那么对应得到的 ?的? 序 列是不一样的, 这样就得到了 ?2个不同的 (?,
14、?组) 合,这说明,依据(2.8)的公式 可以遍历 ?矩阵内的所有元素。此外每一个 ?的?值都对应着一个 ?的? 序列,这意味着,依据( 2.8)可以对输入 数据分成 N组,每一个组内元素的下标 (?,?都) 满足( 2.8),每一个分组表示为(2.9.a)?-1?(?|?=?)(?+? ?-1 ) ? 2?2或者?-1 ?(?|?=?)(?- 1 - ?-? ) ? 2?2(2.9.a)其中, ?= 1,3,5,7, ? ,?- 1,?= 0,1,2, ? ,?- 1维输入数据 ?,?,?= 0,1,2,? ,?- 1通过( 2.9)就可以分成 N 个一维数据? ?,?(?|?) , ?=
15、1,2,? ,?- 1, ?= 1,3,5,? ,?- 1或者?,?(?|?) ,?= 1,2,? ,?- 1,?= 1,3,5, ? ,?- 1用?和?来表示每一组数据?= ?,?(?|?) , ?= 1,2,? ,?- 1,?(?|?) = (?+? ?-2 1) ? 2?=, 1,3,5,7,? ,?- 1?= ?,?(|?)?,?= 1,2,? ,?- 1,?(?|?=?)(?- 1- ?-?- 1) ? 2?=, 1,3,5,7,? ,?- 1(2.10)?-1为了进一步进行简化,假设已知 (?+? ?2-1 )除以 N的商为?,?于是( 2.10)可以化简为?= ? ?,?(?|?
16、) , ?= 1,2,? ,?- 1,?(?|?) = ?+?-2 1- ?,?= 1,3,5,7,? ,?- 1? ? = ?,?(| ?)?, ?= 1,2,? ,?- 1,?(?|?=) ?- 1- ?-?- 1+ ? ? 2?,= 1,3,5,7,? ,?- 1(2.10)按照( 2.10)中的分组, ?与?可以表达为,? ?= ?-1 ?(?,?) + ?(?,?)(2.11.a)其中?= ?-1 ?(?,?) + ?(?,?)(2.11.b)?(?,?) = ? ?c?os( (2?+1)?+(2?+1)?2?)(2.12.a)?(?,?) = ?c?os( (2?+1)?+(2?
17、+1)?)2?(2.12.b)?(?,?) = ? ?c?os( (2?+1)?-(2?+1)? )2?(2.12.c)?(?,?) = ? ?c?os( (2?+1)?-(2?+1)? )2?(2.12.d)把( 2.11)带入到( 2.6)中,可以得到,?= ?-1 21 ?(?,?) + ?( ?,?) + ?(?,?) + ?(?,?) (2.13)为了把 ?表示为一维 DCT的和的形式,需要将?(?,?)、?(?,?)、?(?,?)、?(?,?)转换成一维 DCT的形式。把( 2.10)带入到( 2.12.a)中,可以得到,N-1? (2?+ 1)?+ ?(2?+ 2) - 2?(?
18、,?) = ?(?|?)?cos(? ?)p将上面的式子拆分为 n 为奇数和偶数两种情况:2?当 n 为奇数时N-1(2?+ 1)?+ (?+ ?)?(?,?) = ?(?|?) cos( (2?+ 1)?+ (?+ ?)?) (2.14. a) i=02?当 n 为偶数是N-1? ? (2?+ 1)?+ (?+ ?)?(?,?) = (-1 ) ?(?|?) cos(? )(2.14. b)i=02?那么以同样的方式,可以获得 ?( ?,?) 、 ?( ?,?) 、?( ?,?) 的表达式,?-1(2?+ 1)?+ (?- ?) ?(?|?) ?(?),? ? ? ? )(2.15.?=0
19、2?N-1? (2?+ 1)?+ (?- ?)? (-1 )?(|?) cos(2?),? ? ? (?2).15.i=0?-1 (2?+ 1)?+ (?- ?) ?(|?)?(?),? ? ?=0N-1 ? (2?+ 1)?+ (? - ?) (-1 )?|(?)cos(2?), ? ? ? i=0 2?-1 (2?+ 1)?+ (?+ ?) ?(|?)?(?),? ? ?(?,?) = N?-1=0? (2?+ 1)?+ (? + ? (-1 )?|(?) cos( i=0?(?,?) =?(?,?) =2?2?2?2?2?),? ? ? ? )(2.16.? (?2).16.? ? )(
20、2.17.? (?2).17.把( 2.14) -(2.17)带入到( 2.13)中,可以得到 ?的新表达式,?=?-1 21?-1 ?(?-112?(?-1(2?+ 1)(?+ ?)? (?(?|?) + ?(?|?)?) cos 2? ?+ ?=0,? ? ?-1(2?+ 1)(? - ?) (?(?|?) + ?(?|?) ) cos 2? ? ?=0 )?-1? (2?+ 1)(?+ ?)? (-1 ) ? ?(?(?| ?) - ?(?|?)?) cos2? ?+?=0?-1? (2?+ 1)(? - ? (-1 )?(?(?|?) - ?(?|?)?) cos2? ?=02? ?
21、) (2.18.2? ? ? ?(2).18.可以发现,?-1(2?+ 1)( ?+ ?)? (? ?(|?) + ?(?|?) ) cos?=0?-1(2?+ 1)( ?- ?)? (? ?(|?)? + ?(?|?) ) cos?=0?-1?(2?+ 1)( ?+ ?)? (-1 ) ?(?(|?)? - ?(?|?) ) cos2? ? (2.19c.)?=0?-1? (2?+ 1)( ?- ?)? (-1 )?(?(?|?) - ?(?|?)?) cos? (2.19.d)?=02?2?2?2?(2.19a.)(2.19b.)2.19.a)和( 2.19.b)分别是?(?|?) + ?
22、(?|?)?序列的一维 DCT变换序列的第(?+ ?)?和(?- ?)?个元素;(2.19.c)和(2.19.d)分别是(-1 )?(?(?|?) - ?(?|?) ) 序列的一维 DCT变换序列的第 (?+ ?)?和(?- ?) ?个元素。定义两个量: ?和?-1(2?+ 1)?(2.20)(2.21)?= (?(?|?) + ?(?|?) ) cos 2? ? ?=0?-1? (2?+ 1)?=? (-1 )?(?(?|?) + ?(?|?) ) cos2? ?=0那么(2.19.a)和(2.19.b)就分别对应着 ?,?= 0,1,2,? ,?- 1;(2.19.c)和(2.19.d)
23、就分别对应着 ?,?= 0,1,2,? ,?- 1。这就意味着,大小为 ?矩阵的二维 DCT只需要先计算出 N 个一维 DCT。从( 2.18)可以看出,要计算出 ?,可以先计算出 ?和? ?,? 然后再将相对应的?和? ?进?行线性叠加,得到最终结果。已知, n 为偶数时,cos(2?+ 1)(?- ?(?- ?)?)= cos(2?+ 1)(? + ?)?) (2.22)2?如果把?表? 达为:2?-1(2?+ 1)(?+ ?) ?= (?(?|?) + ?(?|?) ) cos?=0带入就可以得到,2?(?(?- ?|?) + ?(?- ?|?) ) cos (2?+ 1) (? + ?
24、(?-? ?)? (2.23)(2?+ 1)(?+ (?- ?)?)+ ?(?- ?|?) ) cos?2?上面的两个式子意味着,?总? 是会以 ?(?-?)?的形式出现。同样,(2.24)? ?会? 以那么把( 2.22)?-12? ?(?-?)?= ?=0同样的方式,当 n 为奇数时,?-1? (2?+ 1)(?+ ?) ?= (-1 )?(?(?|?) + ?(|?) cos2? ?=0?-1 ?(?-?)(?-?) = (-1 ) ? ?(?(?- ?|?)?=0 ?(?-?)(?-?) 的形式出现。基于以上的分析, 假如输入矩阵的大小为 8 8,那么这个算法就可以用以下 的图来表示,
25、图 2 8X8 DCT算法结构图, O 表示相加,虚线表示取反O 表示相加,虚线表示取反图 2(续) 8X8 DCT 算法结构图(二)2-D IDCT理论分析对于正交变换而言,如果不考虑系数的影响,那么其相对应的反变换就直接是正变换的反过程而已。那么可以利用这个来推导出快速IDCT算法。如果在 DCT变换中不考虑(2.1)中前面的系数, 那么反变换的算法结构就仅 仅是正变换算法结构的取反。 例如对于 8X8的 IDCT变换而言,如果不考虑系数, 那么其算法结构如图 3 所示。可以看到, 相对于图 2 而言,图 3 仅仅是将图 2 中 信号的流向做了取反,相当于是反向做运算,然后做 N 个一维
26、IDCT,其运算量 与(一)中分析的 DCT的运算量相当,相对于传统的 IDCT算法而言也仅仅需要 50%的一维 DCT变换次数。图 3 8X8 IDCT算法结构图,O 表示相加,虚线表示取反图 4(续) 8X8 IDCT算法结构图, O 表示相加,虚线表示取反但是如果将系数考虑进来,就需要做一些额外的调整,调整的过程如下:1)对于初始输入数据对相对应的 DCT系数做归一化处理12)将第一步得到的数据乘以系数 1883)每个一维 IDCT的第一个输入数据需要再乘以系数 12 经过以上三个步骤,处理后就可以得到相对应的 IDCT数据。(三)算法的复杂度分析从(一)和(二)部分的内容中可以看到对于
27、 N N为的 DCT变换,仅仅需 要计算 N 个一维的 DCT。我们在本小节中以需要的乘法运算的次数和加法运算 次数来作为算法复杂度比较的标准。由于N N大小的二维 DCT变换仅仅需要 N 次一维的 DCT变换,那么相对于 传统的二维 DCT 算法而言,本报告中的算法所需要的乘法运算量就仅仅是传统 方法的 50%。而对于一维 DCT的算法复杂度, 目前比较高效的算法需要的乘法运 算量为?2 log2 ?如果在二维 DCT变换中使用这个一维 DCT算法,那么所需乘法运算量为,?22 log2 ?(2.25)表格 1 所需乘法运算次数比较4X432241616168X819214410496961
28、6X16102476856851251232X3251203840274025602560表格 2 所需加法运算次数比较4X472727068748X846446446248446616X162592259225582531253032X321337613376129501257812738至于所需的加法运算量, 从前面的分析中可以知道, 除了 DCT运算的加法运 算量,其他地方加法运算量为 ?2(1+ ?2?) - 2?- (?- 2)。而对于一维 DCT 3?变换而言,所需的加法运算量为 2 log2 ?- ?+ 1。所以二维 DCT算法所需的加法运算量为,5?22 log2 ?- 2?+
29、 2 (2.26) 依据(2.25)和(2.26)和其他参考文献中的快速算法, 列出了表格 1 和表格 2,分别展示了各个算法所需的乘法运算次数和加法运算次数。从表格中可以发 现,本报告中的算法所需的乘法运算量与文献 3 中一样,并且比其他算法都要低。 同时,加法运算量与其他算法基本一致。三、实现与测试在本章节中,将根据第二章节中的 DCT 和 IDCT快速算法的理论分析,在 MATLAB平台上实现相应的 DCT变换算法和 IDCT 变换算法。然后利用这两个算 法对一个实际图像做变换与反变换处理,观察处理的效果。(一) 算法的实现在本小节里面,将会依据第二章节的分析,在 MATLAB平台上实现
30、 4X4 的快 速 DCT与 IDCT算法。从第二章中的分析中可以知道,快速算法可以用流向图很简洁地表示出来。 那么依据前面的公式,对于 4X4的 DCT和IDCT变化可以得到以下的流向图,a)b)图 5 4X4 算法结构图,a)DCT(b)IDCT那么依据图 5,算法的流程图如下:图 6 快速 DCT 算法流程图图 7 快速 IDCT 算法流程图(二) 算法的测试测试环境: Dell 商用台式机, MATLAB 2013a,测试图片大小为 614x614.原图DCT 变 换 图 恢 复 图图 8 快速 DCT 与 IDCT 测试效果图从图 8的实际测试结果来看,原图经过了 4X4的 DCT变
31、换之后,在每个 4X4 大小的方格内, 图像的能量都集中分布于少数几个系数上, 这符合正交变换的特 点。同时经过了 IDCT 变换之后,可以完整的恢复图像原来的模样,且不存在失 真与格纹现象。这证明了算法的正确性。表格 3 程序运行时间比较自定义函数MATLAB 已有函数函数名称调用次数运行时间函数名称调用次数运行时间main13.969smain16.804sfdct2237161.594sdct2237163.228sfidct2237161.396sidct2237162.674s表格 3是 MATLAB利用 CPU的运行时间计算出来的结果, 虽然结果的具体数 值并不具有很高的可靠性,
32、但是在相同条件下得出来的结果, 相互之间具有可比 性。通过比较可以发现, 在相同的调用次数的条件下, 无论是 fdct2 函数还是 fidct2 函数,其运行时间都比 MATLAB已有函数的运行时间减少了将近 50%。四、总结与展望本次课程报告首先分析了离散余弦变换( DCT)在图像压缩领域的重要性, 它本身虽然不具有压缩能力, 但是变换给后续的编码和量化操作带来了便利, 在 多个图像、 视频标准中都有应用。 DCT的广泛应用也为人们对它的研究增添了动 力,由于传统计算方法的效率低下, 许多文献提出了相关的 DCT快速算法。 本次 报告就研究、 实现和分析了其中一种性能比较优越的快速算法。 这
33、种快速算法的 乘法运算量仅仅只有传统算法的 50%,而加法运算量和其他方法相当, 具有很高 的效率,同时,这种算法可以能够用流向图来直观的表示,简单而直观。而且由 于这种算法具有比较好的对称性, 它能够很容易地应用到多线程并行处理中, 这 样效率又可以得到很大的提升,同时这种算法还可以直接用VLSI 结构来实现,这说明这种算的应用相对简单。 在进行了理论分析之后, 基于理论分析在 MATLAB 平台上实现了此算法, 并用实际图片进行了测试, 测试结果表明, 此算法可以快 速地进行 DCT变换和 IDCT变换,能够完整的恢复出原图。此外,还将此算法与 MATLAB自带的 DCT变换和 IDCT变
34、换函数在相同的条件下进行了运行时间比较, 比较结果表明,此算法的运行时间相对于 MATLAB自带的函数减少了将近 50%, 具有较高的效率。虽然这种的算法具有很高的效率,但是它依然有它的局限性。这种算法的最 大的局限性在于, 如果二维矩阵的维数很大, 那么这种算法将会难以实现。 因为 这种算法需要对输入数据进行排列,在进行了一维 DCT 后还需要进行多次的线 性运算,这种排列与线性运算的组合并不具有很明显的规律性。 在算法的实现过 程中,对于 16X16大小的矩阵,需要列出 256 个式子;但是对于 32X32的矩阵, 需要的式子达到了 1024 个。所以对于大型的矩阵,这种方法是不适合的,比
35、较 适合于 16X16 以下的矩阵五、参考文献C.Ma, “ A fast recursive two dimension cosine transform” , Intelligent Robots andComputer Visio: Seventh in a Series, David P. Casasent, Ed., in Proc. SPIE 1002, pp.541-548, 1988.M. Vetterli,“ Fast 2-D discrete cosine transform ,” in Proc. ICASSP 85, MarP. Duhamel and C. Guill
36、emot,“ Polynomial transform computation of 2-D DCT,”Proc. ICASSP 90 , pp. 1515-1518, Apr. 1990.N. I. Cho and S. U. Lee,“ A fast 4X4 DCT algorithm for the recursive 2-D DCT,Trans. Acoust., Speech, Signal Processing, submitted for publication.F. A. Kamangar and K. R. Rao,“ Fast algorithm for the 2-D d
37、iscrete cosine tansform,IEEE Trans, Comput., vol. C-31, pp. 899-906, Spet. 1982.B. G. Lee, “ A new algorithm to compute the discrete cosine transform ,” IEEEAcoust., Speech, Signal Processing, vol. ASSP-32, pp. 1243-1245, Dec. 1987.7 杨帆.数字图像处理与分析 .北京:北京航空航天大学出版社 , 20078 全红艳,曹桂涛 . 数字图像处理原理与实现方法 . 北京:
38、机械工业出版社, 2014六、 附件(一 ) 函数 fdct2 源码endfunction Y = fdct2( X ) %快速 4X4 DCT变换函数 % By 黄跃辉 2016/11/30 %检测输入量a,b = size(X);if a = 4 | b = 4Y = zeros(4,4);return;end%end%对 A 中的每一列做一维 DCT得, 到 Bfor i=1:4B(:,i) = T*A(:,i);end clear A T%由 B 元素的线性组合得到结果A = zeros(4,4);B = zeros(4,4);A(1,1) = X(1,1)+X(1,4);A(2,1)
39、 = X(2,2)+X(2,3);A(3,1) = X(3,3)+X(3,2);A(4,1) = X(4,4)+X(4,1);A(1,2) = X(1,1)-X(1,4);A(2,2) = X(2,2)-X(2,3);A(3,2) = X(3,3)-X(3,2);A(4,2) = X(4,4)-X(4,1);A(1,3) = X(1,2)+X(1,3);A(2,3) = X(2,1)+X(2,4);A(3,3) = X(3,4)+X(3,1);A(4,3) = X(4,3)+X(4,2);Y = zeros(4,4);Y(1,1) = (B(1,1)+B(1,3)*0.25;Y(2,1) =
40、(B(2,1)+B(2,3)*sqrt(2)/4;Y(3,1) = (B(3,1)+B(3,3)*sqrt(2)/4;Y(4,1) = (B(4,1)+B(4,3)*sqrt(2)/4;Y(2,2) = 0.5*(B(3,2)+B(3,4)+B(1,2)*0.5;Y(1,2) = (B(2,2)+B(4,4)*sqrt(2)/4;Y(4,4) = 0.5*(B(1,2)-B(3,2)- B(3,4)*0.5;Y(3,4) = 0.5*(B(2,2)-B(4,4)-B(4,2)-B(2,4)*0.5;Y(3,3) = 0.5*(B(1,1)-B(1,3)*0.5;Y(2,3) = 0.5*(B(
41、2,1)-B(2,3)+B(4,1)- B(4,3)*0.5;A(1,4) = X(1,2)-X(1,3);A(2,4) = X(2,4)-X(2,1);A(3,4) = X(3,1)-X(3,4);A(4,4) = X(4,3)-X(4,2);Y(1,3) = (B(3,1)-B(3,3)*sqrt(2)/4;Y(4,3) = 0.5*(B(2,1)+B(4,3)-B(2,3)- B(4,1)*0.5;Y(2,4) = 0.5*(B(3,2)-B(1,4)- B(3,4)*0.5;Y(1,4) = (B(4,2)-B(2,4)*sqrt(2)/4;Y(4,2) = 0.5*(B(1,4)+B
42、(3,2)-%获取变换矩阵T=zeros(4);for i=0:3B(3,4)*0.5;Y(3,2) =B(4,4)+B(4,2)+B(2,4)*0.5;0.5*(B(2,2)-endfor j=0:3T(i+1,j+1)=cos(pi*(j+0.5)*i/4);(二 ) 函数 fidct2 源码 function Y = fidct2( X ) %快速 4X4DCT反变换 % By 黄跃辉 2016/11/30 %检测输入量a,b = size(X);if a = 4 | b = 4Y = zeros(4,4); return; end%对 X 做归一化处理X(1,1) = X(1,1)*4;X(2,1) = X(2,1)*4/sqrt(2);X(3,1) = X(3,1)*4/sqrt(2);X(4,1) = X(4,1)*4/sqrt(2);X(2,2) = X(2,2)*2;X(1,2) = X(1,2)*4/sqrt(2);X(4,4) = X(4,4)*2;X(3,4) = X(3,4)*2;X(3,3) = X(3,3)*2;X(2,3) = X(2,3)*2;X(1,3) = X(1,3)*4/sqrt(2);X(4,3) = X(4,3)*2;X(2,4)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 内分泌科糖尿病饮食指导要点
- 2026年心理学基础概念与理论解析
- 2026年金融风险管理及合规性测试题目
- 普通员工的述职报告
- 胃癌术后化疗护理规范培训
- 2026年私募证券投资基金经理考核方案
- 2026年环卫设施除雪设备配备及推雪铲融雪剂撒布机调试验收题库
- 普通员工自我批评
- 新员工简单自我介绍
- 放射科放射治疗术后护理指南
- 毕业设计(论文)-角码三角支架冲压件冲压模具设计-2套模具
- 儿童课件夏天的知了
- 食品智能加工技术专业教学标准(高等职业教育专科)2025修订
- 铝锭加工居间合同协议书
- 监理项目联合协议书
- 《经典常谈》每章习题及答案
- 青岛西海岸新区2025中考自主招生英语试卷试题(含答案详解)
- JGT163-2013钢筋机械连接用套筒
- JT-T-146-1994钢筋混凝土船船体质量检验评定标准
- 脚手架施工过程中的风险评估
- 美容院店长考核标准
评论
0/150
提交评论